之前有一段時間做過雙塔的召回模型[1],線上各個指標有了不錯的提升。目前雙塔模型也是被各大公司鐘愛的召回模型。對主流召回模型的分享整理在:總結下自己做過的深度召回模型
雙塔模型在訓練時是對一個batch內樣本訓練。一個batch內每個樣本 (user和item對)為正樣本,該user與batch內其它item為負樣本。這樣訓練的方式可能有以下問題:
負樣本的個數不足。訓練時負樣本個數限制在了batch內樣本數減1,而線上serving時需要在所有候選集中召回用戶感興趣的樣本。模型只能從當前batch內區分出batch內正樣本,無法很好地從所有候選集中區分正樣本。
未點擊的item沒有做負樣本。由于batch內的item都是被點擊過的,因此沒有被點擊item無法成為負樣本,在線上serving容易它們被召回出來。一種解決方法是之前沒被點擊過的item不導出到候選集中,然而這樣存在的問題是召回的item很多是之前點擊的熱門item,而很多冷門的item沒有機會召回。
最近,有兩篇文章提出了雙塔模型擴量負樣本的方法。這兩種方法我也曾嘗試過,線下線上指標也有一定的提升。
一、Two Tower Model
再介紹其它方法之前,先回顧一下經典的雙塔模型建模過程。
用 表示雙塔模型計算的user 和item 的相似性:
是表示user塔,輸出user表示向量; 是item,輸出item表示向量。最后相似性是兩個向量的余弦值。batch內概率計算公式為:表示一個batch的意思。損失函數是交叉熵。
作者在計算user和item的相似度時,用了兩個優化方法:
。 可以擴大相似度范圍,擴大差距。
。 是item 在隨機樣本中被采樣的概率,也就是被點擊的概率。
關于優化2的解釋有很多。論文中說熱門item出現在batch內概率較大,因此會被大量做負樣本。另一種解釋是增加對冷門item的相似度。相比熱門item,冷門item更能反映用戶興趣。
圖1反映了雙塔模型的batch采樣過程。query也可以表示user。我們采樣一個batch的user和對應正樣本的item,計算各自的embedding后,通過點乘得到logits(B*B)的矩陣。label矩陣是一個單位矩陣。logit矩陣與label矩陣的每對行向量一起求交叉熵。
圖1:雙塔模型batch采樣
二、Mixed Negative Samping(MNS)
MNS[2]與雙塔模型[1]出自谷歌團隊的同一批作者。用一個batch數據訓練時,MNS還會在所有的數據集中采樣出 個item。這樣可以讓所有的item參與到訓練中,一些曝光未點擊的item也會當作負樣本。同時,雙塔模型中使用的 等于訓練樣本中的頻率加上所有數據集中的頻率分布。概率公式重新定義如下:
作者在這里只對負樣本的相似性減去了頻率的log值。
MNS的batch采樣方法見圖2。最終計算的logits和label矩陣是一個B*(B+B')維的。其實就是在圖1展示的基礎上再增加B'列。logits的最后B'列是user與B‘內的item計算的相似性,label的最后B'列是全0矩陣。
相比于每個樣本都隨機采樣出一定量的負樣本,為每個batch都采樣出B‘個負樣本的不僅有先前雙塔模型的計算效率,也緩和負樣本不足的問題,并且讓每個樣本均有機會做負樣本。
圖2:MNS的batch采樣
三、Cross Batch Negative Samping(CBNS)
CBNS[2]是清華大學和華為合作提出的方法。文中提到,雙塔模型的計算優勢在于利用了batch內的負樣本,減小的計算量。如果我們想擴大batch內樣本個數,加大負樣本個數,需要很多的內存。因此,作者提出一個使用之前訓練過的item作為負樣本的方法。
神經網絡訓練達到一定輪數后,會對相同的樣本產生穩定的向量。作者在論文中定義了這個想法。因此把之前訓練過的item作為當前訓練的負樣本時,模型只需要把這些item的向量拿過來使用,不需要再輸出到神經網絡中產生新的向量,畢竟這兩種向量的差距較小。
作者使用了FIFO(先進先出)隊列,item塔輸出向量時,會放進FIFO中。當warm-up training達到一定的輪數后,訓練模型時,會從FIFO拿出一批向量作為負樣本的向量。這樣做不僅減少了計算量,在擴充負樣本的時候也減少了內存的使用。計算公式與MNS差別不大:
也就是內容一中的優化2。B'在這里是從FIFO中取出的一批向量。
圖3展示了CBNS與只用batch內負樣本的不同。CBNS維持了一個memory bank。在訓練時,會從里面拿出一定量的向量。
然而,CBNS的負樣本只有點擊過的樣本,未點擊的樣本無法作為負樣本。
圖3:CBNS采樣方法
審核編輯:郭婷
-
神經網絡
+關注
關注
42文章
4798瀏覽量
102439 -
fifo
+關注
關注
3文章
397瀏覽量
44516
原文標題:雙塔模型如何選擇負樣本?
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
海康威視發布多模態大模型文搜存儲系列產品
EastWave應用:負折射現象實時演示
【「基于大模型的RAG應用開發與優化」閱讀體驗】+大模型微調技術解讀
云端語言模型開發方法
RNN與LSTM模型的比較分析
常見AI大模型的比較與選擇指南
AI大模型的性能優化方法
氣密性檢測:為什么在負壓測試中泄漏量是正值,什么時候出現負值

評論