Google工業風最新論文, Youtube提出雙塔結構流式模型進行大規模推薦

  • 2019 年 10 月 31 日
  • 筆記

導讀:本文是「深度推薦系統」專欄的第十四篇文章,這個系列將介紹在深度學習的強力驅動下,給推薦系統工業界所帶來的最前沿的變化。本文主要介紹下Google在RecSys 2019上的最新論文[1],提出了雙塔結構流式模型應用於Youtube進行大規模推薦。 歡迎轉載,轉載請註明出處以及鏈接,更多關於深度推薦系統優質內容請關注如下頻道。 知乎專欄:深度推薦系統 微博:深度傳送門 公眾號:深度傳送門

介紹

工業界現有的推薦系統都需要從一個超大規模的候選集中拉取item進行打分排序。解決數據稀疏和指數級候選集分布的一種通常做法是從item的內容特徵中學習出item的稠密表示。這裡很自然地就想到了工業界大名鼎鼎且應用廣泛的雙塔神經網路結構,其中的一塔就是從豐富的item內容特徵中學習到item的表示。

工業界目前訓練雙塔結構一般是通過隨機mini-batch的方式來優化損失函數。這種訓練方式存在的一個顯著問題就是in-batch loss會因為隨機取樣偏差而導致模型效果不好,尤其是當樣本分布出現明顯傾斜的時候。我們提出了一種全新的演算法,可以從流式數據中預估item的頻率。通過理論分析和實驗,新演算法有能力在不知道候選集全部的詞典情況下做出無偏差的估計並且可以自適應候選集分布的變化。在Youtube線上的實驗也證明了該演算法的有效性。

模型架構

我們考慮一種通用的推薦問題設定:給定一系列query和候選集,目標就是在給定query的情況下返回最相關的一個候選子集。針對這裡的query和候選集中的item,都可以用各自的特徵向量來進行表示。在個性化推薦場景中,則是用戶user和會話的上下文context構成這裡的query側

都知道Youtube的推薦架構主要分為兩個階段:召回和排序。而本文則主要聚焦於新增一路如下圖所示的雙塔召回。query側的塔是由大量的用戶觀看歷史形成的user features以及共同的seed features構成,候選集側的塔則是由影片特徵構成。訓練樣本的Label則是由用戶的點擊和播放時長加權得到。

序列式訓練

Youtube的訓練數據按天依次產生,訓練數據以streaming的方式餵給分散式訓練集群。這樣模型就可以自動學習並適應最新數據分布的變化。訓練演算法如下圖所示,當收到一個batch的訓練樣本時,首先針對候選集的item進行取樣概率預測,然後根據預測的取樣概率構建損失函數,最後迭代訓練即可。

流式頻率預估的演算法如下圖所示。由於候選集item的詞典不是固定的,時刻都會有新的item產生。因此這裡針對item使用hash函數做了一個映射。針對一個指定的候選item y,A表示 y 被取樣最近一次步驟,B則表示 y 的預估頻率。一旦候選item y在迭代步驟 t 中出現,即可以按照下面迭代公式更新B。

索引和模型預估

如下圖所示,索引pipe分為三個階段:候選集生成,embedding預測和embedding索引。

上述序列式訓練生成的雙塔模型會定期地保存成為SavedModel並與線上的預測模型保持同步。對於索引庫里的所有候選item,可以使用雙塔模型的候選集側的塔生成item的embedding;然後再通過基於樹或者量化hash的方式來建立索引。

實驗

為了評估所提出演算法框架的有效性,我們進行了在item頻率預估上的模擬實驗、Wikipedia上的檢索實驗以及Youtube上的實驗。這裡我們主要關注於在Youtube線上的實驗。

模型結構採用上面介紹的結構,針對共同的輸入特徵,相應的Embedding在query和item的兩個塔之間是共享的。雙塔均使用三層DNN網路1024 x 512 x 128。

參考

[1] Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendation