朱馨培
(哈爾濱陸軍預(yù)備役炮兵旅,哈爾濱150000)
在推薦系統(tǒng)的發(fā)展歷史中,用戶的喜好在很長(zhǎng)一段時(shí)間內(nèi)都被看是靜態(tài)不變的。由此對(duì)用戶做出的推薦在層次上都會(huì)缺乏多樣性,即便能夠用神經(jīng)網(wǎng)絡(luò)擬合更好的特征,也很難發(fā)現(xiàn)用戶的變化的潛在興趣。另一個(gè)更為合理的假設(shè)是用戶的興趣是由用戶的長(zhǎng)期靜態(tài)喜好和短期動(dòng)態(tài)興趣組成。用戶的長(zhǎng)期喜好受自身成長(zhǎng)因素、性格特征等因素的影響,這部分喜好可看作是靜止不變的。用戶的短期動(dòng)態(tài)興趣隨時(shí)間而動(dòng)態(tài)變化,受當(dāng)前環(huán)境和用戶好友等周邊因素影響較大。要對(duì)用戶的短期動(dòng)態(tài)喜好建模,需要將其與系統(tǒng)交互歷史中的時(shí)間作為特征考慮進(jìn)數(shù)據(jù)集中,這就是序列化推薦模型。本文提出了基于動(dòng)態(tài)記憶網(wǎng)絡(luò)的序列推薦模型,首先介紹序列推薦模型的范式,然后再對(duì)提出的模型結(jié)構(gòu)進(jìn)行詳細(xì)的介紹。
形式上,序列化推薦模型的任務(wù)是通過給定用戶的歷史行為序列對(duì)未來行為進(jìn)行預(yù)測(cè)的推薦模型。假設(shè)有一組用戶表示為用戶u的按時(shí)間順序排列的歷史行為(點(diǎn)擊或是購(gòu)買)序列表示為是用戶u購(gòu)買或點(diǎn)擊的第i個(gè)物品,然后模型在物品的全集I上預(yù)測(cè)物品的得分。用來表示用戶在所有物品上的得分,其中表示用戶在物品j上的預(yù)測(cè)分?jǐn)?shù)或喜好程度。最后,模型在y中選擇得分最高的k個(gè)物品作為推薦。
在序列推薦中,我們從兩個(gè)角度對(duì)用戶進(jìn)行表示,得到用戶的兩種表示方法。其中一種方法學(xué)習(xí)用戶的長(zhǎng)期靜態(tài)偏好,另一種方法提取用戶的短期動(dòng)態(tài)興趣。在實(shí)際場(chǎng)景中,可以認(rèn)為用戶的靜態(tài)偏好是緩慢變化或基本不變的,而用戶的短期動(dòng)態(tài)興趣則會(huì)根據(jù)所處情境或上下文而變化。因此,本文基于用戶的靜態(tài)偏好和動(dòng)態(tài)興趣生成用戶的全面表示,并提出基于門控機(jī)制和動(dòng)態(tài)記憶網(wǎng)絡(luò)的個(gè)性化序列推薦模型,模型的整體框架如圖1。
從圖1中可以看到,模型一共由4個(gè)獨(dú)立的部分組成,包括處理用戶輸入序列的輸入模塊、編碼用戶長(zhǎng)期靜態(tài)喜好的用戶模塊、生成和更新用戶記憶的記憶模塊以及最后的結(jié)果輸出模塊。輸入模塊從輸入的序列中檢索出用戶的動(dòng)態(tài)興趣,并保存每一時(shí)刻的狀態(tài)信息。用戶模塊負(fù)責(zé)學(xué)習(xí)用戶的靜態(tài)喜好,該模塊使用兩種不同的方式對(duì)用戶的靜態(tài)偏好進(jìn)行編碼。然后,記憶模塊在用戶靜態(tài)偏好的啟發(fā)下,選擇在存儲(chǔ)的記憶中更新哪部分的信息。記憶模塊的主要結(jié)構(gòu)類似于。本文與這兩篇論文不同在于,記憶模塊中嵌入門控結(jié)構(gòu),該結(jié)構(gòu)借鑒了高速網(wǎng)絡(luò)(Highway Network)中的工作。所以,本文采用了一種比RNN更能有效記憶過去事實(shí)信息的方式來捕捉用戶的動(dòng)態(tài)喜好,并且將其和所得到的用戶靜態(tài)表示相結(jié)合,通過計(jì)算在所有物品上的偏好程度來對(duì)用戶進(jìn)行推薦。
圖1 模型整體框架
其中。表示向量間逐個(gè)元素的相乘,tanh(x)是神經(jīng)網(wǎng)絡(luò)中的非線性激活函數(shù)。通過將當(dāng)前時(shí)刻的輸入xt和保存了前t-1時(shí)刻的隱向量ht-1分別乘以不同的權(quán)重矩陣,再利用激活函數(shù)來將結(jié)果壓縮到0-1之間得到更新門zt和重置門rt。將向量的值壓縮到0-1之間,該單元格便能夠充當(dāng)門的作用。更新門zt可幫助模型確定需要將多少過去信息(來自前一時(shí)間步驟)傳遞給未來,為1表示全部復(fù)制過去的信息,為0則表示將該信息全部阻隔。同樣地,在模型中使用重置門rt來決定忘記過去的信息量。候選狀態(tài)向量h?t利用重置門來得到當(dāng)前的候選記憶,該候選記憶存儲(chǔ)了過去的相關(guān)記憶。最后的狀態(tài)向量ht需要用來保存當(dāng)前時(shí)間戳的單元信息并將其傳遞到下游網(wǎng)絡(luò)。為了做到這點(diǎn)需要用到更新門zt。它確定候選記憶h?t和前一個(gè)時(shí)間步的隱狀態(tài)ht-1中有多少信息可以用于更新當(dāng)前時(shí)刻的記憶。使用更新門和重置門,能夠消除RNN中存在的梯度消失問題。因?yàn)槟P筒皇敲看味记宄螺斎?,而是保留相關(guān)信息并將其傳遞到網(wǎng)絡(luò)的下一個(gè)時(shí)間步驟。
除此之外,由于文獻(xiàn)[3]已經(jīng)驗(yàn)證了雙向的循環(huán)神經(jīng)網(wǎng)絡(luò)能夠同時(shí)有效地捕捉到過去和未來的消息,所以本模型采用雙向GRU,GRU層得到的最終的隱狀態(tài)表示為最后,我們將該模塊的輸出向量h填充進(jìn)記憶模塊(2.3)來獲取用戶的整體興趣表示。
用戶模塊的作用是捕捉用戶長(zhǎng)期的靜態(tài)喜好,常規(guī)的方法可以使用用戶id的one-hot編碼,再根據(jù)類似物品映射到低維向量的方式去表示用戶。但是,每個(gè)數(shù)據(jù)集下的用戶id只是系統(tǒng)隨機(jī)分配的一串獨(dú)特的字符,本身并沒有攜帶任何有關(guān)用戶喜好的信息。為了能夠更好地對(duì)用戶的長(zhǎng)期內(nèi)在興趣進(jìn)行充分的挖掘,提出了另一種基于注意力機(jī)制的方法。用戶在平臺(tái)中的所有行為是在其內(nèi)在興趣上的動(dòng)態(tài)性波動(dòng)的結(jié)果。要捕捉用戶的長(zhǎng)期靜態(tài)偏好,可以全局考慮所有用戶的交互記錄,使用注意力機(jī)制選擇重要行為,并使用這些選擇的行為表示用戶的靜態(tài)偏好。
為了驗(yàn)證本文提出的基于用戶級(jí)別的注意力機(jī)制在表示用戶長(zhǎng)期偏好問題上的有效性,本文將同時(shí)實(shí)現(xiàn)上一段落中提到的兩種用戶表示方法。第一種onehot編碼的表示與物品相類似,在此不再多做介紹。第二種方法是采用用戶交互過的所有物品的加權(quán)和來表示該用戶的內(nèi)在偏好:
其中權(quán)重因子α是用戶和隱狀態(tài)的函數(shù),αj=q(ui,hj)。表示的是輸入中第j個(gè)位置的物品和用戶u的對(duì)齊程度。同時(shí)這個(gè)權(quán)重值也決定了在編碼用戶的內(nèi)在偏好時(shí),哪些物品比較重要,哪些物品可以忽略。α可以用多種方式學(xué)習(xí)得到,本文采用的方式受啟發(fā)于文獻(xiàn)[4]。具體做法是將用戶向量ui和物品向量hj映射在同一個(gè)空間中,然后對(duì)兩個(gè)向量求點(diǎn)積,最后把縮放后的向量進(jìn)行歸一化便得到了用戶i的表示中輸入j位置的物品所占的權(quán)重:
其中,A1和A2是將兩個(gè)向饋映射到同一空間中的參數(shù)矩陣,<>符號(hào)表示向量的內(nèi)積。從公式可以看出,點(diǎn)乘的結(jié)果再經(jīng)過一次大小為dH的縮放才進(jìn)行Soft?max歸一化。該步主要是為了得到一個(gè)soft attention,以便于求導(dǎo)和損失梯度的向前傳遞。
然后,把用戶模塊的輸出作為記憶模塊的其中一個(gè)輸入,在記憶模塊的每一層中觸發(fā)記憶模塊的注意力機(jī)制和門控機(jī)制來更新保存的記憶。
記憶模塊的輸出,記作mu,是用戶u的全局表示,它集成了用戶的長(zhǎng)期內(nèi)在偏好和短期動(dòng)態(tài)興趣。輸出模塊根據(jù)得到的全局用戶表示向量和物品的表示向量,采取類似于矩陣分解中的技術(shù),將兩個(gè)向量的點(diǎn)積作為該用戶對(duì)物品的評(píng)分。最后,模型在所有物品評(píng)分上進(jìn)行Softmax歸一化,得到的0,1之間的值表示用戶對(duì)該物品的喜好程度。
一般來說,序列預(yù)測(cè)模型采用全連接網(wǎng)絡(luò)層計(jì)算用戶在所有物品上的偏好分?jǐn)?shù)。該計(jì)算方式下,這一步的待優(yōu)化的參數(shù)是,其中是向量維度是待計(jì)算的物品的總數(shù)。因此,我們必須要保留足夠人的空間來存儲(chǔ)這些參數(shù)。為了降低空間使用成本,本文采用的計(jì)算方式是文獻(xiàn)[5]中提出的雙線性解碼方案。該方案可以在保證不丟失精度的情況下有效地降低空間復(fù)雜度。具體地,用戶u在候選物品i上的偏好得分計(jì)算如下:
最后,本文選擇交叉熵?fù)p失函數(shù)作為模型的損失函數(shù)。
均方根平方誤差RMSE在該模型中并不適用,本文的目標(biāo)是預(yù)測(cè)下一個(gè)用戶可能會(huì)消費(fèi)的物品,類似于多分類問題。式(4)中,yui的值只有0和1,當(dāng)用戶u購(gòu)買過該物品時(shí)為1,否則為0。I+表示的是在訓(xùn)練集中真實(shí)的下一個(gè)觀測(cè)物品,相對(duì)的,I-則表示集合中的其他作為負(fù)例的物品?!ā悄P椭兴猩婕暗膮?shù)集合。在損失函數(shù)中加入L2正則,防止模型在訓(xùn)練過程中發(fā)生過擬合。訓(xùn)練過程中,最小化該目標(biāo)函數(shù),并且通過動(dòng)量?jī)?yōu)化的方式學(xué)習(xí)模型中的參數(shù)。
本文模型用到的信息是用戶的隱式交互序列,忽略了序列中用戶對(duì)每個(gè)物品的評(píng)分分?jǐn)?shù)。在不變動(dòng)模型其他部分的同時(shí),加入數(shù)據(jù)集中的評(píng)分信息進(jìn)行對(duì)比實(shí)驗(yàn)。
眾所周知,評(píng)分系統(tǒng)廣泛存在于各大電商、視頻網(wǎng)站等平臺(tái)。一個(gè)用戶對(duì)某個(gè)物品的評(píng)分信息顯式的表明了其對(duì)該物品的好惡。如果模型使用的是用戶的歷史評(píng)論記錄,在某種意義上是把序列中的每一個(gè)物品都當(dāng)成正例。
一般情況下,商品的評(píng)論數(shù)值為1-5或1-10的數(shù)值信息。想要使用該信息,必須首先把每個(gè)標(biāo)量的數(shù)字向量化,每一個(gè)數(shù)字轉(zhuǎn)化為一個(gè)向量。對(duì)于每個(gè)用戶u來說,其歷史行為序列中的每個(gè)物品也對(duì)應(yīng)了一個(gè)相應(yīng)的評(píng)論序列,記作與其對(duì)應(yīng)的物品向量為本文將使用疊加方式利用這兩個(gè)數(shù)據(jù)。每個(gè)時(shí)刻t輸入校塊對(duì)應(yīng)的輸入為:ft=vt+rt。
本文先從整體上介紹了序列推薦模型中各模塊的結(jié)構(gòu)和具體作用,最后在模型中加入評(píng)分這一輔助信息驗(yàn)證其對(duì)模型效果的作用。序列推薦由于使用的是動(dòng)態(tài)記憶網(wǎng)絡(luò),所以能夠記憶更多內(nèi)容,在長(zhǎng)序列上的表現(xiàn)也超過基于循環(huán)神經(jīng)網(wǎng)絡(luò)的模型。模型還在記憶網(wǎng)絡(luò)的基礎(chǔ)上嵌入了注意力機(jī)制和門控機(jī)制,使得模型在理論上能夠聚焦在有用信息上,從而做出更為個(gè)性化的推薦。