開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

近日,百度深度學習平臺PaddlePaddle開源了基於會話(session-based)的推薦系統模型(SR-GNN)。

相較於之前,通過循環神經網絡(RNN)來對會話進行序列化建模導致的“不能夠得到用戶的精確表徵”以及“忽略了items中複雜的轉換特性”,SR-GNN模型(https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/gnn)通過將序列化的問題轉換為圖的問題,對所有的會話序列通過有向圖進行建模,然後通過圖神經網絡(GNN)來學習每個item的隱向量表示,進而通過一個注意力網絡(Attention Network)架構模型來捕捉用戶的短期興趣,以達到捕獲長期與短期興趣共存的向量表示。SR-GNN模型明顯優於一些最先進的基於會話的推薦方法。

應用背景介紹

隨著互聯網上信息量的快速增長,推薦系統能夠幫助用戶緩解信息過載的問題,進而有效幫助用戶在眾多Web應用程序中(比如:搜索、電子商務、媒體流網站等)選擇自己感興趣的信息。大多數現有的推薦系統都假設一個前提:用戶畫像(user profile)和歷史活動信息是被不斷記錄的。

然而實際上,在許多服務中,用戶的信息可能是未知的,並且只有處於當前正在進行的會話中的用戶歷史行為可用。

因此,在一個會話中,能對有限的行為進行建模並相應地生成推薦是非常重要的。但是在這種場景下,需要依靠豐富的user-item交互信息的傳統推薦系統無法產生令人滿意的推薦結果。

當前基於會話的推薦系統簡介

由於推薦系統的高實際價值,越來越多的研究人員開始提出基於會話的推薦方案。

基於馬爾可夫鏈的推薦系統:該模型基於用戶上一次的行為來預測用戶的下一次行為,然而由於強獨立性相關假設,該模型的預測結果並不十分準確。

基於循環神經網絡(RNN)的推薦系統:相比於傳統的推薦問題,基於會話的推薦問題的不同點在於如何利用用戶的短期會話交互信息數據來預測用戶可能會感興趣的內容。

基於會話的推薦可以建模為序列化問題,也就是基於用戶的短期歷史活動記錄來預測下一時刻可能會感興趣的內容並點擊閱覽。而深度學習中的RNN模型正是一類用於處理序列數據的神經網絡。隨著序列的不斷推進,RNN模型中靠前的隱藏層將會影響後面的隱藏層。於是將用戶的歷史記錄交互數據作為輸入,經過多層神經網絡,達到預測用戶興趣的目的。該模型也達到了令人滿意的預測結果。

然而,該模型也有兩處不足。

第一點就是在基於會話的推薦系統中,會話通常是匿名的且數量眾多的,並且會話點擊中涉及的用戶行為通常是有限的,因此難以從每個會話準確的估計每個用戶表示(user representation),進而生成有效推薦內容。

第二點是利用RNN來進行的建模,不能夠得到用戶的精確表示以及忽略了item中複雜的轉換特性。

SR-GNN概述

為了克服第二部分描述的基於其他模型的推薦系統不足之處,文章作者提出了基於會話的圖神經網絡模型的推薦系統(SR-GNN)。該模型可以更好的挖掘item中豐富的轉換特性以及生成準確的潛在的用戶向量表示。SR-GNN模型的工作流如下:

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

圖1:SR-GNN模型的工作流

首先,對所有的session序列通過有向圖進行建模。接著通過GNN,學習每一個node(item)的隱向量表示。然後通過一個attention架構模型得到每個session的embedding。最後通過一個softmax層進行全表預測,具體如下:

構建會話圖(constructing session graphs):每一個會話序列都被建模為有向圖。在此會話圖中每一個節點(node)代表一個item。有向圖的每一條邊意味著一個用戶在該會話中依次點擊了起點和終點表示的item。每一個item被嵌入到統一的embedding空間,並且我們用節點向量來指明每一個item隱向量。基於節點向量,每一個會話被建模成一個嵌入向量。

學習每個item隱向量表示(Learning Item Embeddings on Session Graphs):利用GNN來學習每一個item的隱向量表示。圖神經網絡之所以適合基於會話的推薦是因為它能利用豐富的節點間關係來自動抽取出會話圖的特徵。

生成每個會話的embedding(generating session embeddings):以前的基於會話的推薦方法總是假設在每一個對話中,都存在明顯的用戶潛在表徵。相反的,SR-GNN方法不對用戶做出任何假設,而是將會話直接由組成它的若干節點進行表示。每一個session利用注意力機制將整體偏好與當前偏好結合進行表示。

生成推薦(make recommendation):當獲得每一個會話的embedding後,我們可以計算出所有候選item的推薦分數值。接著我們利用softmax函數和已經獲得的推薦分數值來計算不同候選item的概率值,來表明在該次會話中用戶下一次可能點擊的不同item的概率。

PaddlePaddle實戰

SR-GNN代碼庫簡要目錄結構及說明:

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

數據準備:使用DIGINETICA數據集。可以按照下述過程操作獲得數據集以及進行簡單的數據預處理。

Step 1: 運行如下命令,下載DIGINETICA數據集並進行預處理

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

Step 2: 產生訓練集、測試集和config文件

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

運行之後在data文件夾下會產生diginetica文件夾,裡面包含config.txt、test.txt以及train.txt三個文件。

生成的數據格式為:session_list, label_list。其中session_list是一個session的列表,裡面的每個元素都是一個list,代表不同的session。label_list是一個列表,每個位置的元素是session_list中對應session的label。

訓練:可以參考下面不同場景下的運行命令進行訓練,還可以指定諸如batch_size,lr(learning rate)等參數,具體的配置說明可通過運行下列代碼查看

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

gpu 單機單卡訓練

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

cpu 單機訓練

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

值得注意的是上述單卡訓練可以通過加—use_parallel 1參數使用Parallel Executor來進行加速。以下為訓練結果示例:我們在Tesla K40m單GPU卡上訓練的日誌如下所示(以實際輸出為準)。

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

預測:運行如下命令即可開始預測。可以通過參數指定開始和結束的epoch輪次。

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

以下為預測結果示例:

開源 | 基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

PaddleRec智能推薦

這裡給大家安利一下PaddleRec智能推薦。推薦系統在當前的互聯網服務中正在發揮越來越大的作用,目前大部分電子商務系統、社交網絡,廣告推薦,搜索引擎,都不同程度的使用了各種形式的個性化推薦技術,幫助用戶快速找到他們想要的信息。此外,在工業可用的推薦系統中,推薦策略一般會被劃分為多個模塊串聯執行。

PaddlePaddle對推薦算法的訓練提供了完整的支持,並提供了多種模型配置供用戶選擇。包括TagSpace,GRU4Rec,Word2Vec,GraphNeuralNetwork,DeepInterestNetwork等等,之後還會繼續添加其他模型也包括更多的圖模型。

歡迎嘗試:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec。

論文參考:https://arxiv.org/abs/1811.00855

Session-based Recommendation with Graph Neural Networks,Shu Wu, Yuyuan Tang,Yanqiao Zhu,Liang Wang,Xing Xie,Tieniu Tan



分享到:


相關文章: