事半功倍:推荐系统Pre-train预训练方法
S3-Rec: Self-Supervised Learning for Sequential Recommendation with Mutual Information Maximization
作者:十方,公眾號:煉丹筆記該模型解決了什么問題?
同樣是序列化建模,為什么S3-Rec說自己要比其他的效果好?該文指出,現有的序列化推薦模型使用target item來計算loss的,例如阿里是用歷史交互序列,預測下一個點擊/轉化的商品。這樣有什么問題?一個是數據過于稀疏,還有就是上下文信息沒有充分被利用。因此S3-Rec引入了自監督學習去解決序列化建模所面臨的問題。
這篇論文的自監督學習簡單來說就是用序列pretrain,然后再用target item做fine-tuning。只是因為推薦場景的特殊性,這篇論文設計了4個自監督學習目標,充分利用序列,屬性,自序列等信息,學到最好的embedding表達。
模型架構圖
直接看這張圖,估計多半是懵逼的。說實話,圖畫的雖然復雜,實際模型其實是相當簡單的。上面4個虛線框,就是4個pretrain的任務。分別是以下4個目標:
- 相關屬性學習
- masked item預測
- masked 屬性預測
- item段預測
說到pretrain,大家會想到啥?沒錯,就是bert。這篇論文原封不動的把bert模型搬了過來,但是改變了預訓練的方式。十方先簡要帶大家回顧一下bert的結構。
bert的每一層,可以簡要概括為兩個部分,MultiHead-Attention和FFN層。MultiHead,顧名思義,大家就理解為self-attention做了好幾次,做了幾次就有幾個head,最后concat即可。FFN就是前饋神經網絡,因為attention提取的是線性特征,需要FFN去挖掘非線性的表達。我們看下公式的表達:
公式很簡單,也不是本文重點,不贅述,實在不記得公式含義的,直接度娘bert即可,接下來我們著重介紹4個預訓練任務。
挖掘item和屬性的關系
我們從上往中間看,i1~in就是item序列,item embedding就是查embeding詞表,bidirectional Self-attention就是bert,總值一個item id序列,到了item-Attribute MIM后,就是一個經過attention變換過的embedding序列。然后我們在從下往上看,Ai1~Ain是i1~in的屬性,模型要學的東西很簡單,就是這個屬性屬不屬于這個item,負樣本隨機負采樣一些屬性即可。loss函數如下:
論文里f函數用的不是點積,而是下面這個公式:
Masked 預測
注意,這一節是兩個目標,十方放一起講,因為實在太類似了。看過bert的讀者肯定深刻理解什么是masked,沒看過bert的,大家就理解為完形填空。在輸入側,我隨機挑選一個item,把它的id置為default,然后attention后,相應位置的向量,用來預估它原本的itemid以及屬性。
預測itemid公式如下:
預測屬性公式如下:
itemid和屬性的負樣本都是隨機負采樣。第一個任務充分挖掘了item和上下文的關系,第二個任務挖掘了屬性和上下午的關系。
子序列關系挖掘
這個就特別有意思了,論文認為,只mask一個item,它的上下文并不能表達這個item。比如你買了個switch,完全是送人,但是你的上下文和游戲一點關聯都沒有,因此如果mask掉一個連續的子序列,那上線文多少都會和這個序列相關吧?;谶@個思想,就有了segment-mask,把序列的一小段mask后,用attention后對應序列的embedding,去預估該子序列的概率,負樣本也是隨機采樣些子序列,公式如下:
結語
最后,基于以上4個pretrain任務,我們做最后的finetuning。論文里用了pairwise rank loss:
實驗當然是bert秒殺所有。
總結
以上是生活随笔為你收集整理的事半功倍:推荐系统Pre-train预训练方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜索推荐炼丹笔记:酒店搜索位置偏差的边际
- 下一篇: NN如何在表格数据中战胜GBDT类模型