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


來源商業新知網,原標題:基於會話的最優推薦模型:SR-GNN的PaddlePaddle實現

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

相較於之前通過循環神經網絡(RNN)來對會話進行序列化建模導致的不能夠得到用戶的精確表征以及忽略了items中復雜的轉換特性,SR-GNN通過將序列化的問題轉換為圖的問題,對所有的會話序列通過有向圖進行建模,然后通過圖神經網絡(GNN)來學習每個item的隱向量表示,進而通過一個注意力網絡(Attention Network)架構模型來捕捉用戶的短期興趣,以達到捕獲長期與短期興趣共存的向量表示。

SR-GNN模型明顯優於一些最先進的基於會話的推薦方法。

項目地址:https://github.com/PaddlePaddle/models/tree/develop/PaddleRec/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層進行全表預測。

1.構建會話圖(constructing session graphs)

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

2.學習每個item隱向量表示(Learning Item Embeddings on Session Graphs)

利用GNN來學習每一個item的隱向量表示。圖神經網絡之所以適合基於會話的推薦是因為它能利用豐富的節點間關系來自動抽取出會話圖的特征。

3.生成每個會話的embedding(generating session embeddings)

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

4.生成推薦(make recommendation)

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

PaddlePaddle實戰

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

.

├── README.md            # 文檔├── train.py             # 訓練腳本├── infer.py             # 預測腳本├── network.py           # 網絡結構├── reader.py            # 和讀取數據相關的函數├── data/    ├── download.sh         # 下載數據的腳本├── preprocess.py       # 數據預處理

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

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

cd data && sh download.sh

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

python preprocess.py --dataset diginetica

cd ..

運行之后在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)等參數,具體的配置說明可通過運行下列代碼查看

python train.py -h

gpu 單機單卡訓練

CUDA_VISIBLE_DEVICES=1 python -u train.py —use_cuda 1 > log.txt 2>&1 &

cpu 單機訓練

CPU_NUM=1 python -u train.py --use_cuda 0 > log.txt 2>&1 &

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

以下為訓練結果示例:我們在Tesla K40m單GPU卡上訓練的日志如下所示(以實際輸出為准)

W0308 16:08:24.249840  1785 device_context.cc:263] Please NOTE: device: 0, CUDA Capability: 35, Driver API Version: 9.0, Runtime API Version: 8.0

W0308 16:08:24.249974  1785 device_context.cc:271] device: 0, cuDNN Version: 7.0.2019-03-08 16:08:38,079 - INFO - load data complete2019-03-08 16:08:38,080 - INFO - begin train2019-03-08 16:09:07,605 - INFO - step: 500, loss: 10.2052, train_acc: 0.00882019-03-08 16:09:36,940 - INFO - step: 1000, loss: 9.7192, train_acc: 0.03202019-03-08 16:10:08,617 - INFO - step: 1500, loss: 8.9290, train_acc: 0.1350...2019-03-08 16:16:01,151 - INFO - model saved in ./saved_model/epoch_0...

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

CUDA_VISIBLE_DEVICES=3 python infer.py

以下為預測結果示例:

W0308 16:41:56.847339 31709 device_context.cc:263] Please NOTE: device: 0, CUDA Capability: 35, Driver API Version: 9.0, Runtime API Version: 8.0

W0308 16:41:56.847705 31709 device_context.cc:271] device: 0, cuDNN Version: 7.0.2019-03-08 16:42:20,420 - INFO - TEST --> loss: 5.8865, Recall@20: 0.45252019-03-08 16:42:45,153 - INFO - TEST --> loss: 5.5314, Recall@20: 0.50102019-03-08 16:43:10,233 - INFO - TEST --> loss: 5.5128, Recall@20: 0.5047...

PaddleRec智能推薦

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM