論文:
論文題目:《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》
地址:https://dl.acm.org/doi/pdf/10.1145/3298689.3346996
最近換了工作+旅游都沒來得及寫一下博客赏胚,近期的工作一直在做向量召回+負采樣的活甜熔,今天我們來看一下谷歌這篇工業(yè)風十足的論文吧顾腊,看看有什么借鑒的地方。
一 萍诱、背景
工業(yè)界的召回一直都是圍繞著雙塔+負采樣兩個問題展開的稼钩,之前的文章里也說過了具帮,召回是樣本的藝術,由于召回需要從整個樣本集里面去選取汪厨,所以需要讓模型開開眼見見世面,所以需要有更多的負樣本讓模型能夠區(qū)分出那些是用戶不喜歡的劫乱,哪些是用戶可能喜歡的,注意狭吼,只要是可能喜歡的,召回模型就要選出來刁笙,這里跟排序是不一樣的,排序模型是一定要選出用戶真正喜歡的疲吸,而召回只需要選出用戶可能喜歡的,其他的工作只需要交給后面的粗排跟精排就可以了摘悴。
一般的雙塔模型長這樣:
通常是用兩個塔分別去建模user和item舰绘,然后在模型的后面計算內積,最后用真實的label計算loss捂寿。
回到本文口四,本文主要的工作是針對負采樣的修正,在這里我要先提一下一個召回中負采樣的方法:
1.batch隨機負采樣
2.batch內其他樣本作為負樣本者蠕,也叫batch softmax
3.batch隨機+hard sample+部分曝光未點擊
首先,我們來分析下以上幾個負采樣的方法掐松,第1個踱侣,完全隨機是不太可能的,因為在推薦里面畢竟是有熱門商品跟冷門商品的大磺,完全隨機的話抡句,有可能就是熱門樣本被采樣太多了,導致在召回的時候把熱門商品打壓來杠愧,對于電商領域來說是不能這么做的待榔,因為熱門的item是可以帶來很大的gmv的;第2個,問題跟第一個一樣锐锣,batch內的其他樣本同樣會有select bias的問題腌闯;第3個是工業(yè)界里一般的做法,后面兩種樣本主要是為了讓模型真正的能區(qū)分困難樣本雕憔。
谷歌這篇論文針對的是第2點來展開論述的姿骏,針對負采樣問題連同雙塔模型一起優(yōu)化,讓我們一起來看看吧斤彼。
二 分瘦、模型以及修正負采樣
2.1 預定義和batch softmax optimization
表示user/query,表示item琉苇,r是label嘲玫,經過雙塔影射到同一空間后:
這時候我們就可以計算內積來表示他們之間的match程度了:
數(shù)據(jù):
一個用T個訓練樣本,如果我們使用softmax多分類損失:
其中:
這時候并扇,可以看到我們之前在w2v中類似的情況了去团,由于M太大了,導致上面這個式子的計算效率十分低拜马,所以需要對loss函數(shù)進行改進渗勘,改成了我們在之前所說的batch softmax:
就是在一個batch內,把其他樣本的item當作負樣本來進行softmax俩莽。
但是,這么做還有個問題取刃,我們既然進行了采樣璧疗,那么意味著高頻的item容易被采樣成負樣本馁龟,所以還是要進行修正的:
其中s的計算變成了這樣:
其中是item j被采樣的概率却音,最終損失函數(shù)變成了:
訓練的整體過程如下:
論文里對于r的解釋是這樣系瓢,這里r不是0和1夷陋,對于沒有點擊的樣本來說骗绕,r是0爹谭,對于點擊的item,r是播放完成度东揣,也就是說r可能是小于1的嘶卧。
2.2 采樣修正
前面我們也說了凉袱,在batch內負采樣會導致熱門item容易成為負樣本专甩,所以需要進行采樣修正,具體的做法是棺耍,維護兩個表A和B蒙袍,其中A保存item上一次被采樣到的step害幅,B保存item的采樣頻率岂昭,你可能聽的有點云里霧里了邑遏,在詳細介紹一下吧枢里。
由于在一個推薦系統(tǒng)中奥洼,新item是會經常出現(xiàn)的,所以使用hash函數(shù)h把每一個item進行映射,以防止詞表大小固定帶來的問題爱态,我們的A表會保存h(item i)上一次出現(xiàn)的step,當未來的某個batch采樣到item i的時候痘煤,就會計算當前step - A表中的h(item i)的step,然后保存到B表中调窍,同時更新A表的step,這時候我們就可以使用1/B(h(item i))來表示item i被采樣的概率了。
注意到,我們之前更新B表的方式是easy版本的雪营,因為有可能hash函數(shù)的原因導致更新B表的方式被其他item影響了,所以采用了類似于指數(shù)加權平均的思想來更新B表:
具體的算法過程如下:
這樣還不夠摄闸,因為由于H<H,所以可能有很多item被映射到同一個值上面,這就會導致A表中的值會趨近于最近上一次更新step的那個item芦拿,所以導致當前step-A中的值變小裙盾,然后導致B表的值變小徘熔,這就讓item的采樣頻率變大了,顯然是不合理的,所以需要設計好不同的哈希函數(shù)实蔽,論文中是采用了多個哈希函數(shù)女坑,然后計算B的時候選取最大的值碉就,具體過程如下:
2.3 模型結構和特征
2.3.1特征
1.seed features,我理解這部分是用戶正在觀看的視頻的特征碉熄,表征用戶當前時刻的興趣點
2.channel id應該不是頻道的意思锈津,可以點開toutube然后點擊一個創(chuàng)作者的頭像,會發(fā)現(xiàn)channel id是創(chuàng)作者的id
3.user features性誉,就是一些用戶以前的video點擊序列艾栋,以及以前點擊過的channel id序列蛉顽,以及一些user profile特征
4.item側携冤,這些特征就是尋常的item側特征
2.3.2 l2 正則
為了讓softmax更明顯扣猫,會對內積的結果進行放大翘地,實際上工業(yè)界確實都這么做:
四衙耕、實驗結果
首先看一下hash函數(shù)的對比實驗:
然后看一下選值的對比實驗:
離線實驗recall上的對比:
總結一下這篇論文,還有很多我沒理解的地方,希望可以進一步思考:
1. 為什么要進行l(wèi)2正則
2.item emb要共享嘛
3.損失函數(shù)是否需要對比下hinge loss和nce loss或者說sample softmax loss
4.特征序列的處理方式
5.初坠。碟刺。薯酝。