陳細(xì)玉,林 穗
(廣東工業(yè)大學(xué) 計算機(jī)學(xué)院,廣東 廣州 510006)
協(xié)同過濾(Collaborative Filtering,CF)[1],分為基于用戶的協(xié)同過濾(UBCF)、基于項目的協(xié)同過濾(IBCF)和基于模型的協(xié)同過濾?;谟脩舻膮f(xié)同過濾是根據(jù)用戶的歷史行為計算出用戶之間的相似度,將相似度高的用戶的歷史項目推薦給該用戶;基于項目的協(xié)同過濾是計算項目之間的相似度,推薦與該用戶歷史項目相似度高且歷史行為中沒有的項目?;谀P偷膮f(xié)同過濾如矩陣分解(Matrix Factorization,MF)[2]通過用戶和項目的低維特征向量預(yù)測評分進(jìn)行推薦;EBESU T[3]等人提出協(xié)同記憶網(wǎng)絡(luò),使用記憶網(wǎng)絡(luò)學(xué)習(xí)用戶-項目對的特定鄰居,用戶和項目記憶共同利用鄰居來產(chǎn)生排名分?jǐn)?shù)。這些模型通常對靜態(tài)的用戶和項目交互進(jìn)行建模,所表示的用戶偏好是靜態(tài)的。
但在現(xiàn)實生活中,用戶的歷史行為是動態(tài)的,人們的興趣是隨著時間變化的。早先的基于馬爾科夫鏈的序列推薦[4]將項目之間的轉(zhuǎn)移矩陣分解為兩個低秩矩陣,此序列推薦取得了良好的效果,然而k階馬爾科夫鏈只能根據(jù)有限的前k個行為預(yù)測下一個行為。近年來基于循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)的序列推薦能夠依賴更多用戶歷史行為。FU H等人[5]使用雙向長短期記憶網(wǎng)絡(luò)(Bi-LSTM)捕獲項目的序列特征,取得了更好的推薦效果。下一個項目的預(yù)測并不取決于用戶所有的歷史項目,只與部分有關(guān)聯(lián),且對當(dāng)前的預(yù)測影響是不一致的。LUO A等人[6]提出了自適應(yīng)注意感知門控循環(huán)單元(3AGRU),采用注意力機(jī)制來適應(yīng)用戶順序偏好的表示。LV F等人[7]提出了一種新的順序深度匹配(SDM)模型,使用門控融合模塊結(jié)合長期和短期偏好特征,來獲取用戶的動態(tài)偏好。LIN X等人[8]將K最近鄰算法(K-Nearest Neighbor,KNN)與RNN相結(jié)合,利用動態(tài)鄰居序列優(yōu)化用戶序列表示。
item2vec[9]是BARKAN O等人借鑒自然語言處理中的Word2vec詞向量表示方法,學(xué)習(xí)項目的向量表示并計算項目的相似度進(jìn)行推薦。
RNN存在長距離依賴問題,且項目之間的影響主要取決于相對位置而不是項目的屬性。LSTM增加遺忘門和更新門優(yōu)化了長距離依賴問題,但仍舊沒有徹底解決。注意力機(jī)制能從全局模式上既解決長距離依賴問題,又能解決序列中各項目的區(qū)分度差問題。實際生活中,短期偏好的用戶會向資深固定偏好的用戶靠攏,興趣變化也會向這些用戶的興趣發(fā)展。
由此提出融合注意力和記憶網(wǎng)絡(luò)的序列推薦算法,使用Word2vec學(xué)習(xí)并初始化用戶和項目的固定表示,自注意力機(jī)制結(jié)合LSTM解決長距離依賴和區(qū)分度問題,學(xué)習(xí)用戶的初級動態(tài)表示,并利用記憶網(wǎng)絡(luò)獲取動態(tài)鄰居學(xué)習(xí)用戶的終級動態(tài)表示,拼接固定表示和終級動態(tài)表示作為用戶最終表示并進(jìn)行推薦,提高用戶的推薦效果并體現(xiàn)出可解釋性。
MIKOLOV T等人[10]提出了兩種用于訓(xùn)練詞向量表示的模型,分別是Continuous Bag-of-Words和Continuous Skip-gram。前者是基于上下文來預(yù)測當(dāng)前單詞,后者是預(yù)測當(dāng)前單詞的一定范圍內(nèi)上下文單詞。后續(xù)此作者[11]使用分層softmax、負(fù)采樣和頻繁詞的子抽樣對Skip-gram模型進(jìn)行擴(kuò)展,提高了模型的訓(xùn)練速度和詞表示的準(zhǔn)確度,廣泛應(yīng)用于問答系統(tǒng)和文本摘要等領(lǐng)域。
注意力機(jī)制的提出借鑒于人類的特性,人們在觀察或思考時會注意特定的東西而忽略其他無關(guān)的。廣泛應(yīng)用在圖像處理、自然語言處理,而后也有應(yīng)用于推薦。VASWANI A等人[12]提出完全基于注意力機(jī)制的Transformer模型,在機(jī)器翻譯上取得了良好的效果。神經(jīng)網(wǎng)絡(luò)擁有黑盒特性,結(jié)合注意力機(jī)制能夠有效地提高其可解釋性。
記憶網(wǎng)絡(luò)[13]是Facebook成員WESTON J等人提出的一種新模型,主要針對RNN記憶太小不能完成需要長期記憶的任務(wù),能夠?qū)Υ罅康挠洃涍M(jìn)行讀取和更新,缺點是需要監(jiān)督。而后SUKHBAATAR S等人[14]在這基礎(chǔ)上進(jìn)行了改進(jìn),利用軟關(guān)注機(jī)制使其能夠端到端地訓(xùn)練,減少了訓(xùn)練時的監(jiān)督,是一種新穎的具有注意力機(jī)制的循環(huán)神經(jīng)網(wǎng)絡(luò)。
(1)
式中ei和ej是項目標(biāo)簽向量,hj是項目j的瀏覽用戶數(shù)目。使用以上方法學(xué)習(xí)到的向量作為用戶嵌入矩陣和項目嵌入矩陣的初始化。
首先使用自注意力機(jī)制和長短期記憶網(wǎng)絡(luò)學(xué)習(xí)用戶的初級動態(tài)表示。然后使用記憶網(wǎng)絡(luò)存儲所有用戶的固定表示,某一用戶的動態(tài)表示作為查詢,自適應(yīng)注意鄰居,學(xué)習(xí)用戶的終級動態(tài)表示。
X′u=Xu+PE(Xu)
(2)
式中位置嵌入矩陣PE的第po行第i列表示為:
PE(po,2i)=sin(po/10 0002i/em)
(3)
PE(po,2i+1)=cos(po/10 0002i/em)
(4)
式中,em為位置嵌入矩陣PE的維度。
(5)
其中注意力計算公式如下所示:
Attention(Q,K,V)=
(6)
式中WQ,bQ,WK,bK,WV,bV為全連接參數(shù)矩陣。
將新的序列輸入表示輸入到LSTM模型中,得到每個用戶的初級動態(tài)表示,公式如下:
(7)
使用單跳記憶網(wǎng)絡(luò),將所有用戶的固定表示存儲在記憶模塊中,每個用戶的初級動態(tài)表示作為查詢,獲取用戶的終級動態(tài)表示,將原記憶網(wǎng)絡(luò)中的點積注意力改為Transformer模型中的注意力,值得注意的是用戶的兩個嵌入矩陣依舊按照記憶網(wǎng)絡(luò)中設(shè)置為不同的,即K≠V。Q為用戶的初級動態(tài)表示。公式如下所示:
(8)
其中A,C為所有用戶的固定表示嵌入矩陣。
拼接用戶固定表示和用戶終級動態(tài)表示作為用戶最終表示:
(9)
對用戶推薦項目時,計算用戶u與項目i的得分:
zu,v=YuTDv+b
(10)
其中D為項目固定表示嵌入矩陣,推薦得分高的項目。
使用100 K的MovieLens數(shù)據(jù)集,用戶數(shù)943,項目數(shù)1 682,評論數(shù)100 000。
本次實驗將數(shù)據(jù)集中每個用戶的歷史項目按照時間從前往后排序,每個用戶的最后一個項目組成測試集,倒數(shù)第二個項目組成驗證集,剩下的項目按照一定長度切割成多個樣本組成訓(xùn)練集。
使用TensorFlow深度學(xué)習(xí)框架,python 3.5 編程語言。訓(xùn)練迭代次數(shù)為30;每個用戶輸入序列長度為5;批量大小為256;學(xué)習(xí)率為0.002,衰減速度為400,衰減系數(shù)為0.98,并限制最小值為0.000 05;嵌入矩陣A、B、C和LSTM單元輸出維度均為100,嵌入矩陣D維度為200;LSTM單元激活函數(shù)為tanh;梯度裁剪的二范式約束值為8;dropout層丟失率均為0.5;使用交叉熵?fù)p失函數(shù),Adam優(yōu)化器進(jìn)行訓(xùn)練,學(xué)習(xí)嵌入矩陣A、B、C、D、b,所有嵌入矩陣的初始化均使用skip-gram學(xué)習(xí)的向量。
實驗采用主流的序列推薦評價指標(biāo)命中率(Hit ratio,HR),平均倒數(shù)排名(mean reciprocal rank,MRR)和歸一化折損累計增益(normalized discounted cumulative gain,NDCG)。HR是一種常用的衡量召回率的指標(biāo),其定義如下式所示:
(11)
其中分子是每個用戶前K個推薦項目中屬于測試集合的個數(shù)的總和,分母是所有用戶的測試集合項目總數(shù)。
MRR是用于對搜索算法進(jìn)行評價的指標(biāo),現(xiàn)也用于評價推薦系統(tǒng)的效果,公式如下:
(12)
其中,rau是用戶u推薦列表中第一個屬于測試集的項目的排序位置,|U|是所有待評價的用戶個數(shù)。
NDCG是常用的信息檢索指標(biāo),基本思想是:返回列表中,與查詢文檔相關(guān)性越強(qiáng)的文檔排名越靠前。近來已經(jīng)被廣泛應(yīng)用于推薦系統(tǒng)的評價指標(biāo)。其定義如下:
(13)
DCG是折損累計增益,k是推薦項目的排序位置,rek是排序為k的推薦項目的相關(guān)性等級。在本文中,如果用戶u的第k個推薦項目屬于測試集合,則rek=1,否則rek=0。
(14)
其中IDCGu是最理想的推薦列表,即所有項目都按照用戶的喜愛程度排序的DCGu值,本文中使用用戶u的測試集項目排序計算此值。NDCG是所有待評估用戶NDCGu值的平均值。
為了驗證本文提出的融合注意力和記憶網(wǎng)絡(luò)的序列推薦算法(AM-LSTM),將選用3種算法來進(jìn)行對比實驗。
FPMC[4]:結(jié)合矩陣分解和馬爾科夫鏈,為每個用戶建立基于馬爾科夫鏈的項目-項目轉(zhuǎn)移概率矩陣,學(xué)習(xí)用戶-項目偏好和建模用戶順序行為,通過線性方式將它們組合起來,用于下一個籃子推薦。
Caser[15]:將用戶序列嵌入到時間和潛在空間的“圖像”中,并使用水平和垂直卷積濾波器學(xué)習(xí)點級、聯(lián)合級和跳躍行為的序列模式,捕獲用戶一般偏好和順序模式。
GRU4Rec[16]:利用RNN對基于會話的序列進(jìn)行建模,并使用基于排名的損失函數(shù)訓(xùn)練模型。
嵌入矩陣維度大小對HR@50的影響實驗結(jié)果如圖1所示,對MRR@50的影響實驗結(jié)果如圖2所示。隨著維度的增大,本文算法AM-LSTM的HR逐漸升高;FPMC和Caser的HR均隨著維度增大而升高,在維度為100時達(dá)到頂峰,而后顯著降低。AM-LSTM和Caser的MRR均在維度為75時達(dá)到峰值,而GRU4Rec跌到最低。模型的嵌入矩陣維度越大,更能表達(dá)用戶和項目之間的關(guān)系,模型更加擬合,推薦效果也更好。但當(dāng)矩陣維度增大到一定程度時,對訓(xùn)練集中用戶和項目的關(guān)系表達(dá)太過細(xì)致,使得模型過擬合,且訓(xùn)練時間更長,推薦效果變差。在此后的實驗中,將嵌入矩陣維度設(shè)為100。
圖1 嵌入矩陣維度大小對HR@50的影響
圖2 嵌入矩陣維度大小對MRR@50的影響
表1顯示了4種算法在嵌入矩陣維度為100,推薦項目個數(shù)為50時的HR、MRR、NDCG,4種算法的3種評價指標(biāo)高低趨勢是一致的,從指標(biāo)低到高的算法依次是GRU4Rec、FPMC、Caser、AM-LSTM。指標(biāo)越高說明效果越好。本文提出的算法AM-LSTM相比較GRU4Rec,在HR上提高了13.98%,在MRR上提高了21.38%,在NDCG上提高了17.02%。實驗結(jié)果表明,加入注意力機(jī)制和記憶網(wǎng)絡(luò)能顯著提高推薦的效果。
表1 4種算法的HR@50、MRR@50和NDCG@50比較
本文針對傳統(tǒng)推薦系統(tǒng)無法很好地表示用戶動態(tài)興趣的演變,基于循環(huán)神經(jīng)網(wǎng)絡(luò)的推薦算法存在長距離依賴性差、區(qū)分度差、可解釋性差的問題,提出融合注意力和記憶網(wǎng)絡(luò)的序列推薦算法,本文先介紹了傳統(tǒng)推薦算法和序列推薦算法,重點介紹基于循環(huán)神經(jīng)網(wǎng)絡(luò)序列推薦算法的現(xiàn)狀,然后介紹了Word2vec、注意力機(jī)制和記憶網(wǎng)絡(luò)。提出融合注意力和記憶網(wǎng)絡(luò)的序列推薦算法,使用Word2vec能更好地表示用戶和項目潛在特征,加快收斂速度;使用自注意力機(jī)制解決用戶序列的長距離依賴性差和區(qū)分度差問題;使用記憶網(wǎng)絡(luò)獲得用戶的動態(tài)鄰居,更準(zhǔn)確地表示用戶的動態(tài)興趣。最后實驗結(jié)果表明此算法提高了推薦的準(zhǔn)確度,同時也增強(qiáng)了可解釋性。
但是,本文的算法還有不足的地方,在使用item2vec學(xué)習(xí)項目向量表示時,少數(shù)項目不在訓(xùn)練集中,即冷啟動項目,直接從MovieLens數(shù)據(jù)集中獲取項目的標(biāo)簽,添加相同標(biāo)簽的項目來學(xué)習(xí)這些項目。對于沒有標(biāo)簽的項目,還需進(jìn)一步處理才能適用,可以從項目名稱和內(nèi)容描述中提取特征。現(xiàn)實生活中存在大量冷項目,以及RNN的輸入序列是在時間軸上位置相鄰,沒有考慮兩項目之間時間間隔的影響。今后將在這些方面展開研究。