【推荐系统】深入理解YouTube推荐系统算法
去年天池-安泰杯跨境電商智能算法大賽是我初次接觸推薦相關的比賽,通過比賽讓我對推薦系統有了較為淺顯的認識,賽后也是打算系統的學習這方面的內容,此后我也會將【推薦系統】作為一個系列板塊進行更新,主打經典推薦算法的原理,相信每一篇都值得反復研究。
安泰杯(冠軍分享):https://zhuanlan.zhihu.com/p/100827940
一、背景介紹
? ? ???
作為【推薦系統系列文章】的第一講,我們將以YouTube在2016年發表的論文《Deep Neural Networks for YouTube Recommendations》為背景進行YouTube的深度神經網絡推薦模型的介紹。在此這之前YouTube還有三篇介紹YouTube視頻推薦的論文,如果將這四篇串在一起,也就組成了YouTube推薦系統不斷發展改進的一個縮影。
2008年:論文《Video Suggestion and Discovery for YouTube》是由Shumeet Baluja,Shumeet Baluja等人在2008年發表在 the International World Wide Web Conference Committee (IW3C2)上。文章花了大量篇幅講了吸附算法(ADSORPTION),該算法的目的就是為了解決視頻標簽的擴散。所以就大膽推測當時YouTube推薦系統應該就是根據用戶曾經看過的視頻給用戶推薦同類視頻,也就是擁有相同標簽的視頻。
2010年:論文《The YouTube Video Recommendation System》是由Davidson J, Liebald B, Liu J等人在2010年發表在第四屆ACM RecSys上。當時YouTube推薦系統的核心算法就是基于Item-CF的協同過濾算法,換句話說就是對于一個用戶當前場景下和歷史興趣中喜歡的視頻,找出它們相關的視頻,并從這些視頻中過濾掉已經看過的,剩下就是可以用戶極有可能喜歡看的視頻。這里的視頻相關性是用共同點擊個數來描述的。
2013年:論文《Label Partitioning For Sublinear Ranking》是由Jason Weston,Jason Weston等人在2013年發表在第三十屆國際機器學習大會上。該論文將推薦問題變成了一個多分類的問題,并解決了在神經網絡中如何從最后一層輸出層中共找到概率最大的輸出節點。
到了2016年,YouTube開始邁向了以深度學習算法為主導的推薦系統階段,雖然看似離2020比較久遠,但這篇論文應該作為推薦系統入門必看論文,文中的推薦系統架構設計也是非常的經典,是很多推薦系統架構的基礎。
YouTube推薦系統的三大難點
數據規模:YouTube 的用戶和視頻量級都是十億級別的,需要分布式學習算法和高效的部署。
新穎性:推薦系統需要及時對新上傳的視頻和用戶的新行為作出響應。
數據噪音:由于稀疏和外部因素影響,用戶的歷史行為很難預測。大部分 YouTube 視頻只有隱式反饋(即用戶對視頻的觀看行為),缺少顯式反饋(即用戶對視頻的評分)。此外,視頻的元信息不夠有結構性。我們的算法需要對訓練數據的這些因素穩健(robust)。
二、系統概覽
? ? ???
Youtube推薦系統整體架構
第一部分 召回網絡:此階段主要目的是從百萬級的視頻中檢索出一小部分的視頻用于之后的排序操作,這部分需要處理的數據量非常大,速度要求快,所有使用的模型和特征都不能太復雜。召回網絡會根據用戶的歷史信息(比如用戶的歷史觀看、搜索等)進行召回,這一階段召回的視頻滿足用戶泛化的興趣,用戶之間的相似度則通過粗略的特征來表示,如用戶觀看視頻的ID,搜索query和用戶畫像。
第二部分 排序網絡:此階段會使用更加豐富和精細的用戶和視頻特征,預測用戶對召回的視頻打分,然后根據分數進行排序,依次展示給用戶。這部分最主要是能夠精準的將視頻推送給用戶,所以需要更加復雜的模型和特征來提升推薦效果。
第三部分 線下評估:評估指標有precision、recall、ranking loss等,最終的效果還是需要線上做A/B測試,關注的指標包括:點擊率、觀看時間等;需要指出的是,線上線下有時候并不能保持一致的結果。
接下來一起看看Matching和Ranking的具體設計思路,同時會給出具體實現代碼,幫助加深理解算法原理。在介紹召回模型前,先看看傳統的召回思路。
三、Matching
3.1 傳統召回思路
先離線計算好商品的Embedding以及用戶的Embedding,線上召回的時候,根據用戶的Embedding去和所有商品的Embedding內積,找出TopN。這種傳統的方式需要解決以下幾個問題:
商品的Embedding空間和用戶的Embedding空間如何保證在同一個空間。
需要計算與所有商品的內積,存在性能問題。
諸如奇異值分解的方法,輸入協同矩陣,特征比較單一。
3.2 問題建模
在召回階段,Youtube把推薦問題看成一個超大規模多分類問題,即Softmax分類。定義為基于特定的用戶??和其上下文??,在??時刻,將視頻庫??中指定的視頻?劃分為第??類的概率。公式如下:
其中??表示(用戶,上下文)的高維embedding,??表示每個候選視頻的embedding向量。??表示第??個視頻的embedding向量,這里每個視頻都有一個embeeding向量表示。
至此,該DNN的目標是在給定用戶歷史行為與上下文的情況下,學習user embedding向量??,作為輸入送到softmax classifier,用以生成初步候選集作為視頻召回結果。
3.3 負類采樣(重要性采樣softmax)
在每次計算中,softmax的分母,都需要遍歷視頻庫?中所有的視頻,并且用戶上下文向量與視頻向量之間的點積,exp等操作造成計算量過大,因此如何高效訓練成為一個問題。其解決方法采用了負采樣機制(sample negative classes )提升訓練速度,并使用重要性加權(importance weighting)的方式校正這個采樣。對于每個樣本,對真實標簽和采樣得到的負類,最小化其交叉熵損失函數。相比經典 Softmax,這有幾百倍的速度提升。
3.4 召回模型網絡結構
在做NLP任務時,如何將文本或者文本中的一字一句,表示成結構化的,計算機能夠理解的形式是第一步。經常采用方法的就是word2vec,就是將所有的word表示成低維稠密的embedding向量,最后將詞的embedding向量喂給神經網絡進行學習。
召回模型的網絡結構
Youtube的召回模型也受此啟發,采用了word embedding的技巧來計算每一個視頻的embedding,然后將視頻的embedding,用戶搜索視頻的embedding分別計算average,再加入用戶的屬性、視頻質量等特征,采用兩個完全相連的ReLU層和softmax函數來預測用戶下一個看的視頻是什么。
使用DNN的原因之一,在DNN中連續性變量和類別型變量都很容易輸入到模型中,包括一些人口統計特征(Demographic features),對最終的效果起著十分重要的作用。用戶的地域,設備等都可以作為embedding向量輸入到DNN中去。簡單的二值化特征(如性別)和數值型特征(如年齡)可以直接輸入到DNN中,數值型需要經過歸一化到[0,1]再輸入到模型中。
(1)輸入層
用戶觀看視頻序列ID:對視頻ID的embedding向量進行mean pooling,得到視頻觀看向量(watch vector)。
用戶搜索視頻序列ID:對視頻ID的embedding向量進行mean pooling,得到視頻搜索向量(search vector)。
用戶地理特征和用戶設備特征:均為一些離散特征,可以采用embedding方法或者直接采用one-hot方法(當離散維度較小時),得到用戶的地理向量和設備向量
Example Age:在推薦系統中很重要的一點是視頻的新穎性,用戶更傾向于觀看新視頻,但機器學習模型都是基于歷史觀看視頻記錄學習,所以在某種程度上,模型和業務是相悖的,所以文中構建了一個特征example age,簡單的可以理解為是視頻的年齡,初始值設為0,隨著時間的增長,記錄視頻的年齡。加入之后效果十分明顯,如圖所示
? ? 5. 人口屬性特征:用于提供先驗,使其對新用戶也能做出合理的推薦。具體來說,對用戶? ? ? ? ? ? 的地理區域和使用的設備進行 Embedding 并將特征進行拼接(concatenation)。
(2)MLP層
使用常見的塔狀設計,底層最寬,往上每層的神經元數目減半,直到 Softmax 輸入層是 256 維(1024ReLU->512ReLU->256ReLU)。
(3)Softmax 層
深度神經網絡的視頻的 embedding 向量??和用戶的 embedding 向量??,召回任務預測用戶??在??時刻觀看的視頻:?
(4)輸出層
輸出層的維度和視頻ID的embeeding向量維度一致,最終得到用戶向量??。
通過該網絡結構的學習,最終可以得到所以視頻的embedding向量??,其維度為 pool_size?,其中pool_size為訓練集視頻資源的大小,??為embedding的維度。我們還可以得到所以用戶的輸出向量??,其中每個用戶向量的維度為??維,和視頻的embedding 向量維度一致。
3.5 召回優化
在線服務階段,通過視頻向量??和用戶向量??進行相似度計算,為了滿足時延要求,在進行實際的召回計算時采用的是最近鄰查詢的方式。對于每個用戶向量??,對視頻庫中的所有視頻根據向量??做最近鄰算法,得到top-N的視頻作為召回結果。
3.6 樣本選擇和上下文選擇
在有監督學習問題中,最重要的選擇是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的方式,忽略了不對稱的瀏覽模式。
四、Ranking
? ? ???
召回階段已經給出了候選集,在排序階段,其目的是對給定的小規模候選集進行精細化的排序。通常,排序階段還涉及對多個不同召回源的視頻進行有效集成,這給排序階段增加了難度。
排序模型的網絡結構
4.1 訓練階段
選擇的基礎模型是DNN+weighted logistic regression。負樣本是有曝光無點擊的視頻,正樣本是有曝光有點擊的視頻,預測用戶的觀看時長。正樣本記錄了用戶觀看視頻的時長,為了預測觀看時長,專門設計了一個加權邏輯回歸模型。(加入了觀看時長這一衡量標準,也是為了用來解決噪聲的,因為很多時候用戶點擊觀看一個視頻并不代表用戶真的喜歡,滿意這個內容)
這個模型是基于交叉熵損失函數的邏輯回歸模型訓練的。但是我們用觀看時長對正樣本做了加權,負樣本都用單位權重(即不加權)。這樣,我們通過邏輯回歸學到的優勢就是??,其中??是樣本數量,?是正樣本數量,?是觀看時長。假設正樣本集很小,那么我們學到的優勢就近似??,??是點擊概率,??是觀看時間的期望值。因為??很小,那么這個乘積就約等于。我們用指數函數??作為最終的激活函數來產生近似觀看時長的估計值。
4.2 特征表示
我們的特征與分類和連續/序列特征的傳統分類方法是不一樣的,從兩個維度對特征進行分析:
取值數量:分為單值特征,比如當前待展示待打分的視頻ID;和多值特征,比如用戶過去觀看的N個視頻ID;
特征描述內容:我們還根據它們描述項目的屬性(“印象”)還是用戶/上下文(“查詢”)的屬性來對特征進行分類。每個請求計算一次查詢特征,同時為每個已評分項目計算展現特征。
(1) 特征工程
雖然DNN隱含了特征工程,但是作者還是做了很多特征工程(個人認為,這說明網絡模型并不是很適合這個數據,或者說這個網絡結構不像CNN那樣高效)。最重要的三方面特征如下:
用戶歷史行為:用戶之前和那些items有過交互,或者和相似的items的交互;
上此觀看時間:自上次觀看同channel視頻的時間,原理類似“注意力機制;
之前視頻已經被曝光給該用戶的次數:如果一個視頻之前展示過,用戶沒有觀看,那么用戶在下次展示的時候依舊不會觀看的概率比較大,其原理類似“exploration”。
(2)離散特征Embedding
和候選集生成一樣生成,我們使用embedding來將稀疏離散特征映射到適合于神經網絡的稠密矩陣形式。每個唯一的視頻ID都對應一個單獨學習出來的embedding,它的維度大小和整個視頻集??的ID個數的對數呈正比增加,即log(unique(values))。這些視頻是通過在訓練之前掃描一次數據建立的簡單查找表。對視頻集按照ID在點擊展現中出現的頻率進行倒序排列,僅保留頻率最高的topN個ID,其他的ID就被從視頻集中去掉了。不在視頻集中的值,簡單的被embedding成值為0的向量。像在候選集生成階段一樣,多值離散特征映射成embedding之后,在輸入網絡之前需要做一下加和平均。
重要的是,離散特征對應的ID一樣的時候,他們的底層embedding也是共享的。比如存在一個全局的embedding對應很多不同的特征(曝光的視頻ID,用戶最后一次瀏覽的視頻ID,推薦系統的種子視頻ID等等)。embedding雖然是共享的,但是每個特征在訓練的時候是單獨輸入到網絡的,以便上層網絡可以學習到每個特征的特殊表示。embedding共享對于提升泛化能力、加速訓練、減小內存占用是非常重要的。絕大多數參數模型是在這種高維embedding中的,例如,100萬個ID映射成32維的空間,其參數是完全連接的2048個單元寬網絡參數的7倍多。
(3)連續特征歸一化
神經網絡對其輸入的縮放和分布非常敏感,而諸如融合了決策樹的模型對于各個特征的縮放是不會受什么影響的。我們發現連續特征的正確歸一化對于收斂是至關重要的。一個符合??分布的特征??,等價轉化成,用微積分使其均勻的分布在[0,1)區間上。在訓練之前,掃描一次數據,用線性插值的方法,基于特征值的分位數近似的計算出該積分。
除了輸入歸一化的特征之外,我們還輸入歸一化特征的平方、的平方根,特征的超線性和子線性的函數使得網絡有更強的表達能力。輸入連續特征的冪值,被證明是能提高離線精度的。這樣看似毫無邏輯的特征竟然也有用,可能真的是豐富了特征的表達吧,只能這么理解了。
4.3 隱層實驗
表中顯示了在保留數據集上用不同的隱層配置得到的結果。每個配置得到的值是通過在同一個頁面上展示給一個用戶的正負樣本而來的。我們首先用我們的模型對兩種樣本進行打分。如果負樣本的得分比正樣本的得分高,就認為這個正樣本的觀看時長是錯誤預測。每個用戶的損失值就是所有錯誤預測的數量。
對網絡結構中隱層的寬度和深度方面都做了測試,從下圖結果看增加隱層網絡寬度和深度都能提升模型效果。而對于1024->512->256這個網絡,測試的不包含歸一化后根號和方式的版本,loss增加了0.2%。而如果把weighted LR替換成LR,效果下降達到4.1%之多。
參考文獻
? ? ???
[Covington et al., 2016] Paul Covington, Jay Adams, Emre Sargin. Deep Neural Networks for YouTube Recommendations. RecSys: 191-198, 2016.
zhuanlan.zhihu.com/p/52
zhuanlan.zhihu.com/p/61
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”喜歡文章,點個在看 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的【推荐系统】深入理解YouTube推荐系统算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软统一预训练语言模型UniLM 2.0
- 下一篇: java信息管理系统总结_java实现科