論文地址:https://arxiv.org/abs/1808.09781
官方代碼:https://github.com/kang205/SASRec
一 為什么讀這篇
搜索用self-attention做推薦的相關文章,本篇算是比較相關的而且排名較高,作者開放的源碼也是基于transformer那個第三方的開源實現,算是一脈相承,看看別人是怎么改transformer,應用到推薦里的。
二 截止閱讀時這篇論文的引用次數
2019.6.25 15次。
三 相關背景介紹
中了18年IEEE的ICDM,同年8月掛到arXiv上。算是跟進比較及時的,transformer出來一年后就應用到自己工作的領域并發了paper。兩位作者來自加州圣地亞哥大學,一作Wang-Cheng Kang是個華人小哥PHD,16年本科畢業于南大,期間受周志華教授指導,PHD是推薦系統和CV雙修,CVPR和RecSys的論文都發過,又是一個強人。。二作Julian McAuley是Kang的老板,還在coursera上開了一門專項課程Python Data Products for Predictive Analytics
四 關鍵詞
Sequential Recommendation
self-attention
五 論文的主要貢獻
1 將Transformer應用在序列推薦問題上
2 做了細致的剝離對比實驗
六 詳細解讀
0 摘要
動態序列是許多推薦系統的關鍵特征,為了利用這一點,主要有馬爾科夫鏈(MCs)和RNN方法。其中MC適用于短序列, 稀疏數據集,模型簡單;RNN原則上適用于長序列,密集數據集,不過模型更復雜。本文目標是平衡這兩個目標,通過提出基于序列模型的self-attention(SASRec),使之可以捕獲長期語義(像RNN那樣),但是使用attention機制,使預測基于相關的少數行為(像MC那樣)。在每一個時間步,SASRec從用戶的歷史行為中尋找哪些item是"相關的",并基于它們來預測下一個item。
1 介紹
序列推薦研究主要涉及到如何簡便地捕獲高階動態。本文主要就是探索將self-attention機制應用到序列推薦問題上。希望這個想法可以解決MC和RNN的兩個問題,一方面能夠從過去的所有行為中獲取context(像RNN),另一方面能夠以少量的行為進行預測(像MC)。本文提出的SASRec(Self-Attention based Sequential Recommendation)如圖1所示。
2 相關工作
2.1 常規推薦
基于point-wise,pairwise的方法來解決隱式反饋關于"未觀察到"這種二義的解釋。主要都是基于矩陣分解(MF)的方法來發現用戶偏好和item屬性。還有近年的深度學習方法用于提取特征或用來替代傳統的MF方法。如NeuMF,AutoRec。
2.2 時序推薦
TimeSVD++通過將時間劃分為幾個段,并分別對user和item建模達到了很好的效果。
2.3 序列推薦
有一階的MC方法,高階的MC方法。基于CNN的Caser,基于RNN的GRU4Rec。
2.4 Attention機制
Attention機制背后的本質理念是,順序輸出的每項都依賴于模型應該連續關注的某些輸入的"相關"部分。還有個優勢是基于attention的方法更容易解釋。例如AFM(Attentional Factorization Machines)學習每個特征交互對于內容感知推薦的重要性。
本文工作受transformer啟發,提出基于self-attention的序列推薦模型。因為序列推薦的問題與機器翻譯有很大差異,所以需要對模型進行特殊設計。
3 方法
定義用戶行為序列為,在時間步
,模型預測的下一個item取決于之前的
個item。模型輸入可以視為
,其期望輸出是同樣序列的"偏移"版本:
。所用符號如表1所示。
3.1 Embedding層
將訓練序列轉為固定長度序列
。如果序列長度超過
,則用最近的
個行為。如果不足,則從左補足直到長度為
。
位置Embedding
因為self-attention并不包含RNN或CNN模塊,因此它不能感知到之前item的位置。本文給輸入Embedding插入可學習的位置Embedding :
本文也試了transformer中固定的位置Embedding,不過效果更糟。
3.2 Self-Attention塊
Transformer中的縮放點積attention定義如下:
Self-Attention層
本文中,self-attention以embedding 作為輸入,通過線性投影將它轉為3個矩陣,然后輸入attention層:
Causality
為了避免穿越問題,需要禁止和
之間所有的連接。
Point-wise前饋網絡
盡管self-attention能夠用自適應權重聚集之前所有item的embedding,最終它仍然是個線性模型。為了增加非線性同時考慮不同隱式維度之間的交互,用了一個兩層的point-wise前饋網絡:
3.3 Self-Attention塊的堆疊
堆疊公式如下:
然而隨著網絡的加深也出現幾個問題:
- 模型容量的增加導致過擬合
- 由于梯度消失訓練過程變得不穩定
- 更多的參數需要更長的訓練時間
受Transformer啟發,用了LayerNorm,Dropout,殘差連接:
其中表示self-attention層或前饋網絡。
LayerNorm公式如下:
其中為element-wise積(Hadamard product),
為包含所有特征的一個樣本。
3.4 預測層
采用MF層來預測相關的item :
其中是給定
個items,下一個item
的相關性。
是一個item embedding矩陣。
共享Item Embedding
為了減少模型尺寸及避免過擬合,用一個item embedding ,即:
顯式用戶建模
為了提供個性化推薦,當前主要有兩種方法:
- 學習顯式的用戶embedding表示用戶偏好(MF,FPMC,Caser)
- 考慮用戶之前的行為,通過訪問過的item的embedding推測隱式的用戶embedding
本文采用第二種方式,同時額外在最后一層插入顯式用戶embedding,例如通過加法實現。但是通過實驗發現增加顯式用戶embedding并沒有提升效果。。
3.5 網絡訓練
定義為時間步
的期望輸出:
用二元交叉熵損失作為目標函數:
3.6 復雜度分析
空間復雜度
總參數量為:
時間復雜度
主要是self-attention層和前饋網絡,占。但是因為self-attention層可以完全并行化,所以
也不是什么問題。實驗發現速度10倍于基于RNN和基于CNN的方法。
處理長序列
雖然通過實驗經驗性地驗證了本文方法的效率,但最終還是無法擴展到很長的序列。未來的工作可能有:
- 使用restricted self-attention『A time-restricted self-attention layer for asr』
- 將長序列切分為段『Personalized top-n sequential recommendation via convolutional sequence embedding』
3.7 討論
本文發現SASRec可以視為某種經典CF模型的泛化。
退化為已有模型
經過簡化SASRec可以視為FMC,FPMC,FISM。(這里感覺好牽強)
基于MC的推薦
本文解決了MC的問題(長序列)
基于RNN的推薦
本文解決了RNN的問題(并行計算,最大路徑長度)
4 實驗
實驗設計是為了回答下面4個問題:
- SASRec是否超過了當前包括基于CNN/RNN模型的方法,達到了SOTA
- SASRec架構中各種組件的影響是什么
- 訓練效率和擴展性如何
- Attention權重是否能學到有意義的模式,關于位置或item屬性
4.1 數據集
數據集劃分為3個部分。最后一次行為為測試集,倒數第二次行為為驗證集,剩下的為訓練集。測試時也用了驗證集的數據。
4.2 比較方法
將對比方法分為三類。
第一類為只考慮用戶反饋不考慮序列行為順序的常規推薦方法。包括PopRec,BPR
第二類為基于一階馬爾科夫鏈的序列推薦,考慮了最后訪問的一個item。包括FMC,FPMC,TransRec
第三類為深度學習方法,考慮之前幾個或全部的item。包括GRU4Rec,GRU4Rec+,Caser
4.3 實現細節
SASRec的默認版本,用了2個self-attention塊(b=2),經學習獲得的位置embedding,embedding層中的item embedding和預測層中的是共享的。優化器是Adam,學習率為0.001,batch_size=128,MovieLens-1M數據集的dropout比率為0.2,由于稀疏性其他數據集的比率為0.5。MovieLens-1M的最大序列長度n設置為200,其他數據集設置為50。粗略來看大概是每個用戶的平均行為數。
4.4 評估指標
采用兩種常見的Top-N指標,Hit Rate@10和NDCG@10。為了避免過重的計算量,對每個用戶隨機采樣100個負item,加上ground-truth item,對這101個item排序計算其指標。
4.5 推薦效果
這里回答了問題1。
效果如表3所示,發現非神經網絡方法(a-e)在稀疏數據集上表現好點,神經網絡方法(f-h)在密集數據集上表現更好。而本文方法在兩種數據集上表現都更好。
圖2分析了關鍵超參隱式維度的影響,發現本文方法
越大效果越好,對所有的數據集,當
達到滿意的效果。
4.6 剝離實驗
這里回答了問題2。默認方法和8個變種方法(d都是50)的效果如表4所示。
-
移除位置embedding
除了稀疏數據集Beauty,效果變差。這個變種也許適合稀疏數據集,這種情況下通常用戶序列都很短。
-
不共享Item Embedding
性能嚴重下降,有可能是因為過擬合
-
移除殘差連接
性能嚴重下降
-
移除dropout
dropout在稀疏數據集上更有效,也說明密集數據集上過擬合問題更少點
-
塊的個數
塊越多更適合于密集數據集
-
Multi-head
2個頭的效果比1個頭的稍微糟點,沒有像Transformer原文用那么多頭,因為d的維度只有50,不像Transformer有512,所以不適合分解為更小的子空間。
4.7 訓練效率和擴展性
從訓練速度和閉合時間兩方面來回答問題3。
序列越長,效果越好,如表5所示。
4.8 可視化Attention權重
這里回答問題4。
通過a和c的對比,發現模型在稀疏數據集上更傾向關注最近的item,而在密集數據集上對最近的item較少關注。這說明本文方法可以自適應的處理稀疏和密集數據集。
通過b和c的對比,說明位置embedding的影響,沒有它們attention權重基本上是均勻分布。
通過c和d的對比,說明模型的層次性,更高的層傾向于關注最近的位置。可能是因為第一個self-attention塊已經考慮了之前所有的item,所以第二個塊無需考慮更遠的位置。
總之,通過可視化可以說明self-attention機制是自適應的,有位置感知以及有層次性的。
七 小結
本文整個感覺其實就是將transformer的self-attention應用到推薦上來,沒有什么特別創新的地方,屬于應用型論文。以現在的觀點來看,好像很普通,不過考慮到transformer出來不久后本文工作就跟上了,這點還是很厲害的。感慨一下搞科研也得追熱點,而且不能只盯著自己那一塊東西,得看大領域的熱點。此外,通過查找作者的背景資料,根據作者過往產出成果,感覺本文應該不是坑,是可以借鑒應用的。
素質四連
要解決什么問題
序列推薦問題
用了什么方法解決
transformer的self-attention機制
效果如何
超過了基于馬爾科夫鏈,CNN/RNN的方法,速度也快很多
還存在什么問題
沒有特別創新的改造,就是應用了一下self-attention
算法背后的模式和原理
拿來主義,將不同領域的方法工具拿來用,針對要解決的具體問題細致的調參
八 補充
同一天在arXiv上發表的AttRec:Next Item Recommendation with Self-Attention