之前有一段時(shí)間做過(guò)雙塔的召回模型[1],線上各個(gè)指標(biāo)有了不錯(cuò)的提升。目前雙塔模型也是被各大公司鐘愛(ài)的召回模型。對(duì)主流召回模型的分享整理在:總結(jié)下自己做過(guò)的深度召回模型
雙塔模型在訓(xùn)練時(shí)是對(duì)一個(gè)batch內(nèi)樣本訓(xùn)練。一個(gè)batch內(nèi)每個(gè)樣本 (user和item對(duì))為正樣本,該user與batch內(nèi)其它item為負(fù)樣本。這樣訓(xùn)練的方式可能有以下問(wèn)題:
負(fù)樣本的個(gè)數(shù)不足。訓(xùn)練時(shí)負(fù)樣本個(gè)數(shù)限制在了batch內(nèi)樣本數(shù)減1,而線上serving時(shí)需要在所有候選集中召回用戶感興趣的樣本。模型只能從當(dāng)前batch內(nèi)區(qū)分出batch內(nèi)正樣本,無(wú)法很好地從所有候選集中區(qū)分正樣本。
未點(diǎn)擊的item沒(méi)有做負(fù)樣本。由于batch內(nèi)的item都是被點(diǎn)擊過(guò)的,因此沒(méi)有被點(diǎn)擊item無(wú)法成為負(fù)樣本,在線上serving容易它們被召回出來(lái)。一種解決方法是之前沒(méi)被點(diǎn)擊過(guò)的item不導(dǎo)出到候選集中,然而這樣存在的問(wèn)題是召回的item很多是之前點(diǎn)擊的熱門item,而很多冷門的item沒(méi)有機(jī)會(huì)召回。
最近,有兩篇文章提出了雙塔模型擴(kuò)量負(fù)樣本的方法。這兩種方法我也曾嘗試過(guò),線下線上指標(biāo)也有一定的提升。
一、Two Tower Model
再介紹其它方法之前,先回顧一下經(jīng)典的雙塔模型建模過(guò)程。
用 表示雙塔模型計(jì)算的user 和item 的相似性:
是表示user塔,輸出user表示向量; 是item,輸出item表示向量。最后相似性是兩個(gè)向量的余弦值。batch內(nèi)概率計(jì)算公式為:表示一個(gè)batch的意思。損失函數(shù)是交叉熵。
作者在計(jì)算user和item的相似度時(shí),用了兩個(gè)優(yōu)化方法:
。 可以擴(kuò)大相似度范圍,擴(kuò)大差距。
。 是item 在隨機(jī)樣本中被采樣的概率,也就是被點(diǎn)擊的概率。
關(guān)于優(yōu)化2的解釋有很多。論文中說(shuō)熱門item出現(xiàn)在batch內(nèi)概率較大,因此會(huì)被大量做負(fù)樣本。另一種解釋是增加對(duì)冷門item的相似度。相比熱門item,冷門item更能反映用戶興趣。
圖1反映了雙塔模型的batch采樣過(guò)程。query也可以表示user。我們采樣一個(gè)batch的user和對(duì)應(yīng)正樣本的item,計(jì)算各自的embedding后,通過(guò)點(diǎn)乘得到logits(B*B)的矩陣。label矩陣是一個(gè)單位矩陣。logit矩陣與label矩陣的每對(duì)行向量一起求交叉熵。
圖1:雙塔模型batch采樣
二、Mixed Negative Samping(MNS)
MNS[2]與雙塔模型[1]出自谷歌團(tuán)隊(duì)的同一批作者。用一個(gè)batch數(shù)據(jù)訓(xùn)練時(shí),MNS還會(huì)在所有的數(shù)據(jù)集中采樣出 個(gè)item。這樣可以讓所有的item參與到訓(xùn)練中,一些曝光未點(diǎn)擊的item也會(huì)當(dāng)作負(fù)樣本。同時(shí),雙塔模型中使用的 等于訓(xùn)練樣本中的頻率加上所有數(shù)據(jù)集中的頻率分布。概率公式重新定義如下:
作者在這里只對(duì)負(fù)樣本的相似性減去了頻率的log值。
MNS的batch采樣方法見圖2。最終計(jì)算的logits和label矩陣是一個(gè)B*(B+B')維的。其實(shí)就是在圖1展示的基礎(chǔ)上再增加B'列。logits的最后B'列是user與B‘內(nèi)的item計(jì)算的相似性,label的最后B'列是全0矩陣。
相比于每個(gè)樣本都隨機(jī)采樣出一定量的負(fù)樣本,為每個(gè)batch都采樣出B‘個(gè)負(fù)樣本的不僅有先前雙塔模型的計(jì)算效率,也緩和負(fù)樣本不足的問(wèn)題,并且讓每個(gè)樣本均有機(jī)會(huì)做負(fù)樣本。
圖2:MNS的batch采樣
三、Cross Batch Negative Samping(CBNS)
CBNS[2]是清華大學(xué)和華為合作提出的方法。文中提到,雙塔模型的計(jì)算優(yōu)勢(shì)在于利用了batch內(nèi)的負(fù)樣本,減小的計(jì)算量。如果我們想擴(kuò)大batch內(nèi)樣本個(gè)數(shù),加大負(fù)樣本個(gè)數(shù),需要很多的內(nèi)存。因此,作者提出一個(gè)使用之前訓(xùn)練過(guò)的item作為負(fù)樣本的方法。
神經(jīng)網(wǎng)絡(luò)訓(xùn)練達(dá)到一定輪數(shù)后,會(huì)對(duì)相同的樣本產(chǎn)生穩(wěn)定的向量。作者在論文中定義了這個(gè)想法。因此把之前訓(xùn)練過(guò)的item作為當(dāng)前訓(xùn)練的負(fù)樣本時(shí),模型只需要把這些item的向量拿過(guò)來(lái)使用,不需要再輸出到神經(jīng)網(wǎng)絡(luò)中產(chǎn)生新的向量,畢竟這兩種向量的差距較小。
作者使用了FIFO(先進(jìn)先出)隊(duì)列,item塔輸出向量時(shí),會(huì)放進(jìn)FIFO中。當(dāng)warm-up training達(dá)到一定的輪數(shù)后,訓(xùn)練模型時(shí),會(huì)從FIFO拿出一批向量作為負(fù)樣本的向量。這樣做不僅減少了計(jì)算量,在擴(kuò)充負(fù)樣本的時(shí)候也減少了內(nèi)存的使用。計(jì)算公式與MNS差別不大:
也就是內(nèi)容一中的優(yōu)化2。B'在這里是從FIFO中取出的一批向量。
圖3展示了CBNS與只用batch內(nèi)負(fù)樣本的不同。CBNS維持了一個(gè)memory bank。在訓(xùn)練時(shí),會(huì)從里面拿出一定量的向量。
然而,CBNS的負(fù)樣本只有點(diǎn)擊過(guò)的樣本,未點(diǎn)擊的樣本無(wú)法作為負(fù)樣本。
圖3:CBNS采樣方法
審核編輯:郭婷
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100995 -
fifo
+關(guān)注
關(guān)注
3文章
389瀏覽量
43796
原文標(biāo)題:雙塔模型如何選擇負(fù)樣本?
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論