紀(jì)佳琪,蔡永華+,郭景峰
(1.河北民族師范學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,河北 承德 067000;2.燕山大學(xué) 信息科學(xué)與工程學(xué)院,河北 秦皇島 066000)
在海量數(shù)據(jù)中獲取有價(jià)值信息是大數(shù)據(jù)時(shí)代面臨的一大問(wèn)題,雖然搜索引擎能夠根據(jù)關(guān)鍵詞快速地檢索到有用信息,但是這種檢索是同一的且不是個(gè)性化的。推薦系統(tǒng)可以很好地解決個(gè)性化推薦問(wèn)題,它根據(jù)用戶的歷史行為數(shù)據(jù)為用戶匹配自身需求。在早期的推薦模型中,使用的訓(xùn)練數(shù)據(jù)大多是用戶對(duì)物品評(píng)分的顯式數(shù)據(jù)[1],由于不同用戶對(duì)同一物品的評(píng)分存在差異較大,一種帶有偏置項(xiàng)的矩陣分解技術(shù)解決了這個(gè)問(wèn)題[2]。為了解決顯式數(shù)據(jù)稀疏性的問(wèn)題,引入了額外數(shù)據(jù)到矩陣分解模型,如基于社交關(guān)系的矩陣分解模型[3]、使用物品內(nèi)容和評(píng)論的基于主題的矩陣分解模型[4]等。然而,僅僅使用顯式數(shù)據(jù)的推薦模型并不能產(chǎn)生較好的推薦結(jié)果,為此一些研究使用收藏、購(gòu)買等隱式數(shù)據(jù)對(duì)推薦結(jié)果有了一定的提高[5,6]。近些年深度學(xué)習(xí)[8-10]理論也成功地應(yīng)用到了推薦系統(tǒng),如使用顯式數(shù)據(jù)基于受限玻爾茲曼機(jī)的推薦模型[10]、基于自編碼器和降噪自動(dòng)編碼機(jī)的推薦模型[11]等。這些研究成果的核心思想是使用顯式數(shù)據(jù)通過(guò)學(xué)習(xí)他們間的深度隱結(jié)構(gòu)來(lái)完成推薦。也有一些研究使用隱式數(shù)據(jù)基于深度學(xué)習(xí)的推薦模型,如協(xié)同降噪自動(dòng)編碼器[12]使用隱式數(shù)據(jù)構(gòu)建用戶偏好,神經(jīng)協(xié)同過(guò)濾[13]使用多層感知神經(jīng)網(wǎng)絡(luò)對(duì)用戶和物品的交互進(jìn)行建模。上述研究只使用顯式數(shù)據(jù)或隱式數(shù)據(jù)通過(guò)深度學(xué)習(xí)進(jìn)行建模,本文將同時(shí)使用顯式數(shù)據(jù)和隱式數(shù)據(jù),提出了一種基于深度神經(jīng)網(wǎng)絡(luò)的矩陣分解模型用于解決推薦問(wèn)題。
使用U表示用戶,U={u1,u2,…,uM},共M個(gè)用戶。使用I表示物品,I={i1,i2,…,iN},共N個(gè)物品。R∈M×N表示用戶評(píng)分矩陣,其中每一項(xiàng)Rij表示用戶i對(duì)物品j的評(píng)分,該評(píng)分可以是顯式的,也可以是隱式的。顯式評(píng)分是用戶根據(jù)自己的喜好程度給予物品的評(píng)價(jià)分,如在購(gòu)物完成后給予1顆星表示1分,給予2顆星表示2分以此類推,一般情況下評(píng)分值可取1至5的整數(shù),分值越高表示用戶對(duì)該物品喜好程度越大。隱式評(píng)分是指用戶的收藏、購(gòu)買等行為折合成的評(píng)分,一般用1和0表示,如有上述行為用1表示,沒(méi)有上述行為用0表示。
圖1 用戶評(píng)分矩陣
因需要同時(shí)考慮顯式數(shù)據(jù)和隱式數(shù)據(jù),因此不能像圖1那樣簡(jiǎn)單處理。由于評(píng)分矩陣中應(yīng)既包括顯式數(shù)據(jù)也應(yīng)包括隱式數(shù)據(jù),因此用戶i對(duì)物品j的顯式評(píng)分用原始值表示(一般情況下為1至5的數(shù)值),用戶i對(duì)物品j的隱式反饋用1表示,未知項(xiàng)用0表示,如圖2所示。本文認(rèn)為R矩陣中的數(shù)值表示了用戶對(duì)物品的喜好程度,數(shù)值越高表示喜好程度越大。
圖2 改進(jìn)的用戶評(píng)分矩陣
(1)
(2)
式(2)中,pi和qj分別表示用戶隱向量和物品隱向量。在神經(jīng)協(xié)同過(guò)濾[13]模型中,使用多層感知機(jī)來(lái)學(xué)習(xí)f,此時(shí)的f是非線性的,能夠表達(dá)用戶和物品間深度復(fù)雜的交互關(guān)系。
本文,我們綜合運(yùn)用了上述兩種思想,首先把矩陣分解技術(shù)和深度神經(jīng)網(wǎng)絡(luò)結(jié)合起來(lái),通過(guò)一個(gè)深層次的網(wǎng)絡(luò)架構(gòu)學(xué)習(xí)用戶隱向量和物品隱向量,然后通過(guò)用戶和物品隱向量的內(nèi)積得到預(yù)測(cè)評(píng)分,從而完成推薦任務(wù)。
本節(jié)首先給出本文設(shè)計(jì)的深度神經(jīng)網(wǎng)絡(luò)架構(gòu),通過(guò)這個(gè)架構(gòu)能夠把用戶和物品用低維隱向量表示,然后定義我們重新設(shè)計(jì)的損失函數(shù)和優(yōu)化方法,最后進(jìn)行模型的訓(xùn)練。
本文使用兩個(gè)分別含有多個(gè)隱藏層的全連接深度神經(jīng)網(wǎng)絡(luò),與一般深度神經(jīng)網(wǎng)絡(luò)不同的是本文的深度神經(jīng)網(wǎng)絡(luò)輸出層并不是一個(gè)概率值,而是特征向量。然后對(duì)這兩個(gè)特征向量再做點(diǎn)積運(yùn)算得出評(píng)分預(yù)測(cè)值。
圖3描述了本文提出的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)。輸入層使用的輸入數(shù)據(jù)是第1節(jié)圖2描述的評(píng)分矩陣R,其中Ri*表示矩陣R的第i行,即第i個(gè)用戶對(duì)所有物品的評(píng)分。R*j表示矩陣R的第j列,即所有用戶對(duì)物品j的評(píng)分。由于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è)是用來(lái)生成物品隱向量qj部分。與左側(cè)部分相似,可以形式化的用式(5)表示。其中上標(biāo)q用來(lái)表示圖3深度神經(jīng)網(wǎng)絡(luò)架構(gòu)中右側(cè)用來(lái)生成物品隱向量qj部分,其余符號(hào)含義與式(3)中符號(hào)含義相同
(5)
提取到用戶特征隱向量pi和物品特征隱向量qj后,可以通過(guò)計(jì)算這兩個(gè)隱向量的內(nèi)積得到用戶i對(duì)物品j的評(píng)分預(yù)測(cè)值,具體計(jì)算方法如式(2)所示。
在上述所提的架構(gòu)中pi和qj不再由傳統(tǒng)的矩陣分解方法生成,pi和qj是深度神經(jīng)網(wǎng)絡(luò)對(duì)Ri*和R*j相關(guān)運(yùn)算后提取生成,而提取方法充分地利用了深度神經(jīng)網(wǎng)絡(luò)強(qiáng)大的特征自動(dòng)抽取能力,因此pi和qj能夠更好的抽象表示用戶隱向量和物品隱向量。
(6)
為了使2.1節(jié)提出的深度網(wǎng)絡(luò)架構(gòu)得到較好的訓(xùn)練,上述傳統(tǒng)的損失函數(shù)并不能滿足要求,需要從新設(shè)計(jì)待優(yōu)化的損失函數(shù),本文把損失函數(shù)的一般形式表示為式(7)。其中R+表示觀測(cè)到的數(shù)據(jù),即顯式數(shù)據(jù)和隱式數(shù)據(jù),稱為正例;R-表示未觀測(cè)到的數(shù)據(jù),即R矩陣中我們?cè)O(shè)為0的數(shù)據(jù)項(xiàng),稱為負(fù)例。在實(shí)際訓(xùn)練中,由于數(shù)據(jù)量過(guò)大(共M*N條數(shù)據(jù)),因此并不會(huì)使用所有負(fù)例參與訓(xùn)練,而是抽取一定的比例的負(fù)例參與訓(xùn)練,具體抽取比例的大小將會(huì)在后面小節(jié)的實(shí)驗(yàn)中給出。為了公式符號(hào)的簡(jiǎn)潔,本文仍使用R-代表抽樣過(guò)的負(fù)例數(shù)據(jù)
(7)
待優(yōu)化目標(biāo)中損失函數(shù)的定義尤為重要,假設(shè)只使用顯示數(shù)據(jù),可以把評(píng)分預(yù)測(cè)轉(zhuǎn)換為回歸問(wèn)題,此時(shí)可以使用平方差損失函數(shù),其定義如式(8)所示
(8)
其中,θij是待優(yōu)化參數(shù)表示當(dāng)前訓(xùn)練數(shù)據(jù)Rij的權(quán)重。然而該損失函數(shù)無(wú)法對(duì)隱式數(shù)據(jù)和抽樣的負(fù)例數(shù)據(jù)進(jìn)行訓(xùn)練,因?yàn)檫@兩類數(shù)據(jù)的值只為1或0,此時(shí)可以把評(píng)分預(yù)測(cè)轉(zhuǎn)換為二分類問(wèn)題,為此可以使用二分類交叉熵?fù)p失函數(shù)對(duì)這兩類數(shù)據(jù)進(jìn)行訓(xùn)練如式(9)所示
(9)
由于本文同時(shí)使用了顯式數(shù)據(jù)和隱式數(shù)據(jù),因此在綜合考慮了式(8)和式(9)的特點(diǎn)后設(shè)計(jì)了一個(gè)全新的損失函數(shù)如式(10)所示,該損失函數(shù)能夠?qū)︼@示數(shù)據(jù)和隱式數(shù)據(jù)同時(shí)進(jìn)行優(yōu)化。該損失函數(shù)主要是在訓(xùn)練時(shí)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行歸一化,即所有訓(xùn)練數(shù)據(jù)都除以R矩陣中的最大值(max(R))。經(jīng)過(guò)這樣的處理,訓(xùn)練數(shù)據(jù)的范圍會(huì)限定在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)化過(guò)程的詳細(xì)算法,詳見(jiàn)算法1。
算法1:深度神經(jīng)網(wǎng)絡(luò)推薦模型優(yōu)化算法
Input:R,neg_ratio,iter_num
初始化:
(2)設(shè)置R+為R中不為0的項(xiàng)
(3)設(shè)置R-為R中所有為0的項(xiàng)
(4)對(duì)R-進(jìn)行隨機(jī)采樣,其采樣個(gè)數(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)計(jì)算pi
(11) 使用式(5)計(jì)算qj
(13) 使用式(10)計(jì)算損失函數(shù)
本節(jié)將展開(kāi)一系列實(shí)驗(yàn)驗(yàn)證本文提出模型的有效性,同時(shí)根據(jù)實(shí)驗(yàn)結(jié)果確定不同超參數(shù)的設(shè)置,如網(wǎng)絡(luò)層數(shù)、每層的神經(jīng)元數(shù)、負(fù)例采樣率(neg_ratio)等。
本文實(shí)驗(yàn)中使用的數(shù)據(jù)集為MovieLens 1M和MovieTweetings 10k,其詳情見(jiàn)表1。
表1 數(shù)據(jù)集詳情
MovieLens 1M(https://movielens.org/):數(shù)據(jù)集的提供者已對(duì)該數(shù)據(jù)集進(jìn)行過(guò)清洗,保證了每個(gè)用戶至少有20條評(píng)分信息,每個(gè)物品至少有5條評(píng)分信息,評(píng)分值從1-5。該數(shù)據(jù)集包含了6040名用戶對(duì)3706首歌曲的1 000 209條評(píng)分信息。
MovieTweetings 10k(http://research.yahoo.com/Academic_Relations):來(lái)自于Twitter的電影分級(jí)數(shù)據(jù)集,評(píng)分值從1-10。該數(shù)據(jù)集包含了3794名用戶對(duì)3096部電影的10 000條評(píng)分。
本文使用5折交叉驗(yàn)證得出最終的實(shí)驗(yàn)結(jié)果,使用命中率(hit rate,HR)和歸一化折損累積增益(normalized discounted cumulative gain,NDCG)作為評(píng)價(jià)指標(biāo)。HR@n表示在推薦的n個(gè)物品中,能夠命中至少一個(gè)的比例,該值越高越好。NDCG@n表示在推薦的n個(gè)物品中,不僅命中,而且排序盡量正確,同樣該值越高越好。
3.3.1 負(fù)例采樣率
在算法1中,需要從數(shù)據(jù)集的負(fù)例中采樣一定比例的負(fù)例作為最終訓(xùn)練數(shù)據(jù),我們通過(guò)這個(gè)不同的采樣率值(neg_ratio,neg_ratio@1表示采樣率設(shè)置為1),觀察各評(píng)價(jià)指標(biāo)的變化。從表2中看出隨著采樣負(fù)例采樣比例的提高,HR和NDCG的值程上升趨勢(shì)但該趨勢(shì)逐漸緩慢,隨著采樣比例的進(jìn)一步提高,HR和NDCG還有下降趨勢(shì)??紤]到采樣越多的負(fù)例,其訓(xùn)練時(shí)間越長(zhǎng),并且無(wú)限增加負(fù)例數(shù)并不能無(wú)限提升系統(tǒng)性能,權(quán)衡之后本文取neg_ratio的值為5。
表2 不同負(fù)例采樣率對(duì)評(píng)價(jià)結(jié)果的影響
3.3.2 深度神經(jīng)網(wǎng)絡(luò)層數(shù)及每層的神經(jīng)元數(shù)
本文提出的模型中,是通過(guò)一個(gè)深度神經(jīng)網(wǎng)絡(luò)把用戶和物品映射到一個(gè)隱向量空間中。由于網(wǎng)絡(luò)層數(shù)及每層的神經(jīng)元數(shù)的組合有無(wú)窮多種,因此不可能窮舉所有情況進(jìn)行實(shí)驗(yàn)。結(jié)合其它研究神經(jīng)網(wǎng)絡(luò)學(xué)者的一些指導(dǎo)意見(jiàn),即隱藏層數(shù)過(guò)多和神經(jīng)元數(shù)過(guò)多不一定對(duì)性能有極大的提升,反而可能還會(huì)產(chǎn)生梯度消失或梯度爆炸問(wèn)題造成性能的急劇下降。因此,我們首先嘗試了隱藏層數(shù)從1-5增長(zhǎng),每層神經(jīng)元個(gè)數(shù)相同,負(fù)例采樣率設(shè)為1。由于篇幅原因,只列舉了在兩個(gè)數(shù)據(jù)集上HR的實(shí)驗(yàn)結(jié)果如圖4所示。由于當(dāng)隱藏層數(shù)為4和5時(shí)HR值迅速下降,失去了比較意義,因此未在圖中畫出,這也說(shuō)明無(wú)限增加隱藏層數(shù)并不能帶來(lái)性能的持續(xù)提升。
圖4 神經(jīng)網(wǎng)絡(luò)層數(shù)及神經(jīng)元個(gè)數(shù)對(duì)結(jié)果的影響
從圖4中我們還可以看出,無(wú)論在哪個(gè)數(shù)據(jù)集上,當(dāng)隱藏層個(gè)數(shù)為2的時(shí)候性能最好。當(dāng)我們變化隱藏層神經(jīng)元個(gè)數(shù)時(shí),可以看到性能整體成上升趨勢(shì),其中當(dāng)神經(jīng)元個(gè)數(shù)從2增長(zhǎng)到8時(shí),上升趨勢(shì)很明顯,說(shuō)明過(guò)少神經(jīng)元不能夠很好地進(jìn)行特征表征,當(dāng)神經(jīng)元個(gè)數(shù)從8增長(zhǎng)到1024時(shí),上升趨勢(shì)開(kāi)始變得平緩,說(shuō)明持續(xù)增加神經(jīng)元并不能無(wú)限提高系統(tǒng)性能。當(dāng)神經(jīng)元從512增長(zhǎng)到1024時(shí),系統(tǒng)性能還有下降趨勢(shì)。根據(jù)以上分析,我們把神經(jīng)元個(gè)數(shù)設(shè)定為512。
3.3.3 隱向量長(zhǎng)度選擇
使用深度神經(jīng)網(wǎng)絡(luò)的目的是把用戶和物品轉(zhuǎn)化為用戶隱向量和物品隱向量,而隱向量的長(zhǎng)度會(huì)對(duì)最終推薦結(jié)果產(chǎn)生影響,因此我們分別設(shè)置這個(gè)隱向量的長(zhǎng)度從32到256得出的實(shí)驗(yàn)結(jié)果見(jiàn)表3。從表3中可以看出,當(dāng)隱向量的長(zhǎng)度為128時(shí),推薦結(jié)果最好。
表3 隱向量長(zhǎng)度對(duì)推薦結(jié)果的影響
通過(guò)上述3部分實(shí)驗(yàn),得出模型最佳超參數(shù)。即神經(jīng)網(wǎng)絡(luò)中的隱藏層數(shù)為2,每個(gè)隱藏層都包含512個(gè)神經(jīng)元,輸出的隱向量長(zhǎng)度為128(即向量pi和qj的長(zhǎng)度),負(fù)例采樣率為5。再接下來(lái)的對(duì)比實(shí)驗(yàn)中,默認(rèn)都使用上述超參數(shù)。
為驗(yàn)證本文提出模型的有效性,選取了ItemKNN(item-based collaborative filtering)[15,16],eALS(element-wise alternating least squares)[17]作為比較模型。
ItemKNN:基于物品的協(xié)同過(guò)濾算法,是推薦系統(tǒng)中較早的算法,目前已廣泛用于工業(yè)界。
eALS:該算法使用隱式數(shù)據(jù),通過(guò)對(duì)缺失數(shù)據(jù)賦予不同權(quán)重,使用矩陣分解方法,取得了良好的推薦效果。是目前基于矩陣分解方法取得較好推薦結(jié)果的算法之一。
圖5顯示了本文提出的模型和其它模型在兩個(gè)數(shù)據(jù)集上HR@5和NDCG@5的比較結(jié)果。從結(jié)果中可以看出無(wú)論HR@5指標(biāo)還是NDCG@5指標(biāo),本文的模型都由遠(yuǎn)優(yōu)于其它兩個(gè)模型(如:本文模型在MovieLens 1M數(shù)據(jù)集上HR@5指標(biāo)比ItemKNN和eALS分別提升14.9%和3.1%),說(shuō)明本文提出的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)能夠很好捕獲物品和用戶之間的隱關(guān)系,提取到了比較合理的用戶隱向量和物品隱向量,結(jié)合顯式數(shù)據(jù)和隱式數(shù)據(jù)并經(jīng)過(guò)合理設(shè)計(jì)的損失函數(shù)后,本文模型取得了良好的效果。
圖5 與其它模型比較結(jié)果
本文提出了一個(gè)基于深度學(xué)習(xí)的矩陣分解推薦模型,通過(guò)精心設(shè)計(jì)的深度神經(jīng)網(wǎng)絡(luò)架構(gòu),把用戶和物品映射成低維空間的用戶隱向量和物品隱向量,然后通過(guò)這兩個(gè)隱向量的內(nèi)積得到用戶對(duì)物品的評(píng)分預(yù)測(cè)。模型中的訓(xùn)練數(shù)據(jù)包含了顯式數(shù)據(jù)和隱式數(shù)據(jù),為此設(shè)計(jì)了一個(gè)損失函數(shù)能夠同時(shí)計(jì)算這兩類數(shù)據(jù)的損失。通過(guò)與其它模型的比較,從實(shí)驗(yàn)結(jié)果可以看到本文所提出的模型在推薦性能上有較大提升。
在接下來(lái)的工作中的,我們將繼續(xù)調(diào)整深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),以需求更好的特征提取。同時(shí)考慮使用卷積神經(jīng)網(wǎng)絡(luò)或循環(huán)神經(jīng)網(wǎng)絡(luò)對(duì)一些富信息進(jìn)行提取,然后融合到推薦算法中以獲得更好的推薦效果。