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

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

相較於以前,經過循環神經網絡(RNN)來對會話進行序列化建模致使的「不可以獲得用戶的精確表徵」以及「忽略了items中複雜的轉換特性」。
SR-GNN模型(https://github.com/PaddlePadd... 經過將序列化的問題轉換爲圖的問題,對全部的會話序列經過有向圖進行建模,而後經過圖神經網絡(GNN)來學習每一個item的隱向量表示,進而經過一個注意力網絡(Attention Network)架構模型來捕捉用戶的短時間興趣,以達到捕獲長期與短時間興趣共存的向量表示。SR-GNN模型明顯優於一些最早進的基於會話的推薦方法。git

應用背景介紹github

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

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

所以,在一個會話中,能對有限的行爲進行建模並相應地生成推薦是很是重要的。可是在這種場景下,須要依靠豐富的user-item交互信息的傳統推薦系統沒法產生使人滿意的推薦結果。
當前基於會話的推薦系統簡介session

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

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

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

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

然而,該模型也有兩處不足。
第一點就是在基於會話的推薦系統中,會話一般是匿名的且數量衆多的,而且會話點擊中涉及的用戶行爲一般是有限的,所以難以從每一個會話準確的估計每一個用戶表示(user representation),進而生成有效推薦內容。第二點是利用RNN來進行的建模,不可以獲得用戶的精確表示以及忽略了item中複雜的轉換特性。

SR-GNN概述
爲了克服第二部分描述的基於其餘模型的推薦系統不足之處,文章做者提出了基於會話的圖神經網絡模型的推薦系統(SR-GNN)。該模型能夠更好的挖掘item中豐富的轉換特性以及生成準確的潛在的用戶向量表示。SR-GNN模型的工做流以下:
圖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代碼庫簡要目錄結構及說明:
圖片描述

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

• Step 1: 運行以下命令,下載DIGINETICA數據集並進行預處理
圖片描述

• Step 2: 產生訓練集、測試集和config文件
圖片描述
運行以後在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)等參數,具體的配置說明可經過運行下列代碼查看:
圖片描述

gpu 單機單卡訓練
圖片描述
cpu 單機訓練
圖片描述

值得注意的是上述單卡訓練能夠經過加—use_parallel 1參數使用Parallel Executor來進行加速。

如下爲訓練結果示例:咱們在Tesla K40m單GPU卡上訓練的日誌以下所示(以實際輸出爲準)
圖片描述

預測:運行以下命令便可開始預測。能夠經過參數指定開始和結束的epoch輪次。
圖片描述

如下爲預測結果示例:
圖片描述

PaddleRec智能推薦

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

PaddlePaddle對推薦算法的訓練提供了完整的支持,並提供了多種模型配置供用戶選擇。包括TagSpace,GRU4Rec,Word2Vec,GraphNeuralNetwork,DeepInterestNetwork等等,以後還會繼續添加其餘模型也包括更多的圖模型,歡迎嘗試(https://github.com/PaddlePadd...

(論文參考:Session-based Recommendation with Graph Neural Networks,Shu Wu, Yuyuan Tang,Yanqiao Zhu, Liang Wang,Xing Xie,Tieniu Tan https://arxiv.org/abs/1811.00855

相關文章
相關標籤/搜索