1. 程式人生 > >YouTube推薦系統(下):Deep Neural Networks for YouTube Recommendations

YouTube推薦系統(下):Deep Neural Networks for YouTube Recommendations

咳,還是要說說這篇文章,雖然講它的人已經很多了。畢竟作為深度學習模型大規模應用於工業界推薦系統的標誌,這篇文章是繞不過去的。原文來自Deep Neural Networks for YouTube Recommendations,是YouTube2016年發表於Recosys的文章。

這篇文章的結構依然很經典:由deep candidate generation model(召回階段)和deep ranking model(排序階段)組成。

Overview

YouTube的推薦系統的主要挑戰有三:

  • Scale:有一些演算法在小規模的問題上表現很好,但是難以應用於較大規模的問題,而YouTube擁有世界上最大規模的推薦系統之一,規模化是一個演算法能夠應用的首要問題。
  • 新鮮性(其實我們一般稱為內容冷啟動):YouTube某種意義上是個短視訊公司,和Netflix以及Hulu這樣的公司不同,它的網站上隨時都有新鮮內容產生,怎麼把這些新鮮內容推薦出去是需要考慮的。
  • 噪聲:implicit feedback和content feature中都有大量的噪聲,需要好好利用這些有噪聲的資料。

YouTube的模型在Google Brain上訓練,它的開源版本即為tensorflow。他們的模型有十億量級的引數數目,並在千億級別的資料量上訓練。 系統的結構圖如下:

可以看到這是一個兩階段的模型。關於other candidate resource的部分我的
上一篇文章
中有。

Candidate Generation

在召回階段,YouTube要從海量資料集中選出數百個召回結果。在使用神經網路之前,YouTube使用的是MF演算法。在使用深度學習演算法時,YouTube把找回階段建模為一個分類模型,其目標是根據上下文C,使用者 U,從集合V中找到時刻t最可能被觀看的視訊w_tP(w_t = i | U, C) = \frac{e^{v_iu}}{\sum_{j \in V} e^{v_ju}}

其中u代表user和context的embedding,v代表video的embedding。deep learning的任務是從使用者觀看的歷史資料和當前上下文中學習使用者的embedding u,並使用softmax選擇最有可能被觀看的video。模型使用implicit feedback進行訓練,使用者觀看完視訊作為正樣本。

在實際進行服務時,YouTube並不追求完整的softmax過程,而是使用最近鄰演算法來選擇最有可能的N個結果。

Model Architecture

具體來說,召回階段的模型的結構如下:

而各層的設定為:

Ranking

排序模型的結構和召回模型的結構很像,比較特殊的是它採用的目標函式是watch_minutes_per_impression的函式,而不是ctr的函式。這主要是為了避免click-bait問題。click-bait在中國的語境中應該是標題黨,即刻意用標題吸引人而內容乏味的video吸引使用者的注意力,導致使用者點選之後很快退出。

特徵工程的部分我就不在這裡講了,有興趣的讀者可以去看原文,我們主要說一下loss function的問題。 模型的目標是預測impression導致的觀看時長,不管這個impression是正例還是負例。正例的原始標籤為使用者觀看視訊的時長,文章設計了一個加權邏輯迴歸函式來解決這個問題。本質上,他們還是以邏輯迴歸的方法訓練模型,但是給所有負樣例賦以單位權重,給所有正樣例賦以一個觀看時間權重。因此,

整個ranking模型的結構如下:

Model Expected Watch Time

咳,這算是本文中最難理解的一部分了,我說我自己的理解,但不一定對,歡迎批評指正:

文章採用watch_minutes_per_impression作為預測目標,但這個目標很難被直接預測,所以作者對模型做了一些修改:

  • 所有正樣本的權重等於觀看時長
  • 所有負樣本的權重等於一
  • 採用加權邏輯斯蒂迴歸來處理這個問題。加權邏輯斯蒂迴歸的思想可以去Weighted Logistic Regression Model一文中查閱。這是一種重取樣相關的方法。
  • 標準的logistic regression中,y的值為[0,1]之間的數,其表示式為y = \frac{1}{1 + e^{-w^Tx + b}},而它的odds表達為odds = e^{w^Tx + b} = \frac{p(y = 1| x)}{p(y = 0|x)}。其中,正樣本出現的概率為p = \frac{odds}{odds + 1} = \frac{e^{w^Tx + b}}{1 + e^{w^Tx + b}},負樣本出現的概率為1 - p = \frac{1}{1 + e^{w^Tx + b}}
  • 在weighted logistic regression中,這個式子則被替換為:odds = \frac{\sum{T_i}}{N - k},即正樣本出現的概率和/負樣本出現的概率和(其中T_i代表每個正樣本的觀看時長,N表示樣本總數,k表示正樣本的數量)。
  • 而per impression的觀看時長的期望為E(T) = \frac {\sum{T_i}}{N} = \frac{odds}{\frac{N}{N - k}},即odds = E(T) * \frac{N}{N-k} = E(T) * \frac{1}{1 - p} \simeq E(T) * ( 1 + p) \simeq E(T)。其中p即為CTR,由於p的值相對很小,最後的兩個約等於才能成立。所以我們最終可以用odds來估計expected watch minutes。
  • 因此在serving的時候,e^{w^Tx + b}即為watch_minutes_per_impression的估計值。