文 | 石塔西
源 | 夕小瑤的賣(mài)萌屋
盡管BERT為代表的預(yù)訓(xùn)練模型大肆流行,但是身處工業(yè)界才會(huì)知道它落地有多難,尤其是QPS動(dòng)輒幾百的在線(xiàn)推薦、搜索系統(tǒng),哪怕在大廠(chǎng)也很難在線(xiàn)上系統(tǒng)見(jiàn)到它們。
今天就想反其道而行之,談?wù)劰I(yè)界搜索、推薦、廣告這類(lèi)核心場(chǎng)景中落地能力最強(qiáng)的算法(之一):因子分解機(jī)(FM)。我不敢說(shuō)它是最簡(jiǎn)單的(FM的確很簡(jiǎn)單),但是作為一個(gè)推薦算法調(diào)參工程師,掌握FM一定是性?xún)r(jià)比最高的。我推崇FM算法的原因,有以下三點(diǎn):
功能齊全
眾所周知,推薦算法有三個(gè)應(yīng)用領(lǐng)域:召回、粗排、精排。推薦算法千千萬(wàn),但是有的算法只能用于召回,有的算法只能用于排序。像FM這樣實(shí)現(xiàn)三個(gè)領(lǐng)域全覆蓋的多面手,目前為止,孤陋寡聞的我尚不知道有第二個(gè)。但是需要強(qiáng)調(diào)的是,我們不能只訓(xùn)練一個(gè)FM排序模型 ,然后直接拿這個(gè)排序模型用于召回。盡管都是基于FM算法,但是FM召回與排序,有以下不同:
使用的特征不同
FM召回,由于未來(lái)要依賴(lài)Faiss進(jìn)行線(xiàn)上檢索,所以不能使用user與doc的交叉特征。只有如此,我們才能獨(dú)立計(jì)算user embedding與doc embedding
FM排序,則沒(méi)有這方面的限制,可以使用user與doc的交叉特征。是的,你沒(méi)看錯(cuò)。因?yàn)镕M所實(shí)現(xiàn)自動(dòng)二階交叉,僅能代表“共現(xiàn)”。但是user與doc之間還有其他形式的交叉,比如user tag與doc tag之間的重合度,喂入這樣的交叉,對(duì)于排序性能提升,仍然有很大幫助。
使用的樣本不同
訓(xùn)練FM做排序時(shí),必須使用“曝光未點(diǎn)擊”這樣的“真負(fù)”樣本。
訓(xùn)練FM做召回時(shí),起碼不能只使用“曝光未點(diǎn)擊”做負(fù)樣本。大部分的負(fù)樣本必須通過(guò)隨機(jī)采樣得到。個(gè)中原因見(jiàn)我的文章《負(fù)樣本為王:評(píng)Facebook的向量化召回算法》。
使用的Loss不同
FM排序時(shí),由于負(fù)樣本是真實(shí)的,可以采用CTR預(yù)估那樣的point-wise loss
FM召回時(shí),由于負(fù)樣本是隨機(jī)采樣得到的,存在一定的噪聲,最好采用BPR, hinge這樣的pair-wise loss。
性能優(yōu)異
推薦系統(tǒng)的兩大永恒主題,“記憶”與“擴(kuò)展”,F(xiàn)M也能實(shí)現(xiàn)全覆蓋。
FM存在一階項(xiàng),實(shí)際就是LR,能夠“記憶”高頻、常見(jiàn)模式
FM存在feature embedding。如我在《無(wú)中生有:論推薦算法中的Embedding思想》據(jù)說(shuō),Embedding是提升推薦算法“擴(kuò)展性”的法寶。FM通過(guò)feature embedding,能夠自動(dòng)挖掘低頻、長(zhǎng)尾模式。在這一點(diǎn)上,基于embedding的二階交叉,并不比DNN的高階交叉,遜色多少。
便于上線(xiàn)
現(xiàn)在深度學(xué)習(xí)是推薦領(lǐng)域的寵兒,LR/FM/GBDT這樣的傳統(tǒng)機(jī)器學(xué)習(xí)算法,不招人待見(jiàn)。
DNN雖然性能優(yōu)異,但是它有一個(gè)致命缺點(diǎn),就是上線(xiàn)困難。訓(xùn)練的時(shí)候,各位調(diào)參俠,把各種酷炫的結(jié)構(gòu),什么attention, transformer, capsule,能加上的都給它加上,看著離線(xiàn)指標(biāo)一路上漲,心里和臉上都樂(lè)開(kāi)了花,卻全然無(wú)視旁邊的后端工程師恨得咬緊了牙根。模型越復(fù)雜,離線(xiàn)和線(xiàn)上指標(biāo)未必就更好,但是線(xiàn)上的時(shí)間開(kāi)銷(xiāo)肯定會(huì)增加,輕則影響算法與后端的同事關(guān)系(打工人何苦為難打工人),重則你那離線(xiàn)指標(biāo)完美的模型壓根沒(méi)有上線(xiàn)的機(jī)會(huì)。雖說(shuō),目前已經(jīng)有TF Serving這樣的線(xiàn)上serving框架,但是它也不是開(kāi)箱即用的,也需要一系列的性能調(diào)優(yōu),才能滿(mǎn)足線(xiàn)上的實(shí)時(shí)性要求。
所以,如果你身處一個(gè)小團(tuán)隊(duì),后端工程人員的技術(shù)能力不強(qiáng),DNN的線(xiàn)上實(shí)時(shí)預(yù)測(cè),就會(huì)成為一個(gè)難題,這個(gè)時(shí)候,F(xiàn)M這樣的傳統(tǒng)機(jī)器學(xué)習(xí)算法,就凸顯出其優(yōu)勢(shì)。
FM排序,雖然理論上需要所有特征進(jìn)行二階交叉,但是通過(guò)公式化簡(jiǎn),可以在 O(n)的時(shí)間復(fù)雜度下完成。n是樣本中非零的特征數(shù)目,由于推薦系統(tǒng)中的特征非常稀疏,所以預(yù)測(cè)速度是非常快的。
召回,由于候選集巨大,對(duì)于實(shí)時(shí)性的要求更高。很多基于DNN的召回算法,由于無(wú)法滿(mǎn)足線(xiàn)上實(shí)時(shí)生成user embedding的需求,只能退而離線(xiàn)生成user embedding ,對(duì)于用戶(hù)實(shí)時(shí)興趣的捕捉大打折扣。FM召回,這時(shí)就顯現(xiàn)其巨大的優(yōu)勢(shì)。事先把doc embedding計(jì)算好,存入Faiss建立索引,user embedding只需要把一系列的feature embedding相加就可以得到,再去faiss中進(jìn)行top-k近鄰搜索。FM召回,可以實(shí)現(xiàn)基于用戶(hù)最新的實(shí)時(shí)興趣,從千萬(wàn)量級(jí)候選doc中完成實(shí)時(shí)召回。
總結(jié)與參考
由于以上優(yōu)點(diǎn),我心目中,將FM視為推薦、搜索領(lǐng)域的"瑞士軍刀"。風(fēng)頭上雖然不及DNN那么搶眼,但是論在推薦系統(tǒng)中發(fā)揮的作用,絲毫不比DNN遜色,有時(shí)還能更勝一籌。FM有如此眾多的優(yōu)點(diǎn),優(yōu)秀的調(diào)參俠+打工人,還等什么,還不趕快學(xué)起來(lái)。想迅速掌握FM,我推薦如下參考文獻(xiàn):
掌握FM原理,推薦讀美團(tuán)的博客《深入FFM原理與實(shí)踐》。FFM的部分可以忽略,在我看來(lái),F(xiàn)FM更像是為了Kaggle專(zhuān)門(mén)訓(xùn)練的比賽型選手,損失了FM的很多優(yōu)點(diǎn)。這就好比,奧運(yùn)會(huì)上的射擊冠軍,未必能夠勝任當(dāng)狙擊手一樣。
FM用于召回,推薦讀《推薦系統(tǒng)召回四模型之:全能的FM模型》。注意,如我所述,F(xiàn)M雖然萬(wàn)能,但是FM排序與FM召回,在特征、樣本、Loss都存在不同,不可能訓(xùn)練一個(gè)FM排序就能直接拿來(lái)做召回。這一點(diǎn),《全能FM》一文沒(méi)有提到,需要讀者特別注意。
如果想親手實(shí)踐,可以嘗試alphaFM。該項(xiàng)目只不過(guò)是作者八小時(shí)之外的課外作品,卻被很多公司拿來(lái)投入線(xiàn)上實(shí)際生產(chǎn)環(huán)境,足見(jiàn)該項(xiàng)目性能之優(yōu)異和作者功力之深厚,令人佩服。強(qiáng)烈建議不滿(mǎn)足只當(dāng)“調(diào)參俠”的同學(xué),通讀一遍alphaFM的源代碼,一定收獲滿(mǎn)滿(mǎn)。
[1] https://zhuanlan.zhihu.com/p/165064102
[2] https://zhuanlan.zhihu.com/p/320196402
[3] https://link.zhihu.com/?target=https%3A//tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html
[4] https://zhuanlan.zhihu.com/p/58160982
[5] https://link.zhihu.com/?target=https%3A//github.com/CastellanZhang/alphaFM
原文標(biāo)題:談?wù)劰I(yè)界落地能力最強(qiáng)的機(jī)器學(xué)習(xí)算法
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
算法
+關(guān)注
關(guān)注
23文章
4620瀏覽量
93046 -
FM
+關(guān)注
關(guān)注
1文章
182瀏覽量
59215 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8424瀏覽量
132765 -
dnn
+關(guān)注
關(guān)注
0文章
60瀏覽量
9058
原文標(biāo)題:談?wù)劰I(yè)界落地能力最強(qiáng)的機(jī)器學(xué)習(xí)算法
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論