用深度學習(DNN)構建推薦系統 - Deep Neural Networks for YouTube Recommendations論文精讀

雖然國內必須FQ才能登陸YouTube,但想必你們都知道這個網站。基本上算是世界範圍內視頻領域的最大的網站了,坐擁10億量級的用戶,網站內的視頻推薦天然是一個很是重要的功能。本文就focus在YouTube視頻推薦的DNN算法,文中不但詳細介紹了Youtube推薦算法和架構細節,還給了很多practical lessons and insights,很值得精讀一番。下圖即是YouTube APP視頻推薦的一個例子。算法

 

在推薦系統領域,特別是YouTube的所在視頻推薦領域,主要面臨三個挑戰:網絡

  • 規模大:用戶和視頻的數量都很大,只能適應小規模數據集的算法就不考慮了。
  • 更新快:youtube視頻更新頻率很高,每秒有小時級別的視頻上傳,須要在新發布視頻和已有存量視頻間進行balance。更新快(實時性)的另外一方面的體現是用戶實時行爲切換很快,模型須要很好的追蹤用戶的實時行爲。
  • 噪音:噪音主要體如今用戶的歷史行爲每每是稀疏的而且是不完整的,而且沒有一個明確的ground truth的滿意度signal,咱們面對的都是noisy implicit feedback signals。噪音另外一個方面就是視頻自己不少數據都是非結構化的。這兩點對算法的魯棒性提出了很高的挑戰。

之因此要在推薦系統中應用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 問題建模函數

咱們把推薦問題建模成一個「超大規模多分類」問題。即在時刻t,爲用戶U(上下文信息C)在視頻庫V中精準的預測出視頻i的類別(每一個具體的視頻視爲一個類別,i即爲一個類別),用數學公式表達以下:性能

很顯然上式爲一個softmax多分類器的形式。向量u\in R^N是<user, context>信息的高緯「embedding」,而向量v_{j}\in R^N則是視頻 j 的embedding向量。因此DNN的目標就是在用戶信息和上下文信息爲輸入條件下學習用戶的embedding向量u。用公式表達DNN就是在擬合函數u = f_{DNN}(user_info, context_info)學習

 

而這種超大規模分類問題上,至少要有幾百萬個類別,實際訓練採用的是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。

主要特徵:

  • 歷史搜索query:把歷史搜索的query分詞後的token的embedding向量進行加權平均,可以反映用戶的總體搜索歷史狀態
  • 人口統計學信息:性別、年齡、地域等
  • 其餘上下文信息:設備、登陸狀態等

「Example Age」 (視頻上傳時間)特徵

視頻網絡的時效性是很重要的,每秒YouTube上都有大量新視頻被上傳,而對用戶來說,哪怕犧牲相關性代價,用戶仍是更傾向於更新的視頻。固然咱們不會單純的由於一個視頻新就直接推薦給用戶。

由於機器學習系統在訓練階段都是利用過去的行爲預估將來,所以一般對過去的行爲有個隱式的bias。視頻網站視頻的分佈是高度非靜態(non-stationary)的,但咱們的推薦系統產生的視頻集合在視頻的分佈,基本上反映的是訓練所取時間段的平均的觀看喜愛的視頻。所以咱們咱們把樣本的 「age」 做爲一個feature加入模型訓練中。從下圖能夠很清楚的看出,加入「example age」 feature後和經驗分佈更爲match。

 

2.4 label and context selection

在有監督學習問題中,最重要的選擇是label了,由於label決定了你作什麼,決定了你的上限,而feature和model都是在逼近label。咱們的幾個設計以下:

  • 使用更廣的數據源:不只僅使用推薦場景的數據進行訓練,其餘場景好比搜索等的數據也要用到,這樣也能爲推薦場景提供一些explore。
  • 爲每一個用戶生成固定數量訓練樣本:咱們在實際中發現的一個practical lessons,若是爲每一個用戶固定樣本數量上限,平等的對待每一個用戶,避免loss被少數active用戶domanate,能明顯提高線上效果。
  • 拋棄序列信息:咱們在實現時嘗試的是去掉序列信息,對過去觀看視頻/歷史搜索query的embedding向量進行加權平均。這點其實違反直覺,可能緣由是模型對負反饋沒有很好的建模。
  • 不對稱的共同瀏覽(asymmetric co-watch)問題:所謂asymmetric co-watch值的是用戶在瀏覽視頻時候,每每都是序列式的,開始看一些比較流行的,逐漸找到細分的視頻。下圖所示圖(a)是hled-out方式,利用上下文信息預估中間的一個視頻;圖(b)是predicting next watch的方式,則是利用上文信息,預估下一次瀏覽的視頻。咱們發現圖(b)的方式在線上A/B test中表現更佳。而實際上,傳統的協同過濾類的算法,都是隱含的採用圖(a)的held-out方式,忽略了不對稱的瀏覽模式。

 

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階段激勵函數用的是e^{x} ,具體在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]區間的方法,即\bar{x}=\int_{-\infty }^{x}df  ,累計分位點。

除此以外,咱們還把歸一化後的\bar{x} 的根號\sqrt{x} 和平方x^{2} 做爲網絡輸入,以期能使網絡可以更容易獲得特徵的次線性(sub-linear)和(super-linear)超線性函數。

3.3 建模指望觀看時長

咱們的目標是預測指望觀看時長。有點擊的爲正樣本,有PV無點擊的爲負樣本,正樣本須要根據觀看時長進行加權。所以,咱們訓練階段網絡最後一層用的是 weighted logistic regression。

正樣本的權重爲觀看時長 T_{i},負樣本權重爲1。這樣的話,LR學到的odds爲:

 

其中N是總的樣本數量,k是正樣本數量,T_{i}是第i正樣本的觀看時長。通常來講,k相對N比較小,所以上式的odds能夠轉換成E[T]/(1+P),其中P是點擊率,點擊率通常很小,這樣odds接近於E[T],即指望觀看時長。所以在線上serving的inference階段,咱們採用e^{x}做爲激勵函數,就是近似的估計指望的觀看時長。

 

3.4 不一樣隱層的實驗

下圖的table1是離線利用hold-out一天數據在不一樣NN網絡結構下的結果。若是用戶對模型預估高分的反而沒有觀看,咱們認爲是預測錯誤的觀看時長。weighted, per-user loss就是預測錯誤觀看時長佔總觀看時長的比例。

咱們對網絡結構中隱層的寬度和深度方面都作了測試,從下圖結果看增長隱層網絡寬度和深度都能提高模型效果。而對於1024-->512-->256這個網絡,測試的不包含歸一化後根號和方式的版本,loss增長了0.2%。而若是把weighted LR替換成LR,效果降低達到4.1%。

 

相關文章
相關標籤/搜索