機器學習算法那家強 因子分解機(FM算法)工業落地能力最強

導讀 文 | 石塔西源 | 夕小瑤的賣萌屋盡管BERT為代表的預訓練模型大肆流行 但是身處工業界才會知道它落地有多難 尤其是QPS動輒幾百的

文 | 石塔西

源 | 夕小瑤的賣萌屋

盡管BERT為代表的預訓練模型大肆流行 但是身處工業界才會知道它落地有多難 尤其是QPS動輒幾百的在線推薦、搜索系統 哪怕在大廠也很難在線上系統見到它們。

今天就想反其道而行之 談談工業界搜索、推薦、廣告這類核心場景中落地能力最強的算法(之一):因子分解機(FM)。我不敢說它是最簡單的(FM的確很簡單) 但是作為一個推薦算法調參工程師 掌握FM一定是性價比最高的。我推崇FM算法的原因 有以下三點:

功能齊全

眾所周知 推薦算法有三個應用領域:召回、粗排、精排。推薦算法千千萬 但是有的算法只能用于召回 有的算法只能用于排序。像FM這樣實現三個領域全覆蓋的多面手 目前為止 孤陋寡聞的我尚不知道有第二個。但是需要強調的是 我們不能只訓練一個FM排序模型 然后直接拿這個排序模型用于召回。盡管都是基于FM算法 但是FM召回與排序 有以下不同:

使用的特征不同

FM召回 由于未來要依賴Faiss進行線上檢索 所以不能使用user與doc的交叉特征。只有如此 我們才能獨立計算user embedding與doc embedding

FM排序 則沒有這方面的限制 可以使用user與doc的交叉特征。是的 你沒看錯。因為FM所實現自動二階交叉 僅能代表“共現”。但是user與doc之間還有其他形式的交叉 比如user tag與doc tag之間的重合度 喂入這樣的交叉 對于排序性能提升 仍然有很大幫助。

使用的樣本不同

訓練FM做排序時 必須使用“曝光未點擊”這樣的“真負”樣本。

訓練FM做召回時 起碼不能只使用“曝光未點擊”做負樣本。大部分的負樣本必須通過隨機采樣得到。個中原因見我的文章《負樣本為王:評Facebook的向量化召回算法》。

使用的Loss不同

FM排序時 由于負樣本是真實的 可以采用CTR預估那樣的point-wise loss

FM召回時 由于負樣本是隨機采樣得到的 存在一定的噪聲 最好采用BPR, hinge這樣的pair-wise loss。

性能優異

推薦系統的兩大永恒主題 “記憶”與“擴展” FM也能實現全覆蓋。

FM存在一階項 實際就是LR 能夠“記憶”高頻、常見模式

FM存在feature embedding。如我在《無中生有:論推薦算法中的Embedding思想》據說 Embedding是提升推薦算法“擴展性”的法寶。FM通過feature embedding 能夠自動挖掘低頻、長尾模式。在這一點上 基于embedding的二階交叉 并不比DNN的高階交叉 遜色多少。

便于上線

現在深度學習是推薦領域的寵兒 LR/FM/GBDT這樣的傳統機器學習算法 不招人待見。

DNN雖然性能優異 但是它有一個致命缺點 就是上線困難。訓練的時候 各位調參俠 把各種酷炫的結構 什么attention, transformer, capsule 能加上的都給它加上 看著離線指標一路上漲 心里和臉上都樂開了花 卻全然無視旁邊的后端工程師恨得咬緊了牙根。模型越復雜 離線和線上指標未必就更好 但是線上的時間開銷肯定會增加 輕則影響算法與后端的同事關系(打工人何苦為難打工人) 重則你那離線指標完美的模型壓根沒有上線的機會。雖說 目前已經有TF Serving這樣的線上serving框架 但是它也不是開箱即用的 也需要一系列的性能調優 才能滿足線上的實時性要求。

所以 如果你身處一個小團隊 后端工程人員的技術能力不強 DNN的線上實時預測 就會成為一個難題 這個時候 FM這樣的傳統機器學習算法 就凸顯出其優勢。

FM排序 雖然理論上需要所有特征進行二階交叉 但是通過公式化簡 可以在 O(n)的時間復雜度下完成。n是樣本中非零的特征數目 由于推薦系統中的特征非常稀疏 所以預測速度是非常快的。

召回 由于候選集巨大 對于實時性的要求更高。很多基于DNN的召回算法 由于無法滿足線上實時生成user embedding的需求 只能退而離線生成user embedding 對于用戶實時興趣的捕捉大打折扣。FM召回 這時就顯現其巨大的優勢。事先把doc embedding計算好 存入Faiss建立索引 user embedding只需要把一系列的feature embedding相加就可以得到 再去faiss中進行top-k近鄰搜索。FM召回 可以實現基于用戶最新的實時興趣 從千萬量級候選doc中完成實時召回。

總結與參考

由于以上優點 我心目中 將FM視為推薦、搜索領域的"瑞士軍刀"。風頭上雖然不及DNN那么搶眼 但是論在推薦系統中發揮的作用 絲毫不比DNN遜色 有時還能更勝一籌。FM有如此眾多的優點 優秀的調參俠+打工人 還等什么 還不趕快學起來。想迅速掌握FM 我推薦如下參考文獻:

掌握FM原理 推薦讀美團的博客《深入FFM原理與實踐》。FFM的部分可以忽略 在我看來 FFM更像是為了Kaggle專門訓練的比賽型選手 損失了FM的很多優點。這就好比 奧運會上的射擊冠軍 未必能夠勝任當狙擊手一樣。

FM用于召回 推薦讀《推薦系統召回四模型之:全能的FM模型》。注意 如我所述 FM雖然萬能 但是FM排序與FM召回 在特征、樣本、Loss都存在不同 不可能訓練一個FM排序就能直接拿來做召回。這一點 《全能FM》一文沒有提到 需要讀者特別注意。

如果想親手實踐 可以嘗試alphaFM。該項目只不過是作者八小時之外的課外作品 卻被很多公司拿來投入線上實際生產環境 足見該項目性能之優異和作者功力之深厚 令人佩服。強烈建議不滿足只當“調參俠”的同學 通讀一遍alphaFM的源代碼 一定收獲滿滿。

[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

原文標題:談談工業界落地能力最強的機器學習算法

文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

免責聲明:本文由用戶上傳,如有侵權請聯系刪除!