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