紀(jì)佳琪,蔡永華+,郭景峰
(1.河北民族師范學(xué)院 數(shù)學(xué)與計算機科學(xué)學(xué)院,河北 承德 067000;2.燕山大學(xué) 信息科學(xué)與工程學(xué)院,河北 秦皇島 066000)
在海量數(shù)據(jù)中獲取有價值信息是大數(shù)據(jù)時代面臨的一大問題,雖然搜索引擎能夠根據(jù)關(guān)鍵詞快速地檢索到有用信息,但是這種檢索是同一的且不是個性化的。推薦系統(tǒng)可以很好地解決個性化推薦問題,它根據(jù)用戶的歷史行為數(shù)據(jù)為用戶匹配自身需求。在早期的推薦模型中,使用的訓(xùn)練數(shù)據(jù)大多是用戶對物品評分的顯式數(shù)據(jù)[1],由于不同用戶對同一物品的評分存在差異較大,一種帶有偏置項的矩陣分解技術(shù)解決了這個問題[2]。為了解決顯式數(shù)據(jù)稀疏性的問題,引入了額外數(shù)據(jù)到矩陣分解模型,如基于社交關(guān)系的矩陣分解模型[3]、使用物品內(nèi)容和評論的基于主題的矩陣分解模型[4]等。然而,僅僅使用顯式數(shù)據(jù)的推薦模型并不能產(chǎn)生較好的推薦結(jié)果,為此一些研究使用收藏、購買等隱式數(shù)據(jù)對推薦結(jié)果有了一定的提高[5,6]。近些年深度學(xué)習(xí)[8-10]理論也成功地應(yīng)用到了推薦系統(tǒng),如使用顯式數(shù)據(jù)基于受限玻爾茲曼機的推薦模型[10]、基于自編碼器和降噪自動編碼機的推薦模型[11]等。這些研究成果的核心思想是使用顯式數(shù)據(jù)通過學(xué)習(xí)他們間的深度隱結(jié)構(gòu)來完成推薦。也有一些研究使用隱式數(shù)據(jù)基于深度學(xué)習(xí)的推薦模型,如協(xié)同降噪自動編碼器[12]使用隱式數(shù)據(jù)構(gòu)建用戶偏好,神經(jīng)協(xié)同過濾[13]使用多層感知神經(jīng)網(wǎng)絡(luò)對用戶和物品的交互進行建模。上述研究只使用顯式數(shù)據(jù)或隱式數(shù)據(jù)通過深度學(xué)習(xí)進行建模,本文將同時使用顯式數(shù)據(jù)和隱式數(shù)據(jù),提出了一種基于深度神經(jīng)網(wǎng)絡(luò)的矩陣分解模型用于解決推薦問題。
使用U表示用戶,U={u1,u2,…,uM},共M個用戶。使用I表示物品,I={i1,i2,…,iN},共N個物品。R∈M×N表示用戶評分矩陣,其中每一項Rij表示用戶i對物品j的評分,該評分可以是顯式的,也可以是隱式的。顯式評分是用戶根據(jù)自己的喜好程度給予物品的評價分,如在購物完成后給予1顆星表示1分,給予2顆星表示2分以此類推,一般情況下評分值可取1至5的整數(shù),分值越高表示用戶對該物品喜好程度越大。隱式評分是指用戶的收藏、購買等行為折合成的評分,一般用1和0表示,如有上述行為用1表示,沒有上述行為用0表示。


圖1 用戶評分矩陣
因需要同時考慮顯式數(shù)據(jù)和隱式數(shù)據(jù),因此不能像圖1那樣簡單處理。由于評分矩陣中應(yīng)既包括顯式數(shù)據(jù)也應(yīng)包括隱式數(shù)據(jù),因此用戶i對物品j的顯式評分用原始值表示(一般情況下為1至5的數(shù)值),用戶i對物品j的隱式反饋用1表示,未知項用0表示,如圖2所示。本文認(rèn)為R矩陣中的數(shù)值表示了用戶對物品的喜好程度,數(shù)值越高表示喜好程度越大。

圖2 改進的用戶評分矩陣
(1)

(2)
式(2)中,pi和qj分別表示用戶隱向量和物品隱向量。在神經(jīng)協(xié)同過濾[13]模型中,使用多層感知機來學(xué)習(xí)f,此時的f是非線性的,能夠表達(dá)用戶和物品間深度復(fù)雜的交互關(guān)系。
本文,我們綜合運用了上述兩種思想,首先把矩陣分解技術(shù)和深度神經(jīng)網(wǎng)絡(luò)結(jié)合起來,通過一個深層次的網(wǎng)絡(luò)架構(gòu)學(xué)習(xí)用戶隱向量和物品隱向量,然后通過用戶和物品隱向量的內(nèi)積得到預(yù)測評分,從而完成推薦任務(wù)。
本節(jié)首先給出本文設(shè)計的深度神經(jīng)網(wǎng)絡(luò)架構(gòu),通過這個架構(gòu)能夠把用戶和物品用低維隱向量表示,然后定義我們重新設(shè)計的損失函數(shù)和優(yōu)化方法,最后進行模型的訓(xùn)練。
本文使用兩個分別含有多個隱藏層的全連接深度神經(jīng)網(wǎng)絡(luò),與一般深度神經(jīng)網(wǎng)絡(luò)不同的是本文的深度神經(jīng)網(wǎng)絡(luò)輸出層并不是一個概率值,而是特征向量。然后對這兩個特征向量再做點積運算得出評分預(yù)測值。
圖3描述了本文提出的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)。輸入層使用的輸入數(shù)據(jù)是第1節(jié)圖2描述的評分矩陣R,其中Ri*表示矩陣R的第i行,即第i個用戶對所有物品的評分。R*j表示矩陣R的第j列,即所有用戶對物品j的評分。由于R∈M×N,顯然Ri*∈N,R*j∈M。

圖3 深度神經(jīng)網(wǎng)絡(luò)架構(gòu)

(3)

ReLU(x)=max(0,x)
(4)
同理,圖3深度神經(jīng)網(wǎng)絡(luò)架構(gòu)中右側(cè)是用來生成物品隱向量qj部分。與左側(cè)部分相似,可以形式化的用式(5)表示。其中上標(biāo)q用來表示圖3深度神經(jīng)網(wǎng)絡(luò)架構(gòu)中右側(cè)用來生成物品隱向量qj部分,其余符號含義與式(3)中符號含義相同
(5)
提取到用戶特征隱向量pi和物品特征隱向量qj后,可以通過計算這兩個隱向量的內(nèi)積得到用戶i對物品j的評分預(yù)測值,具體計算方法如式(2)所示。
在上述所提的架構(gòu)中pi和qj不再由傳統(tǒng)的矩陣分解方法生成,pi和qj是深度神經(jīng)網(wǎng)絡(luò)對Ri*和R*j相關(guān)運算后提取生成,而提取方法充分地利用了深度神經(jīng)網(wǎng)絡(luò)強大的特征自動抽取能力,因此pi和qj能夠更好的抽象表示用戶隱向量和物品隱向量。

(6)
為了使2.1節(jié)提出的深度網(wǎng)絡(luò)架構(gòu)得到較好的訓(xùn)練,上述傳統(tǒng)的損失函數(shù)并不能滿足要求,需要從新設(shè)計待優(yōu)化的損失函數(shù),本文把損失函數(shù)的一般形式表示為式(7)。其中R+表示觀測到的數(shù)據(jù),即顯式數(shù)據(jù)和隱式數(shù)據(jù),稱為正例;R-表示未觀測到的數(shù)據(jù),即R矩陣中我們設(shè)為0的數(shù)據(jù)項,稱為負(fù)例。在實際訓(xùn)練中,由于數(shù)據(jù)量過大(共M*N條數(shù)據(jù)),因此并不會使用所有負(fù)例參與訓(xùn)練,而是抽取一定的比例的負(fù)例參與訓(xùn)練,具體抽取比例的大小將會在后面小節(jié)的實驗中給出。為了公式符號的簡潔,本文仍使用R-代表抽樣過的負(fù)例數(shù)據(jù)
(7)
待優(yōu)化目標(biāo)中損失函數(shù)的定義尤為重要,假設(shè)只使用顯示數(shù)據(jù),可以把評分預(yù)測轉(zhuǎn)換為回歸問題,此時可以使用平方差損失函數(shù),其定義如式(8)所示
(8)
其中,θij是待優(yōu)化參數(shù)表示當(dāng)前訓(xùn)練數(shù)據(jù)Rij的權(quán)重。然而該損失函數(shù)無法對隱式數(shù)據(jù)和抽樣的負(fù)例數(shù)據(jù)進行訓(xùn)練,因為這兩類數(shù)據(jù)的值只為1或0,此時可以把評分預(yù)測轉(zhuǎn)換為二分類問題,為此可以使用二分類交叉熵?fù)p失函數(shù)對這兩類數(shù)據(jù)進行訓(xùn)練如式(9)所示
(9)
由于本文同時使用了顯式數(shù)據(jù)和隱式數(shù)據(jù),因此在綜合考慮了式(8)和式(9)的特點后設(shè)計了一個全新的損失函數(shù)如式(10)所示,該損失函數(shù)能夠?qū)︼@示數(shù)據(jù)和隱式數(shù)據(jù)同時進行優(yōu)化。該損失函數(shù)主要是在訓(xùn)練時對訓(xùn)練數(shù)據(jù)進行歸一化,即所有訓(xùn)練數(shù)據(jù)都除以R矩陣中的最大值(max(R))。經(jīng)過這樣的處理,訓(xùn)練數(shù)據(jù)的范圍會限定在0和1之間,因此可以使用類似交叉熵?fù)p失的損失函數(shù)
(10)
結(jié)合2.1節(jié)提出的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)和2.2節(jié)提出的損失函數(shù),得到了最終待優(yōu)化的目標(biāo)函數(shù),本節(jié)給出模型優(yōu)化過程的詳細(xì)算法,詳見算法1。
算法1:深度神經(jīng)網(wǎng)絡(luò)推薦模型優(yōu)化算法
Input:R,neg_ratio,iter_num
初始化:

(2)設(shè)置R+為R中不為0的項
(3)設(shè)置R-為R中所有為0的項
(4)對R-進行隨機采樣,其采樣個數(shù)滿足|R-|=neg_ratio*|R+|
(5)設(shè)置訓(xùn)練集T=R+∪R-
(6)設(shè)置M=R中行數(shù),N=R中列數(shù)
(7)fortfrom 0 toiter_num:
(8)forifrom 0 toM:
(9)forjfrom 0 toN:
(10) 使用式(3)計算pi
(11) 使用式(5)計算qj
(13) 使用式(10)計算損失函數(shù)

本節(jié)將展開一系列實驗驗證本文提出模型的有效性,同時根據(jù)實驗結(jié)果確定不同超參數(shù)的設(shè)置,如網(wǎng)絡(luò)層數(shù)、每層的神經(jīng)元數(shù)、負(fù)例采樣率(neg_ratio)等。
本文實驗中使用的數(shù)據(jù)集為MovieLens 1M和MovieTweetings 10k,其詳情見表1。

表1 數(shù)據(jù)集詳情
MovieLens 1M(https://movielens.org/):數(shù)據(jù)集的提供者已對該數(shù)據(jù)集進行過清洗,保證了每個用戶至少有20條評分信息,每個物品至少有5條評分信息,評分值從1-5。該數(shù)據(jù)集包含了6040名用戶對3706首歌曲的1 000 209條評分信息。
MovieTweetings 10k(http://research.yahoo.com/Academic_Relations):來自于Twitter的電影分級數(shù)據(jù)集,評分值從1-10。該數(shù)據(jù)集包含了3794名用戶對3096部電影的10 000條評分。
本文使用5折交叉驗證得出最終的實驗結(jié)果,使用命中率(hit rate,HR)和歸一化折損累積增益(normalized discounted cumulative gain,NDCG)作為評價指標(biāo)。HR@n表示在推薦的n個物品中,能夠命中至少一個的比例,該值越高越好。NDCG@n表示在推薦的n個物品中,不僅命中,而且排序盡量正確,同樣該值越高越好。
3.3.1 負(fù)例采樣率
在算法1中,需要從數(shù)據(jù)集的負(fù)例中采樣一定比例的負(fù)例作為最終訓(xùn)練數(shù)據(jù),我們通過這個不同的采樣率值(neg_ratio,neg_ratio@1表示采樣率設(shè)置為1),觀察各評價指標(biāo)的變化。從表2中看出隨著采樣負(fù)例采樣比例的提高,HR和NDCG的值程上升趨勢但該趨勢逐漸緩慢,隨著采樣比例的進一步提高,HR和NDCG還有下降趨勢??紤]到采樣越多的負(fù)例,其訓(xùn)練時間越長,并且無限增加負(fù)例數(shù)并不能無限提升系統(tǒng)性能,權(quán)衡之后本文取neg_ratio的值為5。

表2 不同負(fù)例采樣率對評價結(jié)果的影響
3.3.2 深度神經(jīng)網(wǎng)絡(luò)層數(shù)及每層的神經(jīng)元數(shù)
本文提出的模型中,是通過一個深度神經(jīng)網(wǎng)絡(luò)把用戶和物品映射到一個隱向量空間中。由于網(wǎng)絡(luò)層數(shù)及每層的神經(jīng)元數(shù)的組合有無窮多種,因此不可能窮舉所有情況進行實驗。結(jié)合其它研究神經(jīng)網(wǎng)絡(luò)學(xué)者的一些指導(dǎo)意見,即隱藏層數(shù)過多和神經(jīng)元數(shù)過多不一定對性能有極大的提升,反而可能還會產(chǎn)生梯度消失或梯度爆炸問題造成性能的急劇下降。因此,我們首先嘗試了隱藏層數(shù)從1-5增長,每層神經(jīng)元個數(shù)相同,負(fù)例采樣率設(shè)為1。由于篇幅原因,只列舉了在兩個數(shù)據(jù)集上HR的實驗結(jié)果如圖4所示。由于當(dāng)隱藏層數(shù)為4和5時HR值迅速下降,失去了比較意義,因此未在圖中畫出,這也說明無限增加隱藏層數(shù)并不能帶來性能的持續(xù)提升。

圖4 神經(jīng)網(wǎng)絡(luò)層數(shù)及神經(jīng)元個數(shù)對結(jié)果的影響
從圖4中我們還可以看出,無論在哪個數(shù)據(jù)集上,當(dāng)隱藏層個數(shù)為2的時候性能最好。當(dāng)我們變化隱藏層神經(jīng)元個數(shù)時,可以看到性能整體成上升趨勢,其中當(dāng)神經(jīng)元個數(shù)從2增長到8時,上升趨勢很明顯,說明過少神經(jīng)元不能夠很好地進行特征表征,當(dāng)神經(jīng)元個數(shù)從8增長到1024時,上升趨勢開始變得平緩,說明持續(xù)增加神經(jīng)元并不能無限提高系統(tǒng)性能。當(dāng)神經(jīng)元從512增長到1024時,系統(tǒng)性能還有下降趨勢。根據(jù)以上分析,我們把神經(jīng)元個數(shù)設(shè)定為512。
3.3.3 隱向量長度選擇
使用深度神經(jīng)網(wǎng)絡(luò)的目的是把用戶和物品轉(zhuǎn)化為用戶隱向量和物品隱向量,而隱向量的長度會對最終推薦結(jié)果產(chǎn)生影響,因此我們分別設(shè)置這個隱向量的長度從32到256得出的實驗結(jié)果見表3。從表3中可以看出,當(dāng)隱向量的長度為128時,推薦結(jié)果最好。

表3 隱向量長度對推薦結(jié)果的影響
通過上述3部分實驗,得出模型最佳超參數(shù)。即神經(jīng)網(wǎng)絡(luò)中的隱藏層數(shù)為2,每個隱藏層都包含512個神經(jīng)元,輸出的隱向量長度為128(即向量pi和qj的長度),負(fù)例采樣率為5。再接下來的對比實驗中,默認(rèn)都使用上述超參數(shù)。
為驗證本文提出模型的有效性,選取了ItemKNN(item-based collaborative filtering)[15,16],eALS(element-wise alternating least squares)[17]作為比較模型。
ItemKNN:基于物品的協(xié)同過濾算法,是推薦系統(tǒng)中較早的算法,目前已廣泛用于工業(yè)界。
eALS:該算法使用隱式數(shù)據(jù),通過對缺失數(shù)據(jù)賦予不同權(quán)重,使用矩陣分解方法,取得了良好的推薦效果。是目前基于矩陣分解方法取得較好推薦結(jié)果的算法之一。
圖5顯示了本文提出的模型和其它模型在兩個數(shù)據(jù)集上HR@5和NDCG@5的比較結(jié)果。從結(jié)果中可以看出無論HR@5指標(biāo)還是NDCG@5指標(biāo),本文的模型都由遠(yuǎn)優(yōu)于其它兩個模型(如:本文模型在MovieLens 1M數(shù)據(jù)集上HR@5指標(biāo)比ItemKNN和eALS分別提升14.9%和3.1%),說明本文提出的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)能夠很好捕獲物品和用戶之間的隱關(guān)系,提取到了比較合理的用戶隱向量和物品隱向量,結(jié)合顯式數(shù)據(jù)和隱式數(shù)據(jù)并經(jīng)過合理設(shè)計的損失函數(shù)后,本文模型取得了良好的效果。

圖5 與其它模型比較結(jié)果
本文提出了一個基于深度學(xué)習(xí)的矩陣分解推薦模型,通過精心設(shè)計的深度神經(jīng)網(wǎng)絡(luò)架構(gòu),把用戶和物品映射成低維空間的用戶隱向量和物品隱向量,然后通過這兩個隱向量的內(nèi)積得到用戶對物品的評分預(yù)測。模型中的訓(xùn)練數(shù)據(jù)包含了顯式數(shù)據(jù)和隱式數(shù)據(jù),為此設(shè)計了一個損失函數(shù)能夠同時計算這兩類數(shù)據(jù)的損失。通過與其它模型的比較,從實驗結(jié)果可以看到本文所提出的模型在推薦性能上有較大提升。
在接下來的工作中的,我們將繼續(xù)調(diào)整深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),以需求更好的特征提取。同時考慮使用卷積神經(jīng)網(wǎng)絡(luò)或循環(huán)神經(jīng)網(wǎng)絡(luò)對一些富信息進行提取,然后融合到推薦算法中以獲得更好的推薦效果。