文章發表在2020年的頂會RecSys,提出了一個融合物品相似度和自注意力機制的序列推薦模型FISSA。FISSA融入了SASRec模型,將其看作是提取用戶行為的局部表示(local representation,短期興趣),又加入了對全局偏好(global preferences,長期興趣)的提取。並且,提出一種類似LSTM單元的門控函數,將兩者進行有效的融合。
「原文地址」:https://dl.acm.org/doi/10.1145/3383313.3412247
有意思的是,給我推薦了上次發表在RecSys的論文SSE-PT。
本文約3.0k字,預計閱讀10分鐘。
概要本篇論文拋出了當下序列推薦模型中兩個重要的問題:
對於很多序列推薦模型中,例如SASRec、Caser,它們太過關注於用戶的局部偏好,也就是短期興趣,而忽略了用戶的長期興趣。而向AttRec、STAMP等模型,建立長期興趣(作者將其稱為全局、靜態的偏好)的方法太過簡單,低估了其作用;作者認為,現在絕大多數模型,都認為能夠從用戶的歷史行為中完全能夠捕捉到用戶當前興趣,這是一種理想主義。在現實中,用戶的意圖往往是很難進行確定的,特別是處於一個長期行為(電影、長時間的一個購物記錄),而不是一個短期行為(聽音樂)。判斷一個新產品是否能吸引用戶的正確方法是,考慮它如何能引起用戶不同部分的興趣(即短期興趣和長期興趣)。【注】談一談我個人的一些看法,關於第1點,其實現在很多序列推薦模型都開始將用戶行為序列建模分為兩個部分:短期偏好和長期偏好,但是對於長期偏好的建模確實過於簡單【嘗試過通過self-attention來提取長期偏好(平均),不過效果一般,短期偏好才是yyds】。第2點,等於是得到兩個興趣後,如何去合併?不錯的方法是分配不同的權重,而權重是通過計算候選物品與興趣的相似程度。其實DIN模型就是這樣做的(通過attention),但是他是CTR模型,如果放到召回(Top-K)中,會影響模型預測效率,應該很難使用FAISS庫等可以計算鄰近。
因此,作者提出了FISSA模型有效的解決上述兩個問題。
模型結構FISSA模型結構清晰,分為三個模塊,局部表示學習(Local Representation Learning)、全局表示學習(Global Representation Learning)、門控函數(Gating)。模型結構如下所示:
定義用戶集合
局部表示學習第一部分是採用self-attention的局部表示學習模塊,並沒有什麼創新,不過作者自己也指出了,本篇論文不要過多的關注局部表示模塊,因為大家都已經做得很好了,所以主要來看全局表示學習是如何做的。這裡我簡單闡述下:
作者規定輸入序列為用戶
【注】與Transformer提供的方法不同,但其實在很多使用self-attention網絡的序列推薦模型中都使用上述方法,我經過實驗,確實比Transformer提供的positional encoding方法效果更好。
接下來就是將通過多個self-attention block(SABs):
對於單個SAB:
其中
最終,通過多個SABs,其中輸出向量
【注】這裡稍微有點歧義,SASRec也是類似的寫法,看過兩篇論文以及他們的原始碼我才能真正理解為啥這裡輸出的是一個向量。我簡單進行下解釋:
❝首先,SASRec、FISSA的輸入是一個用戶的整個歷史行為,即在訓練中能獲得的長度為
❞因此,對於通過SABs得到
關於SABs的數量,作者也提到了,如果為1,那麼可以來捕獲長期依賴,但是對於2及以上,則更關注於最近的信息。
全局表示學習第二部分是全局表示學習模塊,用來提取用戶的長期偏好,作者先是通過FISM(傳統的推薦模型)來引入。在FISM中,用戶
對下一個交互物品的預測分數為:,這可以理解為用戶
作者認為不同的歷史物品應該具有不同的權重。但如何來分配權重呢?這裡作者採用了attntion mechanism,但是比較有意思的是模型中的query是可學習的
其中
另外,作者加入了dropout layer:
因此最終得到的全局表示矩陣
【注】這裡得到
聯合---物品相似度門控第三部分是局部表示與全局表示的融合。如何聯合局部表示和全局表示,作者早期分別做了求和(summation)和拼接(concatenation)的測試,結果證明求和效果更好,但作者認為這些組合方法仍然只是基於歷史信息,這可能是理想化的。
為了解決序列推薦中用戶意圖不確定性的問題,受「神經注意物品相似度(NAIS)」 的啟發,作者提出一個item similarity gating模塊,通過建模候選物品
作者有如下定義:
Gating模塊中,輸入有三種item,即候選物品