總結下自己做過的深度召回模型

作者 | 雨下

整理 | NewBeeNLP

大家好,這裏是 NeeBeeNLP。今天分享學弟『雨下』的深度召回模型總結。他從畢業後,一直在公司裏做召回模型的相關工作,嘗試過大量的召回模型,並進行了大量的線上 AB 實驗驗證了這些這些模型上線的效果。感興趣的同學可以文末下載論文了解具體的模型方法。

一、召回模型簡述

推薦系統的架構一般大致分爲召回和排序(包含粗排、精排)兩個步驟,如圖一所示。召回在英文中經常被寫成 “matching” 或者“candidate generation“。

召回的主要任務是從大量的後續集中篩出一部分數據,然後輸入到排序中。召回主要分爲非模型召回和模型召回。非模型召回往往是非個性化的召回方法,比如熱點召回等。模型召回現在大多數是深度學習的方法,因爲引入了用戶特徵,因此是個性化的。

現在的推薦系統都採用多路召回,即包含多個召回方法。每個召回方法分別取出一定量的數據,合併後一起輸入到排序中。採用多路召回的好處可以保證每種類型的數據都可以被推薦出來,比如熱點、個性化、最近點擊、關注等。召回中也可以包含多種深度召回模型。因爲召回模型面對的是所有的候選集,計算量有限,因爲模型能力也有限。多種不同類型的召回模型可以彌補彼此的缺陷,保證儘可能地取出用戶感興趣的數據。

圖 1:推薦流程

二、YoutubeDNN

論文《Deep Neural Networks for YouTube Recommendations》是谷歌團隊發表的。論文提出了一種召回和一種排序模型。召回模型如圖 2 所示。

模型的輸入是用戶的特徵:看過的視頻、搜索過的詞條、年齡、性別等。通過神經網絡產生用戶向量。

圖 2: YoutubeDNN 模型

三、經典雙塔模型

另一類經典的召回模型是雙塔模型,其論文見《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》,方法見圖 3。

雙塔是指產生用戶和 item 的向量的兩個神經網絡,這兩個神經網沒有交互。用戶側的神經網絡輸入用戶特徵,item 側的神經網絡輸出 item 的用量。產生的向量先 L2 normalization 再點積。計算損失函數時,用了一種 batch 內的交叉熵。對於一個 batch 的數據,一個樣本中只有一個用戶與對應一個 item 是正樣本,其它 item 都與這個用戶匹配成負樣本。

Batch 內的交叉熵的一個問題是:熱門的 item(點擊次數較多的)當成正樣本的概率較大,因爲更容易被召回。但是熱門的 item 往往不能反映用戶的興趣。

因此作者提出了一個矯正的方法。在計算用戶和 item 的相似度時會減去 log(item 被點積的頻率)。其實這樣計算往往可以增大用戶對冷門 item 的相似度,減小對熱門 item 的相似度。我也曾試過不加頻率矯正,發現線上和線下指標都有明顯的下降。

雙塔模型時召回中最常用的方法,後續也有很多對雙塔改進的方法。雙塔模型應該是現在召回模型中應用最廣的模型了。現有也有公司將雙塔模型用於粗排中。

圖 3: 雙塔模型

四、多向量召回

之前的深度召回模型給每個用戶學習一個向量。然而,一個向量很難反映用戶的多個興趣。最近,由很多公司提出給用戶學習多個興趣向量。每個興趣向量對應於用戶的一種興趣。在線上召回時,每個興趣向量獨立取出相同數量的 item。

一個比較流行的多向量模型時 MIND,論文《Multi-Interest Network with Dynamic Routing for Recommendation at Tmall》。該方法時阿里巴巴團隊提出來的。模型框架見圖 4。

該方法首先提取出 N 個用戶點擊過的 item,每個 item 都帶有 ID 和一些附屬特徵。特徵通過 embedding 後,再通過 pool 用一個單維的向量表示一個 item。N 個 item 的向量經過膠囊網絡變爲少量的興趣向量。興趣向量與個性化向量(other features 經過 embedding 層)串聯,再經由幾層神經網絡輸入少量的用戶多興趣向量。

膠囊網絡可以視爲一個聚類的過程,將 N 個 item 向量聚成少量幾個向量。在訓練時,會用 target item 的向量與興趣向量做 attention,然後再將多個興趣向量加權聚合成一個興趣向量,之後再計算 sampled softmax loss。

圖 4: MIND 模型

另一個多興趣向量召回模型是 comirec(Controllable Multi-Interest Framework for Recommendati),其方法如圖 5 所示。在計算用戶的多興趣向量時,該算法提出了兩種方法:一種是膠囊網絡。MIND 的膠囊網絡的投影矩陣在多個膠囊體中是公用的,而 comirec 是不共用的。另一個是 self-attention 方法,通過 attention 計算每個 item 向量到特定興趣向量的權重,然後加權聚合 item。在召回時,作者還提出了一種增強多樣性的平衡函數,即統計 item 的不同類別數量。

我從線上實驗的指標看,comirec 與 MIND 並無太大區別。

圖 5: comirec 模型

另一個最新的多向量召回模型是微軟團隊提出的 Octopus(Octopus: Comprehensive and Elastic User Representation for the Generation of Recommendation Candidates),該方法可以爲不同用戶學習不同數量的興趣向量。圖 6 是該模型的框架圖。

該方法首先會初始化多個 channel 向量。爲了讓每個興趣向量召回的 item 差異大,Octopus 會在訓練時保證 channel 向量之間的正交性。Octopus 會計算 user history 中的每個 item 與 channel 向量的 attention 權重,並將 item 放入到權重最大的 channel 裏面,該 channel 視爲被激活了。在每個被激活的 channel 裏面,通過 attention 權重聚合 item 的向量。模型只輸出聚合後的 item 向量。channel 激活的個數就是用戶興趣向量的個數。Octopus 還提出了兩種方法讓每個興趣向量召回不同的 item 數量。

線上實驗時,Octopus 的點擊率和召回的多樣性高於 MIND,但是曝光量低於 MIND。

圖 6:Octopus 模型

SINE(Sparse-Interest Network for Sequential Recommendation)也是最近被提出的多向量召回模型。與 Octopus 相似,SINE 會先初始化多個 channel 向量(論文中叫做 conceptual prototypes),在訓練時也保證了 channel 向量的正交性。不同的是,SINE 會通過 self-attention 選出最大的 K 個向量,因此每個用戶的輸出的興向量個數是相同的。線下實驗時,SINE 結果沒有 Octopus 好,因此最終沒有上線該模型。

五、Transformer 召回

最近開始探索如何用 transformer 結構做序列化召回模型。SASRec(Self-Attentive Sequential Recommendation )是一個比較早的應用 transformer 結構做推薦的,結構如圖 7 所示。

用戶的點擊 item 會按照時間順序排列,從左往右。序列化的 item 經過 embedding 層後輸入到 self-attention 層。每個 item 只會與時間在前面的 item 計算注意力權重。經過 transformer 結構,也就是多個 block,每個 item 的輸出向量用於預測下一個點擊的 item。最後一個 item 的 item 向量用於預測 target item。線上召回時也是用最後一次點擊的 item 向量。

線上實驗時,SASRec 有不錯的曝光量和高的點擊率。

圖 7: SASRec 模型

Bert4Rec(BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer)將 self-attention 的計算由從左到右變爲雙向的順序,並且用了 bert 中 mask 的訓練方法。線上時我也嘗試使用了雙向的 self-attention 計算,但沒有取得顯著的效果。

參考文獻

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/EsGMlUHWUp_DTOLdTGlJ3Q