序列推薦模型梳理(Sequential Recommendation)

paper_reader發表於2020-10-28

閱讀更多,歡迎關注公眾號:論文收割機(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)
因為排版問題,很多圖片和公式無法直接顯示,歡迎關注我們的公眾號點選目錄來閱讀原文。

往期文章:

 

相關文章