王 駿 虞 歌
(杭州師范大學信息科學與工程學院 浙江 杭州 311121)
在推薦算法中,協同過濾算法是使用最廣泛的推薦算法,傳統協同過濾算法分為基于用戶的協同過濾算法和基于內容的協同過濾算法[1]。前者計算用戶相似度,后者計算物品相似度,主要推薦思想是“人以群分,物以類聚”。在深度學習方法興起后,融合神經網絡的矩陣分解法利用神經網絡強大的擬合隱含關系的能力,來進行預測物品評分。
谷歌在2016年推出Wide&Deep網絡[2],在特征嵌入層之上加入多層感知機(Multi-Layer Perceptron,MLP)使得模型泛化能力更強。2017年He等[3]進一步提出一種多層感知機與廣義矩陣分解結合的神經協同過濾模型(Neural Collaborative Filtering,NCF),既擁有矩陣分解的特征交互,又能通過多層感知機提取高階特征信息,使模型的推薦能力得到更大提升。從信息挖掘角度分析,該模型充分挖掘了隱含關系,可從大數據角度分析,從稀疏度高達90%的評分表訓練出命中率和歸一化折扣累積增益[4]都不錯的神經網絡模型,但在廣泛的適用性上仍然存在不足,想滿足個性化的需求,還需要利用更多有用信息。因此,多元化信息融合研究是推薦系統熱門研究方向[5]。
本文在研究了已有推薦模型的基礎上,結合Movie Lens數據集的信息類型采用不同的算法提取所有已知信息,提出并實現一種改進的神經協同過濾推薦模型,根據信息來源的有效性來配置推薦系統[6]。以MovieLens數據集作為研究對象,數據集包含性別、年齡、職業和電影名等信息。通過嵌入層全部嵌入所有信息,研究分析多元信息對神經網絡產生的作用,最后進行評分預測。從MovieLens-100k和MovieLens-1m數據集的實驗結果表明,通過所有信息全部嵌入的方式,本文模型不僅學習到更多信息,而且表現也比神經協同過濾模型更出色。
NCF模型中,輸入層上面是嵌入層,它是一個全連接層,將來自輸入層的稀疏表示映射為稠密向量[3]。NCF算法對用戶和項目建模(用戶ID和項目ID兩個輸入),需要通過GMF和MLP兩個路線,把它們各自的運算得到的信息連接起來。GMF使用了一個線性內核來模擬潛在的特征交互;MLP使用非線性內核從數據中學習高階特征交互信息[7]。
NCF模型結構如圖1所示。

圖1 NCF模型結構
本文提出了混合多元信息的神經協同過濾模型M-NCF。M-NCF模型在NCF模型基礎上使用更多嵌入層來嵌入不同的信息,其結構如圖2所示。

圖2 改進的M-NCF模型結構
輸入層上面是嵌入層,它是一個全連接層,用于將數據映射為特征向量。Movielens電影數據集中,對個性化推薦有影響的電影信息包含電影ID、電影類型(Category)、電影名(Title),用戶信息包含用戶ID、性別(Gender)、年齡(Age)、職業(Job),通過嵌入層全部嵌入成特征向量。其中,電影名使用文本卷積網絡處理,對電影名嵌入向量進行卷積和池化操作,拼接得到電影名特征向量,計算過程如下[8]:
假設句子單詞長度為n,每個句子可以表示為n個單詞組成形式:
x1:n=x1⊕x2⊕…⊕xn
(1)
假設卷積核w大小為h×k,其中h為文本卷積滑動窗口大小,k為嵌入維度,卷積核在句子x上卷積操作得到句子特征向量ci(i∈n):
ci=f(w·xi:i+h-1+b)
(2)
式中:b為偏置值;函數f(·)為非線性函數。
多個卷積核卷積后,生成的句子特征向量再接著進行最大池化操作,產生的多個新向量拼接成一個新的特征向量:
ci=[max(c1),max(c2),…,max(cn-h+1)]
(3)
最后通過全連接層輸出高階隱信息向量,這可以看作是提取出文本信息:
S=f(wn…(f(w1x+b1))+…+bn)
(4)
此外,年齡、性別、職業和電影類型映射成對應數字,電影ID和用戶ID經過評分時間排序后再進入嵌入層。
如圖2所示,MLP層將電影ID向量、用戶ID向量拼接成新的向量進入MLP層,經過多層感知機產生高階特征信息。
假設m和n分別表示訓練集用戶和電影的數量,數據集內的任一用戶u∈m和任一電影i∈n,嵌入維度為k,P∈Rm×k和Q∈Rn×k分別表示用戶特征矩陣和物品特征矩陣,MLP層高階特征信息表達式表示為:
(5)

在原來算法中,電影隱表示與用戶隱表示只是進行簡單特征交互獲得低階特征信息。改進算法中,電影隱表示是所有電影信息嵌入向量的拼接向量,用戶隱表示是所有用戶信息嵌入向量的拼接向量。廣義矩陣分解層向量交互過程表達式為:
Xu=[u,u′]
(6)
Xi=[i,i′]
(7)
pu=f(WuXu+bu)
(8)
qi=f(WiXi+bi)
(9)
φui=pu⊙qi
(10)
式中:u、i為任一用戶向量和電影向量;u′、i′為用戶信息向量和電影信息向量;Xu、Xi為用戶拼接向量和電影拼接向量;pu和qi分別表示用戶隱表示和電影隱表示,通過pu和qi的矩陣乘法得到評分信息φui。
傳統的推薦對用戶偏好進行全局預測,實際上默認用戶愛好是靜止不變的,但其實它們都是隨時間變化的,往往近期的行為對下一部電影有參考價值。循環神經網絡對時間序列信息循環計算可以挖掘上下文關系,常被使用在自然語言處理中,通過構造用戶狀態和電影狀態進行自回歸計算,把循環神經網絡引入到推薦系統對行為分析的應用中。本文使用的循環神經網絡是GRU模型[9]。
用戶評分預測表示如圖3[10]所示,圖中uut、mit是不同時間的用戶RNN狀態和電影RNN狀態。

圖3 根據時序狀態預測電影評分
t時刻用戶狀態和電影評分預測下一時刻用戶潛在狀態、t時刻電影狀態和電影評分預測下一時刻電影狀態表達式分別表示為:
uu,t+1=g(uut,{rui|t})
(11)
mi,t+1=h(mit,{rui|t})
(12)
基于用戶評分行為預測評分問題表示為:
rui=f(uut,mit)
(13)
式中:輸出rui表示用戶u在時刻t對電影i的評分;uut、mit是t時刻的用戶狀態和電影狀態。
來自MLP層、GMF層和RNN層的輸出在輸出層按合適的比例拼接成新的向量,然后通過全連接層輸出預測值,計算式表示為:
(14)
式中:hT是比例,MLP層、GMF層和RNN層的輸出按照合適比例組合成混合信息向量;W、b是全連接層權重和偏置值。
本文采用的代價函數為逐點損失類型的函數,在模型優化時,為了防止訓練出現過擬合現象,同時提高模型的泛化能力,使用L2正則化項,損失函數計算式為:
(15)

MovieLens-100k數據集里面包括u.data、u.info、u.item、u.genre、u.user、u.occupation等文件,其中u.data文件包含943個用戶對于1 682部電影的100 000個評分(分值為[1,5]之間的整數);每個用戶至少評分20部電影;u.user文件包含用戶的人口統計信息(年齡,性別,職業,郵編);u.item文件包括電影名,電影ID,發布日期,IMDB電影網對應電影主頁網址,所屬的電影類型(恐怖、犯罪、喜劇等)。
MovieLens-1m數據集含有來自6 040名用戶對3 706部電影的100萬條評分數據,分為三個表:評分表、用戶信息表和電影信息表。
使用聯想筆記本電腦,內存為8 GB,CPU為Intel酷睿i53230M;操作系統是Windows 10,使用PyCharm開發工具,使用Python版本是3.6,Tensorflow版本為1.10.0。
本文在MovieLens-100k和MovieLens-1m數據集上研究新算法的推薦能力,將數據集中80%的數據劃為訓練集,20%數據劃為測試集。訓練50個輪次(epoch),每次訓練數據量(batch size)為256,嵌入維度為32,優化器使用Adam[11]優化器。
嵌入層將用戶ID、電影ID和21個職業類型映射為對應的數字向量,18種電影類型映射為18位二進制列表,屬于某類型則置1,否則置0;用戶年齡劃為7個年齡區間,分別映射為7個數字;性別映射為0或者1;電影名首先轉成等長數字列表,長度是15,然后文本卷積滑動窗口在等長數字列表上進行卷積操作,分別滑動2、3、4、5個單詞,卷積核數量為8,嵌入維度為32,最后經過一次最大池化操作得到一個長向量。
多層感知機層各層神經元數量為[8,16,32,64],激活函數是ReLU函數,每層參數初始化為均值為0、標準差為0.01的隨機正態分布,增加L2正則項來減小模型過擬合的風險,各層神經元后還要接一層丟棄層[12],丟棄率為0.2。
循環神經網絡層隱層神經元數量是128,經過循環神經網絡處理后,用戶向量和電影向量還要經過64個神經元的全連接層映射為新的向量。輸出層的全連接神經網絡增加L2正則項來減小模型過擬合的風險。
均方差誤差MSE是常見的推薦系統評價指標[13],本文使用MSE對實驗評分預測做評價,MSE越小,表示模型越好。MSE的計算式為:
(16)
更多隱藏層數能夠加強神經網絡提取信息能力,在合適范圍內增加層數提升模型性能,但是超出范圍會導致過擬合,導致神經網絡學習能力降低;不同的用戶信息或電影信息對推薦結果影響不同,對電影推薦毫不相關的信息甚至會對神經網絡更新起到噪音作用。
本文在MLP層選用[16,32,64,128]的各層神經元數量與GMF層用戶信息和電影信息一一搭配探索影響因素,如表1和表2所示,表3考察循環神經網絡(RNN)與各層神經元影響,其中:MLP- 0為不啟用MLP層目的是設置空白對照,只啟用GMF層。所用數據集同為MovieLens-100k,訓練50輪,取穩定在某范圍內震蕩的MSE平均值作評價指標,實驗數據有±0.05的誤差。

表1 不同用戶信息與各層神經元

表2 不同電影信息與各層神經元

表3 RNN與各層神經元
可以看出,多層感知機對各因素影響并不相同,有些隨著網絡層數增加反而MSE在下降,在沒有MLP層的情況下,多數情況算法表現都不理想,說明多層感知機能夠學習到有用信息,在噪聲比較多的情況下擬合真實情況;電影信息中的電影類型和用戶信息中的性別對推薦影響最大,職業、年齡和電影名對推薦結果影響較小;循環神經網絡在[8,16,32]和[8,16,32,64]的多層感知機結構中表現出色,而且總體表現比利用電影信息和用戶信息的算法好,可能有些電影信息和用戶信息與個性化推薦無關成了噪聲,進而影響了算法準確率。
圖4-圖7為訓練50輪,學習率為0.000 01,NCF和M-NCF在數據集MovieLens-100k和MovieLens-1m的MSE表現。

圖4 NCF在MovieLens-100k數據集的表現

圖5 M-NCF在MovieLens-100k數據集的表現

圖6 NCF在MovieLens-1m數據集的表現

圖7 M-NCF在MovieLens-1m數據集的表現
可以看出,經多次實驗驗證,M-NCF的均方誤差都穩定地比NCF小,可以認為,接收更多輔助信息并沒有給神經網絡帶來太多噪聲。M-NCF能根據信息擬合出接近實際的數據。
為了驗證新算法的泛化能力、穩定性和準確性,以及各個結構對M-NCF的推薦影響作用。本文設置多個實驗組在MovieLens-100k和MovieLens-1m數據集進行對比實驗。
選取了原算法神經協同過濾算法(NCF)、電影數據集信息全嵌入算法(M-NCF)、在廣義矩陣分解(GMF)層只嵌入電影信息的NCF算法(NCF-I)、在廣義矩陣分解(GMF)層只嵌入用戶信息的NCF算法(NCF-U)、結合循環神經網絡的NCF算法(NCF-RNN)進行對比。
各算法主要的參數設置和神經網絡結構基本相同,訓練50輪,學習率0.000 01,取不同算法在MovieLens-100k(ML100k)和MovieLens-1m(ML1m)數據集中算法訓練收斂后穩定在某范圍內震蕩的平均值作評價指標,實驗數據有±0.05的實驗誤差,如表4所示。

表4 不同模型的MSE比較
可以看出,在MovieLens-100k和MovieLens-1m數據集各算法表現都比NCF好,說明增加了輔助信息的預測比只分析單一評分信息的預測更準確;多次實驗表明,M-NCF算法比NCF算法的均方誤差小;電影信息比用戶個人信息對個性化推薦影響稍微重要一點;NCF-RNN算法基于用戶行為作出的預測在MovieLens-100k表現比M-NCF還要好。綜上,M-NCF比實驗對比組其他算法性能更好,信息更多元化。
本文提出基于神經協同過濾算法改進的M-NCF算法,相比原來的算法簡單地挖掘評分表的評分信息,結合低階特征交互信息和高階特征信息,改進算法融合了多元電影數據集信息,結合了循環神經網絡預測用戶行為的優點,對于端到端的推薦技術也有參考價值。從信息多元化來說,拓寬了推薦算法挖掘信息的廣度,從準確度來看,表現也比原來的神經協同過濾算法好,而且不再是簡單的神經網絡堆砌。通過對比實驗可見循環神經網絡和多元化信息的確增加了神經協同過濾算法的學習能力。
對于循環神經網絡學習用戶行為問題,應該還有更優化的解決方法。因為在同一時間段的電影觀看行為往往是最有參考價值的,所以時間分段是用戶行為學習更好的提升方法。
今后的研究會關注深度學習在多元信息融合方向的更多應用,比如注意力機制[14]在用戶興趣偏好上的應用、融合圖卷積與神經協同過濾[15]的推薦算法等。