鹿祥志,孫福振,王紹卿,徐上上
山東理工大學 計算機科學與技術學院,山東 淄博 255049
隨著網絡信息量的不斷增長,推薦系統已成為克服信息超載的有效策略[1]。傳統的推薦問題通常抽象成矩陣填充問題,這樣的方法適合應用在擁有用戶長期配置文件的情境中。當用戶的長期配置文件不存在時,就需要根據用戶和站點交互的會話日志來做出推薦。這種僅依賴于用戶當前進行的會話中的動作序列來預測用戶下一個動作的問題被稱之為基于會話的推薦。基于會話的推薦系統(Session-based Recommender System)是個性化推薦系統的一個重要組成部分。會話指的是在給定時間內發生的用戶與站點的交互[2]。在推薦系統中會話通常能體現用戶這段時間內的意圖,例如,看某種類型的新聞,買某類商品等[3]。目前,基于會話的推薦主要的算法包括:基于序列模式挖掘的方法[4]、基于馬爾可夫模型的方法[5],以及基于循環神經網絡的方法[6]。由于近年來深度學習技術的飛速發展,基于神經網絡的會話推薦算法成為當前研究的熱點。其中,循環神經網絡(RNN)具有可以利用歷史狀態的特點,Hidasi 等人[7]首次將RNN應用于推薦系統,不僅證明了RNN能應用于基于會話的推薦問題,而且針對基于會話推薦的這項特定任務,設計了帶有門控循環單元(Gated Recurrent Unit,GRU)的RNN 模型GRU4REC。Tan 等人[8]提出在GRU4REC 上引入四條優化方法,包括數據增強技術、設置時間閾值來適應變化、使用特權信息(關于點擊項目的屬性)和輸出嵌入方法。之后Hidasi 等人[9]則通過改進排序損失函數對RNN進行優化。Li等人[10]提出了NARM(Neural Attentive Recurrent Model)模型,其認為在以前的基于會話的推薦方法的工作中,大多數只關注了對于用戶會話點擊序列的建模,但是并沒有關注用戶在點擊序列中真實的興趣。Pan等人[11]提出一種具有重要性提取模塊SR-IEM的會話推薦算法,該算法考慮了用戶在會話中的長期行為和近期行為。以上這些方法都沒有在基于會話的推薦任務中關注用戶的上下文信息。Smirnova 等人[12]提出一種新的情境循環神經網絡推薦系統(CRNNs),通過將情境嵌入與項目嵌入相結合來修改RNN 行為,并通過參數化將隱藏的單元轉換為情境信息的函數進行情境序列建模,此模型考慮了用戶與項目的交互行為作為上下文信息,但沒有將用戶的上下文信息如地理位置等考慮在內。Song 等人[13]指出,把靜態上下文信息如地理位置、天氣融入推薦系統將有利于提高推薦精確度。
基于會話的推薦場景中,通常難以獲取和利用用戶的歷史行為記錄。伴隨著智能手機的發展,人們更愿意利用手機來瀏覽信息、購買商品。相比傳統方式,手機更容易獲取到用戶的靜態上下文信息,如地理位置、天氣、用戶的運動狀態等等。因此,如何在會話推薦中更好地融合用戶的這些上下文信息是一個值得研究的問題。
本文的主要工作就是在基于RNN的會話推薦模型基礎上,融入用戶的上下文信息,如用戶所在的城市或地區,用戶使用的設備等,提高推薦質量。
在循環神經網絡的使用上,Hidasi等人對長短期記憶模型(LSTM)和門控循環單元(GRU)結構(如圖1 所示)進行了實驗對比,并最終采用門控循環單元結構代替傳統的循環神經網絡結構。GRU能夠很好地處理梯度消失問題且復雜度相對更低。

圖1 GRU單元Fig.1 GRU unit
GRU單元在t時刻更新過程如下:


其中,xt為輸入數據,σ是sigmoid函數,通過這個函數可以將數值變換到0~1的范圍,Wr、Wz、Wh、Ur、Uz、Uh是權重矩陣,br、bz、bh是偏置值,⊙表示向量之間的點乘運算。使用GRU隱藏層的最后一個隱藏狀態ht來表示用戶在當前會話的序列行為特征。
本文的工作在基于循環神經網絡的會話推薦模型(GRU4REC)上開展的。模型的網絡結構由三層組成,分別為輸入層、GRU層和輸出層。
輸入層,每個item 通過one-hot 進行編碼,然后經過嵌入層進行嵌入,為每個item 生成一個低維的嵌入向量。
GRU層,由GRU單元組成,接受的輸入是item的嵌入向量和前一時刻GRU單元的狀態。
輸出層,輸出層包含一個前饋網絡層,將GRU 層的輸出作為前饋網絡層的輸入,最終輸出所有item 的得分。
目前有很多對上下文的定義,但在上下文感知推薦系統研究領域,上下文也沒有統一的定義,需要根據具體應用系統或者用戶需求引入合適的上下文類型及其具體實例。盡管對于不同應用領域的不同的上下文感知推薦系統考慮的上下文信息是不同的,但從總體上來看,常見的上下文類型包括時間、位置、外界物理環境、設備信息、活動狀態等。
按照將上下文融入推薦生成過程哪個階段的角度,可以將上下文感知推薦結果生成方法劃分為上下文預過濾、上下文后過濾、上下文建模等三種方法[14]。其中,上下文建模將上下文信息融入推薦生成的整個過程,需要設計合適的算法、模型處理多維度上下文用戶偏好。這種范式需要處理高維數據,最為復雜,但也最能有效挖掘用戶、上下文、項目之間的關聯關系。本文采用上下文建模的方法,即,將用戶的上下文信息融入到循環神經網絡模型中。
為了考慮用戶的上下文信息,本文提出了一種基于會話的上下文感知推薦算法模型Session-based Context-Aware Recommendation(SCAR)。模型將用戶的上下文信息中的各種特征通過embedding 技術映射成隨機分布的低維實數向量,再經過Add、Stack、MLP 等方式組合,然后將其融入到循環神經網絡。推薦過程是對該會話中可能被選擇的所有下一個項目,對其可能性輸出一個得分,取得分最高的k個項目作top-k推薦。模型的總體框架如圖2所示。

圖2 SCAR模型Fig.2 Model of SCAR
本文提出一種將用戶上下文信息融入循環神經網絡推薦模型的上下文感知會話推薦算法。下面給出模型的形式化描述:令S={x1,x2,…,xn} 為會話S的點擊序列,其中,xi∈I(1≤i≤n)是總數為M的item集合中一個被點擊的item。令CS為會話S的上下文信息,例如,對于會話S有如下上下文信息(deviceType=Mobile,Country=U.S.),則每種信息分別編碼為[0,0,1] 和[0,1,0,…,0] 分別記為本文的目標是構建一個模型M,使得對于會話S的任意前綴序列x={x1,x2,…,xt} 和上下文信息CS,通過模型得到輸出y=M(x,ES),其中,y={y1,y2,…,ym},是所有可能選擇的item的得分列表。下面詳細描述模型的構建方式,主要分為特征映射、特征融入、輸出結果三個部分介紹。
2.1.1 特征映射
首先構建上下文信息的嵌入矩陣。給定一個會話S和該會話對應的用戶上下文信息CS,根據相應上下文信息的one-hot 編碼,構建Embedding 矩陣E,E是一個N×K的矩陣,N為one-hot 編碼的長度,K是實驗設定的嵌入向量長度。Embedding 層本質上是一個全連接層,將上下文信息的one-hot 編碼從高維稀疏向量映射為低維稠密向量,這有利于神經網絡對特征的提取和抽象。
2.1.2 特征融入
得到用戶的上下文向量之后,要將這些上下文信息加入到RNN模型中。如圖3所示,本文將上下文信息融入模型的方式主要有三種。
第一種方式是在input 階段,將上下文信息與item向量共同輸入:

第二種方式是在output階段,將上下文信息與模型在當前時間步最后的輸出進行組合。

對于這兩種方式,θ都代表信息的組合函數,對于θ函數,又分為如下三種形式:
(1)Add:即直接將上下文信息向量與當前向量相疊加,優點是不會增加向量維度和模型的復雜度。缺點是需要兩部分信息的維度保持一致。
(2)Stack:即直接對兩個向量進行拼接,能夠充分發揮不同的信息對結果的影響。缺點是由于會增大神經網絡的輸入或輸出維度從而導致消耗較多的計算資源。
(3)MLP:即使用感知機來組合信息,這種方式需要計算權重矩陣來對兩向量進行組合變換,優點是有較強的擬合能力,缺點是需要的計算量相對較大,不容易訓練。
這三種方式不僅用于上下文信息與GRU單元的組合,同時也用于不同上下文信息之間的組合,如圖3 的信息組合層。

圖3 上下文信息的三種融入方式Fig.3 Three ways to integrate contextual information
在input 和在output 階段融入額外信息是比較常用的方法,除此之外,本文還提出了第三種方式,在每個會話開始階段初始化GRU隱藏狀態的方法。

其中,h0為一個會話中GRU 單元的初始隱藏狀態。這種方式同樣能將上下文信息的影響傳遞到整個會話,而且只在會話的初始化階段進行計算,可以節省計算資源。
2.1.3 輸出結果
GRU 單元的隱層狀態再經過一個全連接層,得到每個物品被點擊的概率。如公式(8):

是下一個物品被點擊的概率。因為采用BPR 作為損失函數,需要計算item 的得分,因此采用tanh 作為激活函數,將分數映射成一個介于[?1,1]的數值。另外,由于item的規模一般十分巨大,訓練時如果同時更新所有神經單元的權重參數,會造成巨大的計算資源消耗,也會嚴重影響訓練速度。為避免此問題,本文使用負采樣的方法。選擇同一個batch中其他會話的下一個item作為負樣本,每次訓練只更新小部分權重,降低訓練過程中的計算量。這種采樣方法不僅減少了計算量,而且由于負樣本取自其他會話,在一定程度上保證了負樣本的流行度。
雖然推薦任務可以當作多分類任務來處理,但推薦算法的核心是根據用戶的偏好對item進行排序,越符合用戶偏好的項目排序應該越靠前。因此,推薦系統引入了排序學習的方法。經典貝葉斯個性化排序Bayesian Personalized Ranking(BPR)是一種利用成對排序損失的矩陣因子分解方法,BPR比較的是一個正例和一個負例的得分。在損失迭代計算過程中,將正例項目的得分與同一個batch中其他會話的下一個item的得分進行比較,并使用他們的平均值作為損失。在某一會話的某一時刻的損失定義為:

其中,Ns是表示采樣的負樣本數,是正樣本的分數,是負樣本的分數,σ是sigmoid函數。
Adressa[15]是RecTech 項目中發布的一個新聞數據集,它包括各種推薦策略需要的特性,以及提供所有新聞文章的全文訪問。該數據集有兩個版本,一個是Adresseavisen新聞門戶網站上10周流量的包含2 000萬閱讀行為的大型數據集,另一個是只有一周流量的包含200萬閱讀行為的小型數據集。
本文使用的是包含2 000 萬閱讀行為的大型數據集,選取了其中一個月內注冊用戶的共1 596 429 個會話。將其中80%作為訓練集,20%作為測試集。訓練集包含1 277 143個會話,測試集包含319 286個會話。會話根據數據集中的會話的開始和停止符劃分,數據集中可直接獲得的用戶上下文信息有country、city、region、deviceType、os。例如,某個用戶的上下文信息為,country=“no”,city=“trondheim”,region=“sor-trondelag”,device-Type=“Tablet”,os=“iPhone OS”。雖然,city和region隱含了country的信息,但是實驗證明,當同時使用這些信息的時候推薦效果更好。deviceType 和os 可以區分用戶的不同使用場景,提高推薦的效果。
Recall@K:由于推薦系統一次只能推薦幾個項目,用戶可能選擇的實際項目應該在列表的前幾個項目中。因此,本文的主要評估指標是Recall@K,這是在所有測試用例中,在前K個項目中擁有所需項目的比例。召回不考慮項目的實際排名。這很好地模擬了某些實際場景,在這些場景中沒有突出的建議,絕對順序也不重要。計算公式為:

其中,TP表示用戶感興趣的物品在推薦列表中的數量,FN表示用戶感興趣的物品不在推薦列表中的數量。
MRR@K:實驗中使用的第二個度量是MRR(平均倒數排名)。這是所需項目的倒數排名的平均值。如果排名大于K,則倒數排名被設為0。MRR 考慮項目的等級,這在注重推薦順序的情況下是很重要的。計算公式為:

其中,|Q|表示用戶感興趣的物品數量,ranki表示用戶感興趣的物品在推薦列表中的排名。
因為不同的會話之間會話長度差別較大,本文采用了Hidasi等人[7]提出的會話并行的mini-batch訓練方式,具體過程為,在一個batch 里,每當一個會話結束,一個新的會話接替這個結束的會話,而其他會話保持不變,在新的會話進行接替的時候,需要重置相應會話GRU的隱藏狀態。訓練過程中,使用RMSProp 優化模型,batch-size為128,雖然更小的batch-size會帶來略微更好的訓練效果,但會使訓練時間加長,為了兼顧訓練效率與實驗效果,將batch-size 設置為128,初始學習率為0.001,學習率衰減系數為0.96,Dropout 的keep_prob 參數為0.8,GRU單元數量為100個。
為探究在RNN 模型的基礎上加入上下文信息是否能夠提升推薦效果,本文提出的模型SCAR 與POP模型、BPR-MF 模型、Item KNN 模型、RSVD 模型[16]和GRU4REC模型進行對比實驗。
POP模型,該方法將訓練集中用戶交互次數最多的項進行推薦。
BPR-MF 模型,是一種常用的矩陣分解方法,但不能直接用于會話推薦。參考Hidasi等人的工作,可以將會話中已經出現的物品表示向量與候選物品表示向量的相似度平均值作為候選物品的推薦分值。
Item KNN模型,在這個模型中,兩個物品在不同會話中共同出現的次數定義為兩個物品的相似度。
RSVD 模型,RSVD 是正則化奇異值矩陣分解算法。本文所用數據集沒有顯式評分,文獻[15]提出可以使用閱讀時長代表評分。
GRU4REC 模型,該方法利用循環神經網絡建模用戶會話的行為序列,并利用mini-batch 的方式訓練得到模型參數。
從表1和表2可以看出,提出的模型在Recall和MRR兩個指標上都優于基線方法。對比POP、BPR-MF 和ItemKNN 三種模型,算法的效果提升顯著,證明了在會話推薦中,基于深度學習的推薦模型比傳統推薦方式有更好的推薦效果。對比RSVD模型可以發現,傳統的矩陣分解方法在基于會話的推薦場景中沒有優勢,Recall和MRR 都遠低于所提出的SCAR 模型。對比SCAR 與GRU4REC 的結果,可以發現SCAR 相比GRU4REC 有一定的提升,Recall@20 和MRR@20 分別提升了3.2%和27%,其中MRR的提升更為明顯,說明加入的上下文信息能使模型推薦結果中最相關的項目排名更靠前。

表1 SCAR與基線方法在Recall上的比較Table 1 Recall data of SCAR and other models

表2 SCAR與基線方法在MRR上的比較Table 2 MRR data of SCAR and other models
圖4和圖5對比了在三個不同階段加入上下文信息的實驗結果。結果表明,三種方式的推薦效果略有差別。其中在input 階段加入上下文信息的方式效果最好,在output階段加入上下文信息的方式效果最差。原因是在input階段加入的方式使得上下文信息參與到神經網絡訓練的所有階段和一個會話的所有時間步。

圖4 在不同階段融入上下文信息Recall對比Fig.4 Recall of incorporate contextual information at different stages

圖5 在不同階段融入上下文信息的MRR對比Fig.5 Comparison of MRR with contextual information at different stages
為進一步驗證分析不同的組合方式對推薦效果的影響,設計了不同的組合實驗,如表3 所示。這里只在之前表現較好的input 階段的融合方式下進行對比實驗。

表3 不同組合方式在Recall和MRR上的比較Table 3 Comparison of different combinations on Recall and MRR
表3 在Recall@20 和MRR@20 兩個指標上比較了不同的組合方式對推薦結果的影響。以Input+add+stack為例,其表示在input階段融入信息,其中上下文信息之間的組合方式為add,上下文信息與GRU單元的組合方式為stack。對比1、2、4行可知,上下文信息之間的組合方式中,以MLP的方式組合,Recall@20效果最好,以add方式組合,MRR@20效果最好。由3、4、5行的數據可知,上下文信息與GRU單元的組合,stack方式的效果最優。
本文提出了一種融合用戶上下文信息的上下文感知的推薦算法。在實際的基于會話推薦場景中,用戶的個人信息很難獲取到,但是地理位置、設備類型等信息可以通過IP 地址和http 協議等方式輕松獲得。這些獲取到的信息可以作為用戶的上下文信息融入推薦模型。用戶的地理位置甚至所使用的設備類型可以在某種程度上反映用戶的偏好,因此這些上下文信息可以在模型中對推薦結果有一定的影響進而提高推薦的質量,實驗結果表明,所提算法相比基線算法GRU4REC,在指標Recall@20上提高了3.2%,MRR@20上提高了27%。
未來研究工作將探索上下文信息之間的組合方式,參考特征組合相關工作如NFM對其進行改進。