序列推薦模型梳理(Sequential Recommendation)
閱讀更多,歡迎關注公眾號:論文收割機(paper_reader)
因為排版問題,很多圖片和公式無法直接顯示,歡迎關注我們的公眾號點選目錄來閱讀原文。
序列推薦(sequential recommendation)在推薦系統裡是非常重要的任務,它通過對使用者(user)行為序列,比如購買商品(item)的序列(sequence)來建模,學到user 興趣的變化,從而能夠對使用者下一個行為進行預測。序列推薦的模型,隨著整個CS research領域的發展,也是一直在不斷變化。從最開始的Markov chain,到後來的RNN,CNN模型,以及現在流行的transformer。每個時期的序列推薦模型,基本上也是對應著該時期用的比較多的NLP模型。本文梳理了序列推薦模型的發展變化,幫助大家理清楚序列推薦系統的設計思路。
Markov Chain
FPMC:
Factorizing Personalized Markov Chains for Next-BasketRecommendation
Fossil:
Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation
這是比較早期的時候,當時deep learning還沒有開始應用,貝葉斯的方法也是討論的很多。因此這兩篇也是直接用Markov chain來建模購買行為之間的關聯性。
FPMC這篇文章的研究的問題是從basket recommendation來入手的,通過歷史資料構建商品之間的transition matrix。之後只需要通過建立好的transitionmatrix就可以預測使用者下一個可能購買的item是什麼了。
之後還有篇比較火的Fossil模型是通過high-order Markov chain來學到更多的資訊,再結合相似性模型來解決序列推薦預測中的稀疏性問題。
RNN
GRU4Rec:
Session-basedRecommendations with Recurrent Neural Networks
RRN:
RecurrentRecommender Networks
HRNN:
PersonalizingSession-based Recommendations with Hierarchical Recurrent Neural Networks
上面放的三篇文章舉了幾個用RNN來解決序列推薦問題的模型,用RNN來解決序列推薦問題的文章非常多。不過從現在的角度來看,最好用的還是GRU4Rec。用RNN模型來訓練一個序列推薦模型應該是大家都能想到的思路了,當年的研究者開始解決這個問題的時候,也是發現RNN模型既能夠學到這種類似Markov chain的transition資訊,也能夠通過一些其他的方式,比如LSTM來學到長短期的序列資訊,或者是用gated RNN來增加model的學習能力。這一類的方法都是比較直接的,如果希望嘗試解決一個序列的問題,那麼RNN的模型應該就是第一個可以去嘗試的思路。
例如GRU4Rec是通過Gated RNN來學到序列中item之間的關聯性:
並且通過$z_t$這個gate embedding來控制選擇資訊輸入,$z_t$為:
$\hat{h}_{t}$表示position t上的資訊:
其中的$r_t$表示reset gate:
CNN
3D-CNN:
3D convolutional networks for session-based recommendation with content features
Caser:
Personalized top-n sequential recommendation via convolutional sequence embedding
HierTCN:
Hierarchical temporal convolutional networks for dynamic recommender systems
利用CNN來解決序列推薦的模型還是比較少的,首先是因為CNN只能model從區域性到整體這種convolution資訊,但是在序列推薦中我們更關心的是序列之間的關聯性,所以CNN的模型沒有那麼自然的過渡。
但是也是有以上提到的這幾種模型,也是分別從不同的角度來介紹了CNN在序列推薦中的可能性。相比RNN,CNN有個比較直接的優勢是在於可以用來model整體的資訊,比如在Caser這篇文章中就提到了union-level的概念:
如圖中的item 序列所示所示。(a)表示的是point-level 的預測,也就是通過上一個或者前幾個item,來預測下一個item。(b)(c)表示的是union-level的預測,也就是通過前幾個item組合起來的資訊,來預測下一個或者下幾個item。在model這種資訊上,CNN就顯得具有天然的優勢,因為RNN的模型,一般也還是著重於item的序列變化特徵,而不是整體的影響。
比如Caser模型,通過將序列每個視窗中的items作為一個整體輸入卷積層,得到一個embedding,再用這個embedding來預測下一個item或者後幾個items的分類。而HierTCN是將TCN(temporal convolutional network)與GRU結合起來預測。這樣就可以在序列的local使用CNN的卷積特性,而序列的整體仍然保持RNN的序列建模特性。
Attention/Transformer
SASRec:
Self-Attentive Sequential Recommendation
Bert4Rec:
BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer
SSE-PT:
SSE-PT: Sequential Recommendation Via Personalized Transformer
從NLP裡的self-attention模型開始,大家就開始瘋狂嘗試把Transformer用在各個領域裡,並且發現確實都能取得很不錯效果。尤其這兩年推薦系統領域也是變成了一個熱點領域,大家也嘗試了很多用Transformer來解決序列推薦問題的模型。
SASRec應該算是早期的嘗試,雖然整個模型仍是與原始的transformer相似,但是還是有一些自己的insight在裡面,而且程式碼也是開源的工作。Bert4Rec是基於NLP中最近特別火的Bert模型,考慮了雙向建模序列。SSE-PT則是考慮了user embedding在序列建模中的重要性,並且提出了需要使用stochasticshared embeddings這一方法來提升performance。
Attention模型確實非常有用,除了這三篇之外,還能找到大約十篇的就在近一年來發表的使用self-attention模型來解決序列推薦問題。所以如果現在還想做序列推薦中的一些研究問題,那麼self-attention模型應該是屬於SO他的baseline了。
總結
本文我們簡單梳理了如何去建立模型來完成序列推薦的任務。總而言之,序列推薦中最關鍵的資訊有兩點,第一個是序列中item之間的關聯性,第二個是user的personalization資訊。除了這兩點,還可以建立模型去學習結構資訊,比如一些層級(hierarchy)資訊,又或者是具體的時間(temporal)資訊。能夠把多種資訊利用好,就能夠完成序列推薦的任務。
更多相關的文章可以點選閱讀原文訪問我們的GitHub paper list:
https://github.com/DyGRec/Sequential-Recommender-System-Papers
閱讀更多,歡迎關注公眾號:論文收割機(paper_reader)
因為排版問題,很多圖片和公式無法直接顯示,歡迎關注我們的公眾號點選目錄來閱讀原文。
往期文章:
相關文章
- An Analysis of Sequential Recommendation Datasets
- An Attentive Inductive Bias for Sequential Recommendation beyond the Self-Attention
- 推薦系統入門(Top-N recommendation)
- 推薦系統論文之序列推薦:KERL
- [譯]Recommendation card (推薦卡)--Android TV 開發手冊十一Android
- 序列推薦系統的前世今生
- 《推薦系統》-DIN模型模型
- 《推薦系統》-PNN模型模型
- 【推薦系統篇】--推薦系統之訓練模型模型
- 推薦系統知識梳理——GBDT&LR
- [SIGIR2020] Sequential Recommendation with Self-Attentive Multi-Adversarial Network
- 推薦系統召回四模型之全能的FM模型模型
- Steam互動式推薦模型正式上線模型
- 選擇合適的推薦系統模型模型
- 零基礎入門推薦系統-【排序模型+模型融合】排序模型
- 聊聊推薦系統,FM模型效果好在哪裡?模型
- 推薦系統FM系列文章(三)-- NFM模型模型
- 推薦那麼準,除了模型,還有什麼。。。模型
- 探索將大語言模型用作推薦系統模型
- phpcms--模型管理,推薦位管理,類別管理PHP模型
- 搜狐:新聞推薦系統的CTR預估模型模型
- 微博推薦實時大模型的技術演進大模型
- 請大家推薦一個比較好的XML序列化工具!XML
- 讀論文-序列感知推薦系統(Sequence-Aware Recommender Systems)
- 基於專案的協同過濾推薦演算法(Item-Based Collaborative Filtering Recommendation Algorithms)演算法FilterGo
- 英文DDD培訓線上課程推薦: 從失血模型重構到充血模型模型
- 模型的威力:基於模型,快速梳理原始碼模型原始碼
- 編輯推薦之《推薦系統》
- 基於深度學習模型Wide&Deep的推薦深度學習模型IDE
- 國外 7 個最佳大語言模型 (LLM) API 推薦模型API
- [改善Java程式碼] 推薦使用序列化實現物件的拷貝Java物件
- 推薦分享
- GPT 推薦GPT
- 副業推薦
- (讀論文)推薦系統之ctr預估-DeepFM模型解析模型
- 推薦模型NeuralCF:原理介紹與TensorFlow2.0實現模型
- 美團綜合業務推薦系統的質量模型及實踐模型
- Oracle NUMA usage recommendationOracle