雖然國內必須FQ才能登陸YouTube,但想必你們都知道這個網站。基本上算是世界範圍內視頻領域的最大的網站了,坐擁10億量級的用戶,網站內的視頻推薦天然是一個很是重要的功能。本文就focus在YouTube視頻推薦的DNN算法,文中不但詳細介紹了Youtube推薦算法和架構細節,還給了很多practical lessons and insights,很值得精讀一番。下圖即是YouTube APP視頻推薦的一個例子。算法
在推薦系統領域,特別是YouTube的所在視頻推薦領域,主要面臨三個挑戰:網絡
之因此要在推薦系統中應用DNN解決問題,一個重要緣由是google內部在機器學習問題上的通用solution的趨勢正轉移到Deep learning,系統實際部署在基於tensorflow的Google Brain上。架構
1、系統概覽app
在工業界工做的同窗對下圖的系統劃分並不陌生。整個推薦系統分爲candidate generation(淘寶稱爲Matching,後面用Matching代替)和Ranking兩個階段。Matching階段經過i2i/u2i/u2u/user profile等方式「粗糙」的召回候選商品,Matching階段視頻的數量是百級別了;Ranking階段對Matching後的視頻採用更精細的特徵計算user-item之間的排序分,做爲最終輸出推薦結果的依據。 less
之因此把推薦系統劃分紅Matching和Ranking兩個階段,主要是從性能方面考慮的。Matching階段面臨的是百萬級視頻,單個視頻的性能開銷必須很小;而Ranking階段的算法則很是消耗資源,不可能對全部視頻都算一遍,實際上即使資源充足也徹底沒有必要,由於每每來講通不過Matching粗選的視頻,大部分在Ranking階段排名也很低。接下來分別從Matching和Ranking階段展開介紹。dom
2、Matching機器學習
2.1 問題建模函數
咱們把推薦問題建模成一個「超大規模多分類」問題。即在時刻,爲用戶
(上下文信息
)在視頻庫
中精準的預測出視頻
的類別(每一個具體的視頻視爲一個類別,
即爲一個類別),用數學公式表達以下:性能
很顯然上式爲一個softmax多分類器的形式。向量是<user, context>信息的高緯「embedding」,而向量
則是視頻 j 的embedding向量。因此DNN的目標就是在用戶信息和上下文信息爲輸入條件下學習用戶的embedding向量
。用公式表達DNN就是在擬合函數
。學習
而這種超大規模分類問題上,至少要有幾百萬個類別,實際訓練採用的是Negative Sampe,相似於word2vec的Skip-Gram方法,相似文章 DNN論文分享 - Item2vec: Neural Item Embedding for Collaborative Filtering 的item-embedding用的方法。
2.2 模型架構
整個模型架構是包含三個隱層的DNN結構。輸入是用戶瀏覽歷史、搜索歷史、人口統計學信息和其他上下文信息concat成的輸入向量;輸出分線上和離線訓練兩個部分。
離線訓練階段輸出層爲softmax層,輸出2.1公式表達的機率。而線上則直接利用user向量查詢相關商品,最重要問題是在性能。咱們利用相似局部敏感哈希(Locality Sensitive Hashing,不展開介紹了,感興趣的同窗能夠讀讀這篇論文 An Investigation of Practical Approximate Nearest Neighbor Algorithms)的算法爲用戶提供最相關的N個視頻。
2.3 主要特徵
相似於word2vec的作法,每一個視頻都會被embedding到固定維度的向量中。用戶的觀看視頻歷史則是經過變長的視頻序列表達,最終經過加權平均(可根據重要性和時間進行加權)獲得固定維度的watch vector做爲DNN的輸入。
除歷史觀看視頻外的其餘signal:
其實熟悉Skip-Gram方法的同窗很容易看出來,2.1把推薦問題定義爲「超大規模多分類」問題的數學公式和word2vec的Skip-Gram方法的公式基本相同,所不一樣的是user_vec是經過DNN學習到的,而引入DNN的好處則是任意的連續特徵和離散特徵能夠很容易添加到模型當中。一樣的,推薦系統經常使用的矩陣分解方法雖然也能獲得user_vec和item_vec,但一樣是不能嵌入更多feature。
主要特徵:
「Example Age」 (視頻上傳時間)特徵
視頻網絡的時效性是很重要的,每秒YouTube上都有大量新視頻被上傳,而對用戶來說,哪怕犧牲相關性代價,用戶仍是更傾向於更新的視頻。固然咱們不會單純的由於一個視頻新就直接推薦給用戶。
由於機器學習系統在訓練階段都是利用過去的行爲預估將來,所以一般對過去的行爲有個隱式的bias。視頻網站視頻的分佈是高度非靜態(non-stationary)的,但咱們的推薦系統產生的視頻集合在視頻的分佈,基本上反映的是訓練所取時間段的平均的觀看喜愛的視頻。所以咱們咱們把樣本的 「age」 做爲一個feature加入模型訓練中。從下圖能夠很清楚的看出,加入「example age」 feature後和經驗分佈更爲match。
2.4 label and context selection
在有監督學習問題中,最重要的選擇是label了,由於label決定了你作什麼,決定了你的上限,而feature和model都是在逼近label。咱們的幾個設計以下:
2.4 不一樣網絡深度和特徵的實驗
簡單介紹下咱們的網絡構建過程,採用的經典的「tower」模式搭建網絡,基本同2.2所示的網絡架構,全部的視頻和search token都embedded到256維的向量中,開始input層直接全鏈接到256維的softmax層,依次增長網絡深度(+512-->+1024-->+2048--> ...)。
下圖反映了不一樣網絡深度(橫座標)下不一樣特徵組合狀況下的holdout-MAP(縱座標)。能夠很明顯看出,增長了觀看歷史以外的特徵很明顯的提高了預測得準確率;從網絡深度看,隨着網絡深度加大,預測準確率在提高,但繼續增長第四層網絡已經收益不大了。
3、Ranking
Ranking階段的最重要任務就是精準的預估用戶對視頻的喜愛程度。不一樣於Matching階段面臨的是百萬級的候選視頻集,Ranking階段面對的只是百級別的商品集,所以咱們能夠使用更多更精細的feature來刻畫視頻(item)以及用戶與視頻(user-item)的關係。好比用戶可能很喜歡某個視頻,但若是list頁的用的「縮略圖」選擇不當,用戶也許不會點擊,等等。
此外,Matching階段的來源每每不少,無法直接比較。Ranking階段另外一個關鍵的做用是可以把不一樣來源的數據進行有效的ensemble。
在目標的設定方面,單純CTR指標是有迷惑性的,有些靠關鍵詞吸引用戶高點擊的視頻未必可以被播放。所以設定的目標基本與指望的觀看時長相關,具體的目標調整則根據線上的A/B進行調整。
3.1 模型架構
Ranking階段的模型和Matching基本類似,不一樣的是training最後一層是一個weighted LR層,而serving階段激勵函數用的是,具體在3.3闡述。
3.2 特徵表達
a). Feature Engineering:
儘管深度學習在圖像、語音和NLP等場景都能實現end-to-end的訓練,沒有了人工特徵工程工做。然而在搜索和推薦場景,咱們的很難吧原始數據直接做爲FNN的輸入,特徵工程仍然很重要。而特徵工程中最難的是如何建模用戶時序行爲(temporal sequence of user actions),而且關聯這些行爲和要rank的item。
咱們發現最重要的Signal是描述用戶與商品自己或類似商品之間交互的Signal,這與Facebook在14年提出LR+GBDT模型的paper(Practical Lessons from Predicting Clicks on Ads at Facebook)中獲得的結論是一致的。好比咱們要度量用戶對視頻的喜歡,能夠考慮用戶與視頻所在頻道間的關係:
這兩個連續特徵的最大好處是具有很是強的泛化能力。另外除了這兩個偏正向的特徵,用戶對於視頻所在頻道的一些PV但不點擊的行爲,即負反饋Signal一樣很是重要。
另外,咱們還發現,把Matching階段的信息傳播到Ranking階段一樣能很好的提高效果,好比推薦來源和所在來源的分數。
b). Embedding Categorical Features
NN更適合處理連續特徵,所以稀疏的特別是高基數空間的離散特徵須要embedding到稠密的向量中。每一個維度(好比query/user_id)都有獨立的embedding空間,通常來講空間的維度基本與log(去重後值得數量)至關。實際並不是爲全部的id進行embedding,好比視頻id,只須要按照點擊排序,選擇top N視頻進行embedding,其他置爲0向量。而對於像「過去點擊的視頻」這種multivalent特徵,與Matching階段的處理相同,進行加權平均便可。
另一個值得注意的是,同維度不一樣feature採用的相同ID的embedding是共享的(好比「過去瀏覽的視頻id」 「seed視頻id」),這樣能夠大大加速訓練,但顯然輸入層仍要分別填充。
c). Normalizing Continuous Features
衆所周知,NN對輸入特徵的尺度和分佈都是很是敏感的,實際上基本上除了Tree-Based的模型(好比GBDT/RF),機器學習的大多算法都如此。咱們發現歸一化方法對收斂很關鍵,推薦一種排序分位歸一到[0,1]區間的方法,即,累計分位點。
除此以外,咱們還把歸一化後的的根號
和平方
做爲網絡輸入,以期能使網絡可以更容易獲得特徵的次線性(sub-linear)和(super-linear)超線性函數。
3.3 建模指望觀看時長
咱們的目標是預測指望觀看時長。有點擊的爲正樣本,有PV無點擊的爲負樣本,正樣本須要根據觀看時長進行加權。所以,咱們訓練階段網絡最後一層用的是 weighted logistic regression。
正樣本的權重爲觀看時長 ,負樣本權重爲1。這樣的話,LR學到的odds爲:
其中是總的樣本數量,
是正樣本數量,
是第
正樣本的觀看時長。通常來講,k相對N比較小,所以上式的odds能夠轉換成
,其中
是點擊率,點擊率通常很小,這樣odds接近於
,即指望觀看時長。所以在線上serving的inference階段,咱們採用
做爲激勵函數,就是近似的估計指望的觀看時長。
3.4 不一樣隱層的實驗
下圖的table1是離線利用hold-out一天數據在不一樣NN網絡結構下的結果。若是用戶對模型預估高分的反而沒有觀看,咱們認爲是預測錯誤的觀看時長。weighted, per-user loss就是預測錯誤觀看時長佔總觀看時長的比例。
咱們對網絡結構中隱層的寬度和深度方面都作了測試,從下圖結果看增長隱層網絡寬度和深度都能提高模型效果。而對於1024-->512-->256這個網絡,測試的不包含歸一化後根號和方式的版本,loss增長了0.2%。而若是把weighted LR替換成LR,效果降低達到4.1%。