YouTube視頻推薦中的召回模型和排序模型-Deep Neural Networks for YouTube Recommendations

1.YouTube論文概述

YouTube在16年發的這篇經典paper,同時解決了推薦系統的召回問題和排序問題,因此也有兩個網絡模型:

1.召回模型:作用是從上百萬的視頻庫中選出數百個與用戶最相關的視頻;
2.排序模型:作用是從上百個與用戶相關的召回視頻中選出幾十個打分最高的視頻。

paper中提出了在YouTube推薦系統中三個具有挑戰性的難題:

  • Scale:大規模,在其他問題表現比較好的算法模型拿過來都沒法用,因爲youtube用戶基數和語料庫特別大,需要分佈式算法和高效的線上服務系統來解決;
  • Freshness:新鮮度,youtube語料庫中每秒鐘都會有較長的視頻更新進來,那麼推薦系統應該能夠基於新上傳的視頻和用戶最新的行爲來推薦,因此需要平衡新上傳內容和之前已經入庫的視頻;
  • Noise:數據噪聲
    • label難以獲取:youtube上的歷史用戶行爲本來就是難以預測的,因爲用戶行爲具有稀疏性和很多觀察不到的外部因子,很難得到用戶滿意度的ground truth,而是隻能去建模具有噪音的用戶隱式反饋信號。
    • 視頻數據結構化程度不好:和視頻相關的元數據結構不良,沒有明確定義的本體。

YoutuBe視頻推薦的的系統架構如下圖所示,這也符合業界大多數推薦系統的思路,即先對大規模物料庫使用簡單算法召回、策略召回、深度模型召回等方式,召回一定量級的候選集,然後排序模型對候選集中每個物料進行打分,並最終返回top N的物料展現給用戶。舉個例子,在某生活服務電商場景下的猜你喜歡模塊,從全部200個物料中,召回60個候選集,排序模型最後輸出打分的top20物料展現給用戶。
在這裏插入圖片描述
再來說一下在YoutuBe場景下,video corpus經過candidate model和ranking model的選擇,最終選出較少的相關視頻呈現給用戶;candidate model階段主要通過協同過濾算法進行個性化,用戶之間的相似性是通過IDs of video watches, search query tokens and demographics;ranking model階段就需要更加細粒度的特徵表達以此來區分具有較高召回率的候選視頻之間的相對重要性,同時在此階段可以看到還有other candidate sources的輸入,即混合了其他方式得到的候選集(這裏引用了youtube之前的一篇paper)。

2.召回模型

2.1.模型細節

召回模型架構如下所示:
在這裏插入圖片描述
下面paper從五個方面闡述了召回模型的細節之處:

  • 問題轉換:paper將預估用戶u視頻v的點擊率問題轉化成一個多分類問題,也就是後面會提到的 next video的問題。由於是一個多分類問題,因此相應的概率計算公式爲
    P(wi=tU,C)=eviujVeviu P(w_{i}=t|U,C)=\frac{ e^{v_{i}u} }{ \sum_{j \in V} e^{v_{i}u} }

其中u表示一個N維的<user,context>的embedding向量表示,v_{i}表示每一個候選視頻的N維的embedding向量表示,因此我們上面的深度神經網絡架構是用來學習<user,context>的N維向量表示的(視頻id的N維向量表示是事先已經學習好的了)。
由於多分類的類別特別多,youtube的視頻數量能達到百萬量級,paper中對於多分類的效率問題是通過參考word2vec中的負樣本下采樣技術來解決的,只不過此處每個正樣本都是採樣上千個負樣本,然後對於每一個正樣本,都會在它以及對應的上千個採樣後的負樣本上計算一個交叉熵loss,這裏帶來的直接受益就是在速度上相比於傳統的softmax有超過100倍的提升(這裏paper沒有說清楚是哪個過程的速度,但是從理解上來看應該是訓練過程的速度)。

  • 模型架構:paper是通過預訓練得到video ID的embedding向量的,由於用戶的觀看id的數量是變長的,而網絡輸入是需要定長的輸入的,paper試驗了avging pooling、sum pooling、component-wise max pooling三種轉換方式,結果avging pooling的效果是最好的,這裏的video ID的embedding表示是和其他模型參數一起學習出來的,這從圖3中也能看到所有除了觀看過的video ID特徵的embedding之外,還有其他的特徵,所有特徵拼接成一個wide first layer,輸入一個MLP with ReLU進行學習。

  • 異構信號:paper主要使用的特徵包括:

    • 用戶觀看video ID的embedding表示,上面已經說過;
    • 用戶搜索特徵的處理方式類似於觀看歷史特徵處理,每個搜索query都會被標記成unigram
      和bigram,並所做embedding轉換,由於需要定長的embdding輸入,因此也對搜索query的標記embdding進行avg pooling處理;
    • 人口統計學特徵:這對於新用戶的個性化推薦很有好處;
    • 用戶的地理區域特徵和設備特徵,兩者都要表示成embedding並連接起來使用;
    • 有一些簡單的二進制類別特徵如性別、登錄狀態等、簡單的連續特徵如年齡等,則直接歸一化到[0,1]之間後直接輸入到神經網絡中去。
    • example age :paper中特別提到了一個比較有意思的特徵,就是youtube視頻從上傳至今的時間,也就是視頻的age,作者發現用戶對於新上傳的、熱度比較高的視頻更感興趣,因此除了給用戶推薦用戶喜歡的視頻之外,還要給用戶推薦一些新上傳的、熱度比較高的視頻。
  • Label和上下文選擇 : 標籤和內容選擇,paper在這裏是想強調,在推薦問題中,一般會包含代理問題、以及將結果轉換到其它特定內容上。一個經典的案例就是:在電影推薦問題中,通過精確的預估電影的排序來給出電影的推薦結果,這種通過代理學習解決問題的方式,對於線上的A/B測試有很強的重要性,但是在離線評估上比較困難。模型的訓練樣本並不僅僅是從我們推薦的視頻中選出的,而是從全網所有youtube的視頻中選出來的,否則,新的視頻內容將很難存活下來,tuijian 的內容將偏向於過度利用,如果用戶通過我們推薦的內容之外發現其它的視頻,那麼我們希望通過協同過濾的方法將新內容快速推薦給其他用戶;另一個用來提升評估指標的關鍵點在於,需要給每個用戶生成固定長度的訓練樣本,這樣在計算loss函數時,能夠給所有用戶高效地賦予權重,這樣能夠避免一小撮活躍的用戶來主導loss大小的計算;用戶正常情況下消費視頻時,通常會先觀看一些流行的視頻,然後纔是觀看一些小衆領域的視頻內容,因此預測用戶的下一個將要觀看的視頻的方法的效果,要好於預測一個隨機選擇的視頻的方法,具體結構見下圖。一些協同過濾的方法,採取了隨機選擇一個視頻作爲label來預測,這種方法,會泄漏未來的數據信息,並且忽略了用戶觀看視頻的非對成性的特點,而相反的是,我們會隨機選擇一個觀看的視頻,並基於此觀看視頻回滾用戶歷史觀看的視頻,我們所取得的用戶歷史行爲都是這個作爲label的視頻(held-out label watch)之前的。
    在這裏插入圖片描述

  • 特徵和深度層面的實驗:試驗中使用了一個包含5baiwan視頻id的視頻語料庫、以及搜索詞的標記庫,而且使用的是最近50次觀看的視頻ID和搜索標記ID,在特徵方面的對比、在模型深度網的對比見下圖
    在這裏插入圖片描述

2.2.召回模型的工程經驗

  1. 每個訓練用戶都生成同樣多的訓練樣本,這樣在計算loss函數的時候可以對每個用戶做到相同權重的加權,這有利於提升線上指標;
  2. YouTube召回上,使用的用戶歷史觀看視頻id爲最近50個,歷史搜索詞token爲最近50個;
  3. 召回模型選取訓練樣本時,使用了用戶的隱氏反饋(而不是使用調查問卷、用戶贊成反對等顯式的樣本),因爲這樣樣本的量級就特別大,可以更好的學習並推薦出來長尾商品,而如果只用顯式反饋的話,這些長尾商品將會非常稀疏,難以學習出來。

3.排序模型

排序模型跟召回模型結構非常相似,如下圖所示。排序階段做了更多的特徵工程方面的工作。作者也提到了一些經驗性的東西,例如作者認爲給予ctr的排序結構往往對標題黨更加有利,但是YoutuBe的業務屬性更傾向於完成視頻掛看的用戶,因爲觀看時長才能讓用戶更多地參與進來。
在這裏插入圖片描述

3.1.特徵表達

對於排序階段的主要工作,首先是特徵的呈現方式:

1.按照傳統的分成連續值特徵和稀疏值特徵,而稀疏值特徵本身的基數(可取的離散值的多少)差異比較大,有的二類取值的稀疏特徵而有的是可取多種稀疏值的離散特徵;
2.另外特徵還可以是否可取多個值來劃分,例如用戶預估的該物料的ID就是單取值特徵,而用戶歷史觀看視頻ID就是多取值特徵;
3.而在推薦領域還經常將特徵分成<u,c>特徵和物料類 v 特徵,即<用戶上下文特徵>或者說是請求類特徵、<視頻ID特徵>。

3.1.1.特徵工程

深度學習並不是萬能的,包括在原始特徵的處理方面,無法直接將原始特徵餵給前向輸入網絡,會有很多特徵工程方面的關鍵性工作,而這其中最關鍵的就是如何表達用戶的西瓜味序列特徵以及如何將這些特徵和將要預測的視頻物料關聯起來。主要的特徵工程如下:

1.用戶在頻道上歷史觀看的視頻數量;
2.用戶上次觀看相同話題視頻的距今時間;
3.歷史上視頻展示的頻率特徵會使得,兩次請求不會再展示完全相同的推薦結果;
4.歷史上展現但用戶沒有觀看的視頻,該視頻在下次加載時就會被降級;

3.1.2.離散特徵embedding化

sparse 特徵:

1.用戶歷史展現的視頻IDs;
2.用戶展現的視頻ID;
3.用戶語言;
4.視頻語言。

排序模型中的輸入sparse特徵也是需要從高維離散空間映射到低維連續空間,並且作者給出了一些實際工程中的做法:
1.如何確定低維embedding向量的維度的經驗值,即embedding維度大約跟離散特徵數量的對數值呈線性關係;
2.根據物料被點擊的頻率,將除了topN外的物料ID截斷去除,以節省時間空間複雜度;
3.物料ID庫之外的視頻物料的embedding結果爲全0;
4.與候選集生成模型一樣的是,對於multi ont-hot特徵,需要先做avgpooling後再輸入到網絡中去;
5.同樣ID空間中的離散特徵都共享基本的embedding向量表達的(視頻ID的embedding,可以用在展示的ID特徵embedding、歷史觀看的ID特徵embedding),儘管有共享表示,但是每個特徵都要被單獨的喂入網絡,共享embedding的好處是提升泛化、加速訓練、節省存儲;
6.embedding表示的缺點是參數量巨大,是模型中中其他模塊參數量的7倍多。

3.1.3.連續特徵歸一化

闡述了一個事實:神經網絡模型對輸入值的縮放以及分佈是非常敏感的,不像基於樹模型的集成模型對輸入值縮放和分佈不敏感。作者在這裏主要介紹了涼張佳那個連續特徵的處理方式:

1.累積分佈函數的歸一化;
2.對原始特徵進行超線性和亞線性操作,爲網絡模型提供更強大的特徵表達能力。

3.2.建模觀看時間

Youtube的目標是提升用戶觀看時長,只有正樣本用戶才被標記了觀看時長,paper在訓練模型的是歐使用了 加權邏輯斯蒂迴歸,正樣本權重爲觀看時間,負樣本權重爲1。在正常的邏輯迴歸中,機率計算如下,表示樣本爲正例概率與負例概率的比例。
odds=ewTx+b=p1p odds = e^{w^{T}x + b} = \frac{p}{1-p}

而當在邏輯迴歸中,引入觀看時間時,odds計算公式如下,表示正例出現概率的和與負樣本概率的和的比例。
odds=TiNk odds = \frac{\sum T_{i}}{N-k}
而每個展示impression的觀看時長的期望爲
E[T]=TiN E[T] = \frac{\sum T_{i}}{N}
odds=E[T]NNk=E[T]11pE[T](1+p)E[T] 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來估計用戶期望觀看時間,因此可以用
ewTx+b e^{w^Tx+b}
作爲每個impression的估計值。

3.3.Hidden layers的實驗

單個頁面上,對展示給用戶的正例和負例的這兩個impression進行打分,如果對負例打分高於正例打分的話,那麼我們認爲對於正例預測的觀看時間屬於錯誤預測的觀看時間,基於此,作者首先定義了模型評估指標:
weighted,per-user loss:即是指錯誤預測的觀看時間佔比總的觀看時間的比例。

有了模型的評估指標,作者實驗了多個不同深度和寬度的隱藏層的組合,結果顯示:

1.單獨的加寬隱藏層或者單純的加深隱藏層可以提升模型的效果,具體見圖中所示;
2.作者還試驗了不加入歸一化的連續特徵的超線性變換和亞線性變換的特徵,試驗結果要差於加上這兩類特徵的模型效果;
3.作者同時嘗試了不對正樣本加入觀看時間的權重,即正樣本和負樣本權重均爲1,效果直接降低了4.1%,這說明了給正例加入觀看時間權重的模型效果還是很明顯的。

在這裏插入圖片描述

 

4.參考資料

1.paper:Deep Neural Networks for YouTube Recommendations
2.https://blog.csdn.net/friyal/article/details/83656746

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