沈冬東,汪海濤,姜 瑛,陳 星
(昆明理工大學信息工程與自動化學院,云南 昆明 650500)
現有推薦系統的熱門研究方向大致可分為2類:傳統推薦算法[1]和序列推薦算法[2]。傳統的推薦算法主要建模的是用戶長期穩定的偏好,隨著時間的變化發生著緩慢的變化。其中基于矩陣分解技術的推薦方法是該領域最著名的技術[3]。但是,用戶的行為意圖可能受各種因素的影響,例如,興趣演變、即時需求等。最近,由于序列推薦算法在建模項目與項目之間的順序關系方面的優勢而備受關注,并且這種優勢滿足了探索用戶短期偏好的需求。主要歸功于循環神經網絡RNN(Recurrent Neural Network)在其他領域的成功應用,特別是在自然語言處理NLP(Natural Language Proces- sing)領域[4],基于RNN的方法已經成為序列推薦算法的主流模型[5]。
標準RNN假設連續項目之間是分布均勻的。例如,在NLP應用程序中,句子中任意2個詞語之間的間隔可視為是相等的,并且句子中的詞語都經過組織以表達同一種語義。但是,在推薦系統領域,用戶交互序列要復雜得多。例如,用戶連續操作之間的時間間隔可能有所不同,憑直覺,時間間隔近的操作傾向于共享更緊密的聯系。用戶連續操作之間的意圖也多種多樣,并不共享同一目的。這也導致RNN難以充分地建模用戶的時間信息和上下文信息。
相反地,卷積神經網絡CNN(Convolutional Neural Network)在NLP[6]以及計算機視覺CV(Computer Vision)中學習上下文信息時表現出強大的優勢。因此,研究CNN與RNN的結合將會對用戶偏好建模產生有益的影響。但是,用戶偏好建模方法可能會受到如下假設的影響,用戶不同時期的興趣點對當前用戶偏好的預測具有同等貢獻。這并不符合現實世界中的實際情況,因為用戶偏好隨著時間推移發生著變化,不同時期的興趣點對當前偏好的影響大不相同。由于自注意力機制在NLP領域的成功應用[7],本文采用深度學習的最新進展自注意力機制來學習不同興趣點對最終偏好的不同重要性。
在上述2類熱門研究中,項目相似性的計算往往占有重要的地位,現有的序列推薦算法常采用基于項目嵌入的方法item2vec[8]來獲取項目之間的相似性。這類方法只關注用戶的交互序列來獲取相似性,而忽略了項目屬性、內容之間的聯系。例如,在電影推薦中,同一導演、同一主演等信息可能成為用戶選擇影片的重要決定因素。因此,使用item2vec生成的項目向量缺乏對項目內容信息的考慮,而且在項目向量生成過程中往往會受到數據高度稀疏的影響。為了降低這些影響,研究人員通常轉向功能豐富的場景,在這些場景中,用戶和項目的屬性信息用于補償數據稀疏性并提高推薦的效果[9]。最近的一些研究[10]比僅使用屬性更進了一步,其指出屬性不是孤立的而是相互關聯的,形成一個知識圖譜KG(Knowledge Graph)。通常,KG是有向異構圖,其中節點對應于實體(項目或項目屬性),而邊對應于關系。與不使用KG的方法相比,將KG納入推薦可以通過3種方式使結果受益[11]:(1)KG中項目之間的豐富語義關聯可以幫助探索其潛在的聯系并提高結果的準確性;(2)KG中各種關系有助于合理地擴大用戶的興趣并增加推薦項目的多樣性;(3)KG連接了用戶的歷史喜好和推薦的商品,從而為推薦系統帶來了可解釋性。知識圖譜的提出正好為推薦系統注入新的活力,知識圖譜將海量多源數據整合形成一種結構化的知識圖。通過對知識圖譜中的知識抽取,得到更加詳盡的項目特征信息,從而使得項目相似性的計算更加精確,進而生成推薦。
基于上述觀察,本文提出一種基于知識圖譜嵌入與多神經網絡的序列推薦算法,命名為KG-AttCRNN,以實現更好的用戶偏好建模,解決用戶序列中的時間間隔不一致性以及動態意圖不一致性。首先,基于知識圖譜提出一個更有效的項目嵌入方法。然后,根據用戶的歷史交互順序將用戶的序列劃分為不同的時期,使用CNN學習用戶序列的上下文信息,生成用戶的興趣點向量。最后,使用長短時記憶LSTM(Long Short-Term Memory)神經網絡和自注意力機制動態地融合用戶的興趣點,生成用戶偏好,進而生成推薦。
隨著知識圖譜的研究引入推薦,推薦系統的準確性和可解釋性得到了很好的提升。基于知識圖譜的推薦方法大致分為基于本體的推薦[12]、基于開放鏈接數據的推薦[13]和基于圖嵌入的推薦。其中基于圖嵌入的技術在推薦系統研究中扮演著重要的角色,DeepWalk[14]較早將圖嵌入技術應用到推薦系統,其將用戶與項目嵌入到同一向量空間,計算用戶與項目的相似度從而生成推薦。DeepWalk的隨機游走存在許多的變體,例如node2vec[15]通過改變隨機游走的方式來更深層次學習項目之間的相似性。
具體到序列推薦算法,序列推薦的早期工作幾乎都是基于序列模式挖掘[16]和過渡建模[17]的,隨著深度神經網絡引入序列推薦,序列推薦算法得到了快速發展。Hidasi等人[18]首先應用遞歸神經網絡建立基于會話的推薦,顯著優于基于項目的方法。Quadrana等人[19]重點關注一些基于會話的推薦場景,并開發了具有跨會話信息傳輸的分層循環神經網絡。Donkers等人[2]通過表示各個用戶來擴展RNN,以便生成個性化的下一個項目推薦。Tang等人[20]提出一種卷積序列建模方法,用水平和垂直卷積層來學習用戶的歷史序列。
盡管這些模型已經考慮了用戶的序列信息,但是用戶的順序行為和歷史偏好的動態一致性仍然未被很好地開發。相比之下,本文通過整合用戶的不同時期的興趣偏好進行項目推薦,充分考慮了用戶興趣偏好的演變。
本文提出的序列推薦算法,主要由項目嵌入和用戶偏好學習2部分組成,算法的整體流程圖如圖1所示。

Figure 1 Overall flow chart of the proposed algorithm 圖1 本文算法整體流程圖

在算法第1階段,項目嵌入旨在從項目的大量順序行為中學習項目的相似性來為每一個項目生成統一表示。序列推薦的先前工作是使用one-hot編碼或在深度學習框架中添加額外的嵌入層表示項目[2]。然而,對于大型推薦系統中的一系列物品,一方面,one-hot編碼可能需要花費無法承受的時間,并且由于高度稀疏性導致無法很好地優化[21]。另一方面,添加額外的嵌入層可能會使網絡在某種程度上失去一定的性能。更重要的是,這2種方法都不能揭示用戶交互序列中隱含的項目順序相似性。在這種情況下,有必要找到一種有效的表示方法,以直接從用戶的交互序列中學習高質量的項目向量,結果揭示相似的項目往往彼此接近。近年來,神經嵌入技術在許多領域取得了巨大的成功,如自然語言處理、社交網絡和推薦。在這些工作中,item2vec[8]是Skip-gram與負抽樣的重要擴展之一,用于為基于項目的協同過濾推薦產生項目嵌入。
item2vec項目嵌入方法僅考慮到用戶的交互序列來學習項目之間的順序相似性。計算項目相似性不僅應考慮項目的順序相似性,還需要考慮到項目之間的內容屬性信息。本文提出一種結合知識圖譜結構信息的改進item2vec來捕獲項目的相似性,同時將項目的交互信息與項目本身的信息結合起來嵌入到低維空間中,所得向量能很好地揭示項目之間的相似性。
3.2.1 知識圖譜抽取序列
本文首先構建知識圖譜,然后使用node2vec[15]算法思想構建隨機游走序列。以電影特征為例,其中的實體包括影片、導演、演員類型等,基于電影信息構建的知識圖譜如圖2所示。

Figure 2 Movie knowledge graph圖2 電影知識圖譜
本文使用node2vec中的隨機游走方式獲取隨機游走路徑,然后從其中提取出電影實體序列。node2vec的廣度遍歷和深度遍歷能很好地抽取實體間的同質性和同構性。隨機游走的概率為:
(1)
其中,πvx是未歸一化概率,Z表示其中的歸一化常數。ci表示隨機游走中的第i個節點,v和x表示知識圖譜中的節點,E表示知識圖譜。對于常見的隨機游走,πvx和實體邊權重之間的關系為:πvx=αpq(t,x)·wvx,wvx為節點v和節點x之間的權重。系數αpq(t,x)計算方式如下所示:
(2)
其中,t表示上一個節點,x表示隨機游走中下一個可能的節點,通過p和q的值來控制深度和廣度游走,dtx表示節點t和x之間的最短距離。本文使用node2vec的深度游走策略獲取得項目序列作為下一步item2vec的輸入,更好地捕獲項目之間的相似性。通過知識圖譜的序列抽取得到序列集合Hk={I1,I2,…,Im},其中Ii={x1,x2,…,xn}表示生成的一條隨機游走序列。
3.2.2 項目嵌入
將從知識圖譜抽取的序列與現有的用戶交互序列相結合,作為item2vec的輸入,最終得到項目的嵌入向量。知識圖譜序列能夠彌補采用項目序列嵌入較少考慮項目內容信息等缺點。
神經項目嵌入模型類比于詞向量模型,用戶交互的項目隨著時間自然地形成順序序列,知識圖譜得到項目序列,將兩者結合類比于自然語句。同一主演、同一導演和擁有相同上下文信息的項目在嵌入空間上中離得很近。具體來說,給定用戶交互序列集合H={S1,S2,…,SN}以及知識圖譜得到的序列集合Hk={I1,I2,…,IN},item2vec技術的Skip-gram模型旨在最大化以下目標:
(3)
其中,N是序列Si和Ii的長度,xi表示序列中的項目,p(xj|xi)定義為softmax函數:
(4)

(5)
其中,σ(x)為sigmoid函數,S表示本文為每個正樣本繪制的負樣本數量,方便優化模型。經過上面的一系列變形,目標函數由式(3)變為式(5):
arg maxtarget=
(6)
最后,通過傳統的梯度下降法訓練item2vec,并獲得所有項目的高質量分布式向量表示。
在歷史交互序列和知識圖譜抽取序列的幫助下,使用item2vec可以捕獲項目的相似性,并生成統一的項目表示空間,其中嵌入產生的向量可以解釋項目的相似性和順序關系。對于每個用戶u,可以生成具有嵌入項的交互序列,如下所示:
Ru={v1,v2,…,vn}
(7)
其中,vj表示項目xj的d維潛在向量。
在獲得項目的嵌入向量后,本文通過所提出的序列建模框架建模用戶的個性化偏好。通過CNN學習用戶興趣點的方法能解決LSTM在建模用戶序列時忽略時間間隔不規則性和用戶意圖不同性的問題。時間間隔近的用戶序列往往共享著相同的興趣點,CNN在NLP和 CV中已被證明建模上下文的能力很強,而且已有研究證明了CNN在建模序列上下文方面優于傳統的RNN[22]。因此,本文將CNN作用于用戶的興趣點,充分考慮用戶的上下文信息來學習用戶的興趣點。
3.3.1 興趣點學習
興趣的學習首先需要根據用戶交互序列時間戳的信息劃分用戶的交互序列,然后使用CNN學習用戶的興趣點。本文將用戶的序列分為長中短3個時期,動態地學習用戶的偏好,卷積偏好建模的模型如圖3所示。

Figure 3 Framework of interest points learning 圖3 興趣點學習框架圖
本文使用一維卷積神經網絡學習用戶的興趣點,學習不同時間段的興趣點。CNN有良好的兼顧上下文信息的能力,能夠更好地建模用戶在一個時間段的興趣點,挖掘用戶的興趣偏好。傳統的CNN要獲取充分的上下文信息,需要一個非常深的網絡或者非常大的過濾器。本文將膨脹卷積應用到興趣點偏好學習中,對于一維序列輸入X∈RN和濾波器f:{0,…,k-1}∈R,其中,N為輸入的維度,對該序列的元素的卷積運算F定義為:
(8)
其中,d表示項目向量維度,k是卷積核大小,s-d·i表示卷積操作過去的方向。f表示卷積操作中的濾波器,s表示序列中的元素。圖3a中v0表示項目向量,PT+1表示第T+1次輸出結果,b表示膨脹卷積的膨脹因子。因此,膨脹卷積在每2個相鄰的濾波器之間引入一個固定的階躍。當b=1時,膨脹卷積變為規則卷積。使用大的膨脹因子可以使頂層的輸出代表更大范圍的輸入,從而有效地擴展了CNN的接收范圍。本文的殘差塊包含一個分支,該分支通過F的一系列變形,其輸出被添加到塊的輸入中:
o=Activation(X+F(X))
(9)
通過CNN的學習,得出用戶u的興趣點序列Pu={P1,P2,…,Pj}。
3.3.2 偏好學習
用戶的偏好由用戶的興趣點組成,通常使用累加或者全連接層的方法來實現,這2種方法都缺乏對用戶偏好的動態融合。本文設計了一種自適應的信息融合方式,決定哪個興趣點更重要時,取決于特定的上下文信息。因此,以動態方式進行信息融合是有益的,用戶的興趣點隨著用戶交互形成興趣點序列,其中包含相應的時間信息和上下文信息。本文提出基于注意力與雙向長短時記憶BiLSTM(Bidirectional Long Short-Term Memory)神經網絡學習用戶的偏好,算法的框架如圖4所示。

Figure 4 Dynamic fusion of interest points圖4 興趣點動態融合圖
如圖4所示,興趣點的動態融合由2部分組成:BiLSTM和注意力機制。其中BiLSTM通過充分利用序列的前向和后向上下文信息更好地學習用戶偏好。對興趣點進行融合時,每個交互的隱藏狀態由先前狀態hj-1和當前興趣點向量Pj所更新。更具體地說,對于第j個興趣點,LSTM的學習過程如下所示:
(10)
(11)
(12)
(13)
hj=ojtanh(cj)
(14)

(15)

(16)
上述模型認為所有的興趣點對最終偏好預測有著相同的影響程度,更聰明的推薦系統應該能區分不同的興趣點對當前偏好預測的重要性,對所有興趣點分配相同的權重是不合理的。需要找到合適的方式為興趣點賦予不同的權重,即:
(17)
受近期成功使用注意力機制的啟發[7],本文使用自注意力機制實現動態權重的分配。自注意力機制的權重計算公式如下所示:
a=softmax(w1tanh (w2H))
(18)

將連續項目嵌入作為網絡的輸入,輸出為下一個項目的預測。在全局學習階段,本文使用均方誤差MSE(Mean Square Error)作為損失函數,其定義為:
(19)
其中,ζ()是MSE函數,vt是目標用戶u在下次訪問時訪問的項目表示,Su表示相互作用序列,Su∈M,其中,M為用戶序列集合,|M|表示序列的數量。本文使用Adagrad優化損失函數[23],設置的更多細節將在實驗中指定。
這個塑膠廠的結構和剛才那個染料廠大同小異,大帥道:我來。說完從地上撿起石頭,左小龍忙握住他的胳膊,說,等等。
算法基于知識圖譜嵌入與多神經網絡的序列推薦算法
輸入:數據集S、本體庫。
輸出:Top-N推薦列表。
步驟1將數據集S和本體庫一起構建知識圖譜得到知識圖K;
步驟2通過node2vec改進的隨機游走,從知識圖譜K中獲得隨機游走序列集合Hk={I1,I2,…,In}。
步驟3將獲得的隨機游走序列集合Hk={I1,I2,…,In}和數據集S中用戶交互序列集合H={S1,S2,…,Sn}一起使用item2vec訓練獲得項目Ru={v1,v2,…,vn}。
步驟4按照時序信息將用戶序列劃分為不同時期,通過膨脹一維CNN學習用戶興趣點向量,生成不同時期的興趣點向量集合Pu={P1,P2,…,Pj}。


本節從以下幾個方面證明所提出模型的有效性:(1)總體推薦性能的比較;(2)知識圖譜和自注意力機制對算法的影響;(3)嵌入維度對算法性能的分析以及算法冷啟動的性能分析;(4)算法的優缺點分析。
本文采用真實世界中的數據集MovieLens10M進行實驗。MovieLens10M數據集是來自真實世界中的電影用戶評分數據集,包含71 567個用戶對10 681部電影的10 000 054個評分信息。其中最短的用戶交互序列為20,平均交互序列長度為115,評分信息為1~5。
本文使用Microsoft Satori為數據集構建知識圖譜庫。首先從整個KG中選擇三元組子集,其關系名稱包含電影,置信度大于0.9。給定子KG,通過將所有有效電影/書籍的名稱與三元組(head,film.film.name,tail)或(head,book.book.title,tail)的尾部匹配來收集電影的ID。為簡單起見,排除未匹配或有多個匹配實體的項目。然后,將電影ID與所有KG三元組的頭部和尾部進行匹配,從子KG中選擇所有匹配良好的三元組,并迭代地將實體集擴展到4個跳躍點。以此構建本文的電影知識圖譜。
為了確保實驗結果的可靠性,本文對數據集做如下處理:首先過濾掉與用戶交互次數小于5的項目;對數據集隨機劃分,90%作為訓練集,10%作為測試集。
本文將提出的算法與傳統的方法以及基于RNN模型的方法作對比。基線方法描述如下:
(1)Item-KNN:為用戶推薦與交互歷史項目相似的Top-k個項目。
(2)Exp.Dec.Item-based k-NN[24]:在Item-KNN基礎上加入了指數衰減分量,用來懲罰很久前交互的項目。
(3)Matrix Factorization (MF):是一種廣泛使用的矩陣分解方法,它通過隨機梯度下降優化成對排序目標函數。
(4)Seq.Matrix Factorization[25]:在MF的基礎上加入用戶交互序列信息,擴展為序列MF方法。
(5)GRU[2]:使用了標準的GRU(Gate Recurrent Unit)將用戶交互的項目和其對應的動作一起嵌入學習用戶的交互模式,最后輸出用戶下一個可能的交互項目。
(6)Caser[20]:通過卷積神經網絡模擬用戶的歷史交互,并通過最小化交叉熵來優化整個網絡。
本節討論在算法的設計與實驗中,關鍵參數的設置。本文算法主要分為2個主要部分:項目嵌入和偏好學習。在項目嵌入過程中,獲取知識圖譜的隨機游走次數,隨機游走獲得的序列長度與數據集中的平均長度保持一致。item2vec訓練過程中,上下窗口大小window-d=4,嵌入維度d=300。在偏好學習過程中,模型的dropout率為0.1。
由于推薦系統每次都只能推薦較少的項目,相關項目應該在推薦列表中排名第1。因此,本文使用以下2個評估指標評估個性化的下一項推薦質量:
(1)Recall@20:主要評估指標召回率,是所有測試案例中前20個推薦項目中具有所需項目的比例。其中,Recall@20不區分具有不同排名的項目,只要它們屬于推薦列表即可。
(2)MRR@20:平均倒數排名MRR(Mean Reciprocal Rank),其是期望項目倒數排名的平均值。與Recall度量相同,本文將20設置為貢獻值,這意味著如果排名高于20,則將倒數等級設置為零。考慮到推薦的順序,MRR會考慮每個推薦項目的排名。
這2個評估指標越高,表示結果的表現越好。
4.5.1 整體性能分析
本節首先對推薦算法的整體推薦性能做分析,然后逐步分析本文算法的有效性。本文算法與基線方法的性能比較如表1所示。

Table 1 Overall performance analysis 表1 整體性能分析
為了證明本文算法的有效性,將KG-AttCNN與傳統方法以及在同類型先進的下一項方法進行比較。表1所示為真實數據集MovieLens上本文算法與多種方法的結果。從表1實驗結果可知,加入了時間因素和序列因素的推薦算法相比傳統算法性能有所提升,Seq.Matrix Factorization與MF以及Exp.Dec.Item-based k-NN與Item-KNN的實驗結果證明了考慮興趣的衰減和動態變化的有效性。從整體來看,本文的KG-AttCRNN在推薦系統評價指標MRR以及Recall上明顯優于其他所有方法的。結果表明,KG-AttCRNN擅長處理來自用戶交互的個性化順序信息。相比較傳統的推薦算法,基于RNN和基于CNN的序列推薦有了顯著的改進,這得益于知識圖譜與卷積神經網絡的有效設計。本文的KG-AttCRNN能區別性地融合用戶歷史偏好以及用戶交互的時間間隔不一致性,從而產生高質量的個性化推薦。
4.5.2 知識圖譜與注意力機制的影響
為了進一步驗證本文算法的有效性,本節對算法中的每一部分進行實驗分析,本文主要考慮的2個部分為知識圖譜與自注意力機制。本文將不加入知識圖譜嵌入,僅采用用戶交互序列生成項目嵌入的序列推薦算法命名為AttCRNN;在興趣偏好融合方法中未加入自注意力機制的序列推薦算法命名為KG-CRNN。與本文所提出的KG- AttCRNN做對比,實驗結果如表2所示。

Table 2 Influence of KG and attention mechanism on algorithm performance 表2 KG和注意力機制對算法性能的影響
從表2實驗結果可以得出,知識圖譜與自注意力機制的加入能提高推薦算法的準確性。AttCRNN僅僅考慮了交互序列中項目的ID信息,并沒有充分考慮項目自身的內容和屬性信息,而知識圖譜可以加入結構化信息,使得AttCRNN在項目表示時加入項目的內容信息和屬性信息,能夠更準確地描述項目,其推薦的準確性也得到了提高。其中,注意力機制的影響更大,在缺少注意力機制的情況下,用戶的偏好僅采用隱藏狀態向量的均值表示,注意力機制的加入能使算法對用戶偏好進行個性化的優化。從實驗結果中也能看出,使用CNN與RNN模型的融合能帶來準確性的提升。
4.5.3 嵌入維度及算法冷啟動分析
本節將對算法中的嵌入維度及算法冷啟動進行分析,在其他參數不變的情況下,將嵌入維度設置成不同的值來探索其對推薦算法的影響,實驗結果如表3所示。

Table 3 Impact of embedded dimensions on performance表3 嵌入維度對性能的影響
從表3中可以觀察到,隨著維度的升高,算法性能得到提升,但是嵌入達到一定的限度后主要的評價的指標Recall@20反而有所降低,而且2個評價指標表現出不同的變化趨勢,最佳嵌入維度也不相同。嵌入維度過大可能導致數據的稀疏性,訓練難度加大,進一步可能會導致過擬合發生。由于該算法的主要評價指標為召回率,所以本文算法設置嵌入維度為300與其他方法作對比。
本文將測試數據從用戶的第2次交互開始一直到從第50次交互開始來檢驗算法的冷啟動效果,實驗結果如圖5所示。

Figure 5 Performance analysis of algorithm cold start 圖5 算法冷啟動性能分析
本文提出的算法在新用戶冷啟動方面有先天的優勢,相比較傳統的協同過濾和矩陣分解需要大量的交互記錄生成推薦,該算法可以用已經訓練好的神經網絡來適應新的網絡。如圖5所示,算法在新用戶冷啟動推薦上有較好的推薦效果,在用戶交互記錄不多時,算法退化為僅使用短期偏好進行推薦的CNN結構;隨著用戶交互記錄的不斷增多,算法的推薦效果不斷提升,優于標準的GRU,證明了建模用戶不同興趣點的有效性。
本文通過對基于RNN的推薦方法進行分析和改進,提出一種基于混合神經網絡與知識圖譜的序列推薦算法。算法具有推薦準確度高、能緩解數據稀疏性、緩解冷啟動問題、推薦更具可解釋性等優點。但是,算法相比基于RNN的算法加入了CNN、KG與注意力機制,導致算法需要較長的訓練時間和更昂貴的硬件設備。
本文通過考慮推薦系統領域用戶交互序列特殊的研究點,提出一種融合知識圖譜與深度學習的細粒度序列推薦算法KG-AttCRNN。重點在于通過對序列的細粒度分析,詳細地建模了用戶的時間動態性和意圖動態性,彌補了現有方法對此的忽略,最后的實驗結果驗證了本文算法的有效性。在未來,將考慮用戶交互的項目更細致的信息,例如用戶停留的時間、操作的次數等,更進一步地建模用戶的偏好。