Youtube推薦算法_2016經典

重讀Youtube深度學習推薦系統論文,字字珠璣,驚爲神文

百萬候選集==>召回階段==>幾百候選集==>Ranking階段==>排在最前面的十幾個;

召回階段:

輸入:用戶行爲過的video集合 + 用戶行爲過的搜索詞集合 + 用戶屬性

輸出:百萬級的類別(每個video是一類)

輸入的video和搜索詞的embedding,是用word2vec預訓練得到的;(video要不要和最後一層的w[i]進行權值共享更新?)

Ranking階段:

輸入:待評分的video, 用戶畫像,context;

輸出:一個sigmoid後的p, 0~1的概率(分數)

具體輸入特徵:

  1. impression video ID embedding: 當前要計算的video的embedding
  2. watched video IDs average embedding: 用戶觀看過的最後N個視頻embedding的average pooling
  3. language embedding: 用戶語言的embedding和當前視頻語言的embedding
  4. time since last watch: 自上次觀看同channel視頻的時間 (剛看過的channel有可能很快就再次看)
  5. #previous impressions: 該視頻已經被曝光給該用戶的次數 (增加新鮮度,不能老推已經推過的)

 

YouTube深度學習推薦系統的十大工程問題

1. 召回階段,訓練時,最後面用的是negative sampling來做的;

2. 召回階段,最後一層的輸出u,點乘權重向量w[i],得到z[i],百萬個z[i]過softmax得到p[i];預測階段,就要要找最大的一百個z[i],所以把用戶特徵Forward得到u向量之後,找能點成後得到最大的z的w們,也就是把w[i]視爲了video[i]的embedding! 近似等價於從百萬個w[i]中,找到和u最相似的K個, 也就是KNN (藉助faiss等最近鄰工具)

3. 召回階段,爲了擬合用戶對fresh content的bias,模型引入了“Example Age”這個feature

4. 訓練集構成:對每個用戶提取等數量個樣本;目的是減少活躍用戶對模型的影響;

5. 沒有使用RNN對用戶歷史觀看記錄做建模:如果用RNN,需要避免最後一個item影響過大;(youtube已經上線了以RNN爲基礎的推薦模型,有論文)

6. 測試集,沒有采用經典的隨機留一法(random holdout),而是一定要把用戶最近的一次觀看行爲作爲測試集:只留最後一次觀看行爲做測試集主要是爲了避免引入future information,產生與事實不符的數據穿越。

7. Ranking階段,用觀看時長做權重,進行了帶權LR,好處:watch time更能反應用戶的真實興趣,從商業模型角度出發,因爲watch time越長,YouTube獲得的廣告收益越多。而且增加用戶的watch time也更符合一個視頻網站的長期利益和用戶粘性。

8、在進行video embedding的時候,爲什麼要直接把大量長尾的video直接用0向量代替:節省內存。稀疏video就是加上也不準!word2vec裏一般用UNK這一個embedding來統一表示。

9. 針對某些特徵,比如#previous impressions,爲什麼要進行開方和平方處理後,當作三個特徵輸入模型:引入了特徵的非線性;

10. 使用帶權LR;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章