YouTube深度學習推薦

YouTube於2016年發表在RecSys會議上的“Deep Neural Network YouTube Recommendations”是非常具有工程價值的論文,在深度學習還沒有被廣泛應用於計算廣告、推薦領域的當時,深受歡迎。哪怕放到現在,這篇文章也是必讀的經典好文。以作筆記的形式對這篇優秀的文章做簡單總結。

1.動機:

YouTube是全球最大的UGC的視頻網站之一,每天都有大量的視頻被上傳、分享、觀看。因此用戶推薦個性化是YouTube非常重視的業務領域。但是由於用戶量和視頻量巨大,YouTube推薦系統面臨以下三種主要挑戰:

數據規模:由於數據規模大很多推薦算法在YouTube推薦場景中不奏效。

新鮮度:連續不斷的有新的視頻被上傳,因此YouTube視頻庫是動態變化的,所以YouTube推薦系統需要對新上傳的視頻以及用戶的新actions有足夠快的響應能力。

噪聲:YouTube很少從用戶歷史行爲中獲取用戶的顯示反饋(如評論、分享、點贊或者打分等行爲),因此需要根據用戶的隱式反饋建模,這樣難免會引入很多的噪聲數據。

由於候選視頻集合太大,YouTube介紹的推薦系統由兩個神經網絡構成,分別是:候選生成模型和深度排序模型。候選生成模型根據用戶的歷史行爲從百萬級別的候選視頻中篩選出與用戶興趣比較相關數百級別視頻,可以認爲是一個粗略的篩選;而深度排序模型算出每個視頻的score,然後將數百級別的視頻按照score從高到低的順序展示給用戶。YouTube推薦系統的整體結構如下圖:

                                                

2.候選生成模型:

可以將推薦視作多分類問題,每個視頻看做一個類別,那麼可以用條件概率表示,如下:

                                                                 

它表示在用戶U和上下文C的基礎上,從視頻庫V中在時刻t觀看視頻i的概率。其中u表示(users,context)對的embedding向量;vi表示每個候選視頻的embedding向量。使用用戶的隱式反饋進行建模,將用戶看完一個視頻視爲正樣本。

由於每個視頻表示一個類別,那麼共有百萬個類別,爲了提高訓練的效率,從候選樣本中抽樣負類(負採樣),然後通過重要性加權對這個採樣進行校正。候選生成模型的架構如下圖:

                                        

對觀看視頻和搜索詞進行embedding,得到長度變化的序列,對embedding進行平均操作得到size固定的稠密向量,對watch vector、search vector、地理位置的embedding以及年齡、性別等特徵連接成爲一個長向量作爲輸入層;後面接3層隱藏層,激活函數爲ReLU,然後通過softmax得到每個類別的概率。框架的左上角serving沒用採用網絡結構,而是使用了最鄰近方法,是因爲最近鄰搜索的效率高。

前面說過YouTube推薦系統的三大挑戰之一就是新鮮度問題,每秒鐘有很多小時的視頻被上傳到YouTube上,所以爲用戶推薦新鮮的內容對YouTube來說是非常重要的,雖然用戶喜歡新鮮的內容,但是並不會以犧牲相關性爲代價,也就是說給用戶推薦新鮮但其不感興趣的視頻是不受用戶歡迎的。爲了擬合用戶對新鮮內容的偏置,模型引入了’example age’這個特徵,此特徵能夠把視頻的新鮮度對視頻流行度的影響引入模型中;但是在做模型serving的時候,將此特徵置0.

Note:關於example age的定義,文中並沒有明確給出,應該是將sample log到當前時間作爲example age。關於這一點大神王喆在他的文章中有說明。

                                                

可以看到,引入example age後模型預測更接近與經驗分佈,可準確表示數據中觀察到的上傳時間和隨時間變化的流行度;而基線模型幾乎是一條直線。

推薦問題經常會涉及到解決surrogate問題並將結果轉化成特殊的context。一個典型的例子是:精確的預測評分可以有效的進行電影推薦。訓練集是從所有的YouTube視頻中產生,而不僅僅是從推薦視頻中產生,這樣可以避免過度個性化以至於用戶看不到新內容;此外爲每一個用戶生成固定數量訓練樣本,這樣可以避免高度活躍的用戶對loss的過度影響

需要格外注意分類器的保留信息,防止surrogate問題過擬合。比如,用戶剛剛搜索了Kobe Bryant,緊接着推薦系統就把用戶主頁推薦結果大部分都變成了和Kobe Bryant相關的視頻,這其實是非常差的用戶體驗。YouTube通過丟棄時序信息,並用無序的bag of tokens來表示搜索詞,這樣可將用戶的歷史信息同等看待。

使用隨機留一法選擇labels和context然後進行預測,這會泄露future information。因此YouTube把最近觀看的視頻作爲輸入,去預測future watch。

                                     

3. 排序模型

由於排序模型只需要對百級別的視頻進行評分,所以模型可以引入更多的描述用戶以及用戶和視頻關係的特徵,這樣可以更精準的將視頻推薦給用戶。排序模型的結構圖如下:

                                              

排序模型和候選生成模型的結構非常類似。輸入分別爲:impression video ID embedding、watched video IDs embedding+average pooling、user language embedding、video language embedding、time since last watch+normalize、#previous impressions+normalize。其中對後兩個特徵,對歸一化後的特徵進行平方開平方操作,這樣可以引入特徵的非線性,提高模型的表達能力。將以上向量和數連接成一個wide向量作爲網絡的輸入;經過三層激活函數爲ReLu的隱藏層,以weighted LR作爲輸出層,在serving時使用指數函數進行預測。

模型的優化目標沒有采用CTR,而是以expected watch time作爲優化目標。這是因爲使用CTR進行排序會產生用戶沒有看完視頻的欺騙性行爲(只點開了視頻沒有觀看或者觀看時間很短),而觀看時間能更好的捕獲用戶的參與度(點贊、轉發、評論等行爲)。在文章中,YouTube對長尾video的處理是用全0向量代替

排序模型中爲什麼用weighted LR預測期望觀看時間?做模型serving時爲什麼又使用指數函數e^{Wx+b}進行預測?什麼是weighted LR,其實就是給每一個樣本都賦予一定的權重,在YouTube的原文中是這樣做的:正樣本被視頻觀看時間T加權,負樣本的權重都爲1。原文中提到了Odds(機率/發生率)這個詞,那麼我們就從Odds開始說起,其定義如下:

                                                                                   Odds = \frac{p}{1-p}

其中p爲事情發生的概率,對應到YouTube的論文中就是impression被點擊的概率,對Odds去自然對數,並讓其等於線性迴歸函數得到:

                                                                                   

再對上式兩邊同時去自然指數,得到:

                                                                                  

可以驚奇的發現,serving中的指數函數計算的是Odds。前面說過,排序模型是以expected watch time爲優化目標,那麼Odds和優化目標有什麼關係呢?我們知道weighted LR是對正樣本以視頻觀看時間進行了加權,那麼有:

                                                                                     

由於在YouTube中每個impression被點擊的概率p很小,而權重是對第i個impression的觀看時長(這裏有一個點文中沒有說清楚,YouTube上的視頻的長短不一,用戶觀看時長也是不同的,觀看時長的單位沒有明確說明,如果單位是秒的話,那麼值將會比較大,我認爲視頻時長的單位是小時可能會比較合適),所以上面的式子可近似寫爲:

                                                                              

因爲p爲impression被點擊的概率,是觀看視頻的時長,所以爲觀看視頻的期望時長。這恰好是之前設定的優化目標,只需對預測的期望時長進行一個排序然後推薦給用戶即可。

參考文獻:

1. Deep Neural Networks for YouTube Recommendations

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

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

發佈了44 篇原創文章 · 獲贊 26 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章