推薦系統煉丹筆記:雙塔篇,是塔,是塔,就是塔

    目前,對於基於向量召回,那就不得不提到雙塔。**爲什麼雙塔在工業界這麼常用?**雙塔上線有多方便,真的是誰用誰知道,user 塔做在線 serving,item 塔離線計算 embeding 建索引,推到線上即可。

    下面我就給大家介紹一些來自微軟、Facebook、Baidu、YouTube 的經典雙塔模型。

微軟雙塔 DSSM

    先說雙塔模型的鼻祖,這是微軟在 CIKM2013 發表的一篇工作,它主要是用來解決 NLP 領域語義相似度任務的。Word hashing 真的是 DSSM 的騷操作了,不同於現有的 RNN,Bert 等模型,該方法直接把文本映射成了遠低於 vocab size 的向量中,然後輸入 DNN,輸出得到一個 128 維的低維語義向量。

    Query 和 document 的語義相似度就可以用這兩個向量的 cosine 相似度來表示,進一步我們可以通過 softmax 對不同的 document 做排序。這就是最初的 DSSM。如果把把 document 換成 item 或是廣告,就演變成了一個推薦模型。

    雙塔模型的優勢,總結如下:

    說來說去,主要就是實時性好,cos 的表達是有限的,很難提取交叉特徵,所以雙塔還是比較適用於召回場景。

YouTube 雙塔

    YouTube 最新正在使用的視頻召回雙塔模型。這個模型在整體上就是最普通的雙塔。左邊是 user 塔,輸入包括兩部分,第一部分 seed 是 user 當前正在觀看的視頻,第二部分 user 的 feature 是根據 user 的觀看歷史計算的,比如說可以使用 user 最近觀看的 k 條視頻的 id emb 均值,這兩部分融合起來一起輸入 user 側的 DNN。右邊是 item 塔,將候選視頻的 feature 作爲輸入,計算 item 的 embedding。之後再計算相似度,做排序就可以了。

    YouTube 這個模型最大的不同是,它的訓練是基於流數據,每一天都會產生新的訓練數據。因此,負樣本的選擇只能在 batch 內進行,batch 內的所有樣本作爲彼此的負樣本去做 batch softmax。這種採樣的方式帶來了非常大的 bias。一條熱門視頻,它的採樣概率更高,因此會更多地被當做負樣本,這不符合實際。因此這篇工作的核心就是減小 batch 內負採樣帶來的 bias

Facebook 雙塔

    這篇工作的兩個核心亮點是 hard negative minin****gembedding ensembleHard negative mining 是指,他們發現如果將隨機負樣本這種比較 easy 的樣本與上次召回中排名 101-500 名的比較 hard 的樣本以 100:1 的比例去訓練模型 (爲什麼是 101-500?),得到的效果會比較好。Embedding ensemble 是指,可以將不同負樣本訓練得到的模型做融合來進行召回。融合的方式可以是相似度結果的直接加權或者是模型的串行融合,比如先用 easy 負樣本訓練模型進行初步的篩選,再用 hard 負樣本訓練模型進行最終的召回。

    另外他們還提到雖然使用 unified 的特徵,就是輸入中包含社交特徵和位置特徵,來進行召回效果會比較好,但是召回結果在一定程度上也會損失文本的匹配,因此也可以先通過只輸入文本特徵的模型來做篩選再用輸入 unified 特徵的模型來召回,這樣可以保證文本的匹配。

百度雙塔 Mobius

    百度可不止有簡單可依賴的模型,也有複雜可依賴的。整個框架分爲兩個階段,數據增強階段是綠色箭頭的部分,採樣並利用樣本中的用戶請求與廣告構造出更多樣本,教師網絡計算相似度後將低相似度的樣本輸入學生網絡去預測 CTR,通過採樣的方式得到高 CTR 低相似度的樣本存入 buffer,這類樣本我們稱之爲 bad case。

    第二個階段是橙色箭頭表示的 CTR 模型訓練階段,將原先採樣得到的原始樣本也存入 buffer,利用 buffer 中的三種樣本去訓練 CTR 模型。雖然百度提出了這樣一種框架,但是召回和排序的直接統一在實現的過程中還是比較困難的,因爲面臨的候選廣告集數量太大,在性能方面還是難以保證。但是 Mobius 的這種將商業指標提前引入召回階段的思想是非常具有探索價值的,比如文章中提到將 cosine 相似度直接乘上一個商業指標作爲係數,就是一個很簡單的方式。

SENet 雙塔模型

    參考上圖,其實很簡單,就是在用戶側塔和 Item 側塔,在特徵 Embedding 層上,各自加入一個 SENet 模塊就行了,兩個 SENet 各自對 User 側和 Item 側的特徵,進行動態權重調整,強化那些重要特徵,弱化甚至清除掉(如果權重爲 0 的話)不重要甚至是噪音的特徵。其餘部分和標準雙塔模型是一樣的。20 年年底,我們在業務數據測試,加入 SENet 的雙塔模型,與標準雙塔模型比,在多個業務指標都有提升,在個別指標有較大的效果提升。而且,如果引入 ID 類特徵,這種優勢會更明顯。

    那麼,爲什麼 SENet 雙塔模型是有效的呢?我是這麼看的:在前面,我們談過雙塔模型有個內生性的問題,就是爲了速度快,這種兩側分離結構,必然會導致效果損失。而如果歸因的話,比較重要的一個原因,是 User 側特徵和 Item 側特徵交互太晚,在高層交互,會造成細節信息,也就是具體特徵信息的損失,影響兩側特徵交叉的效果。站在這個前提下,我們再審視下 FM 模型和 DNN 雙塔模型各自的特點。

    在面臨海量候選數據進行粗篩的場景下,它的速度太快了,效果說不上極端好,但是畢竟是個有監督學習過程,一般而言也不差,實戰價值很高,這個是根本。若一個應用場景有如下需求:應用面臨大量的候選集合,首先需要從這個集合裏面篩選出一部分滿足條件的子集合,縮小篩查範圍。那麼,這種應用場景就比較適合用雙塔模型。

    那雙塔模型這麼方便就**沒有什麼缺點嗎?**當然有,它在一定程度上犧牲掉模型的部分精準性,而且這個代價是結構內生的,也就是說它這種結構必然會面臨這樣的問題。

參考資料

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/xna1LURV3A1SUK2fBEwAJg