深入理解YouTube推薦系統(tǒng)算法!
一、背景介紹
? ? ???

數(shù)據(jù)規(guī)模:YouTube 的用戶和視頻量級都是十億級別的,需要分布式學(xué)習(xí)算法和高效的部署。
新穎性:推薦系統(tǒng)需要及時對新上傳的視頻和用戶的新行為作出響應(yīng)。
數(shù)據(jù)噪音:由于稀疏和外部因素影響,用戶的歷史行為很難預(yù)測。大部分 YouTube 視頻只有隱式反饋(即用戶對視頻的觀看行為),缺少顯式反饋(即用戶對視頻的評分)。此外,視頻的元信息不夠有結(jié)構(gòu)性。我們的算法需要對訓(xùn)練數(shù)據(jù)的這些因素穩(wěn)?。╮obust)。
二、系統(tǒng)概覽
? ? ???

三、Matching
商品的Embedding空間和用戶的Embedding空間如何保證在同一個空間。
需要計算與所有商品的內(nèi)積,存在性能問題。
諸如奇異值分解的方法,輸入?yún)f(xié)同矩陣,特征比較單一。
?和其上下文?
?,在?
?時刻,將視頻庫?
?中指定的視頻?
劃分為第?
?類的概率。公式如下:
其中?
?表示(用戶,上下文)的高維embedding,?
?表示每個候選視頻的embedding向量。?
?表示第?
?個視頻的embedding向量,這里每個視頻都有一個embeeding向量表示。
?,作為輸入送到softmax classifier,用以生成初步候選集作為視頻召回結(jié)果。
?中所有的視頻,并且用戶上下文向量與視頻向量之間的點積,exp等操作造成計算量過大,因此如何高效訓(xùn)練成為一個問題。其解決方法采用了負(fù)采樣機(jī)制(sample negative classes )提升訓(xùn)練速度,并使用重要性加權(quán)(importance weighting)的方式校正這個采樣。對于每個樣本,對真實標(biāo)簽和采樣得到的負(fù)類,最小化其交叉熵?fù)p失函數(shù)。相比經(jīng)典 Softmax,這有幾百倍的速度提升。
用戶觀看視頻序列ID:對視頻ID的embedding向量進(jìn)行mean pooling,得到視頻觀看向量(watch vector)。
用戶搜索視頻序列ID:對視頻ID的embedding向量進(jìn)行mean pooling,得到視頻搜索向量(search vector)。
用戶地理特征和用戶設(shè)備特征:均為一些離散特征,可以采用embedding方法或者直接采用one-hot方法(當(dāng)離散維度較小時),得到用戶的地理向量和設(shè)備向量
Example Age:在推薦系統(tǒng)中很重要的一點是視頻的新穎性,用戶更傾向于觀看新視頻,但機(jī)器學(xué)習(xí)模型都是基于歷史觀看視頻記錄學(xué)習(xí),所以在某種程度上,模型和業(yè)務(wù)是相悖的,所以文中構(gòu)建了一個特征example age,簡單的可以理解為是視頻的年齡,初始值設(shè)為0,隨著時間的增長,記錄視頻的年齡。加入之后效果十分明顯,如圖所示

? ? 5. 人口屬性特征:用于提供先驗,使其對新用戶也能做出合理的推薦。具體來說,對用戶? ? ? ? ? ? 的地理區(qū)域和使用的設(shè)備進(jìn)行 Embedding 并將特征進(jìn)行拼接(concatenation)。
?和用戶的 embedding 向量?
?,召回任務(wù)預(yù)測用戶?
?在?
?時刻觀看的視頻:?
?。
?,其維度為 pool_size
?,其中pool_size為訓(xùn)練集視頻資源的大小,?
?為embedding的維度。我們還可以得到所以用戶的輸出向量?
?,其中每個用戶向量的維度為?
?維,和視頻的embedding 向量維度一致。
?和用戶向量?
?進(jìn)行相似度計算,為了滿足時延要求,在進(jìn)行實際的召回計算時采用的是最近鄰查詢的方式。對于每個用戶向量?
?,對視頻庫中的所有視頻根據(jù)向量?
?做最近鄰算法,得到top-N的視頻作為召回結(jié)果。使用更廣的數(shù)據(jù)源:不僅僅使用推薦場景的數(shù)據(jù)進(jìn)行訓(xùn)練,其他場景比如搜索等的數(shù)據(jù)也要用到,這樣也能為推薦場景提供一些explore。
為每個用戶生成固定數(shù)量訓(xùn)練樣本:我們在實際中發(fā)現(xiàn)的一個practical lessons,如果為每個用戶固定樣本數(shù)量上限,平等的對待每個用戶,避免loss被少數(shù)active用戶domanate,能明顯提升線上效果。
拋棄序列信息:我們在實現(xiàn)時嘗試的是去掉序列信息,對過去觀看視頻/歷史搜索query的embedding向量進(jìn)行加權(quán)平均。這點其實違反直覺,可能原因是模型對負(fù)反饋沒有很好的建模。
不對稱的共同瀏覽(asymmetric co-watch)問題:所謂asymmetric co-watch值的是用戶在瀏覽視頻時候,往往都是序列式的,開始看一些比較流行的,逐漸找到細(xì)分的視頻。下圖所示圖(a)是hled-out方式,利用上下文信息預(yù)估中間的一個視頻;圖(b)是predicting next watch的方式,則是利用上文信息,預(yù)估下一次瀏覽的視頻。我們發(fā)現(xiàn)圖(b)的方式在線上A/B test中表現(xiàn)更佳。而實際上,傳統(tǒng)的協(xié)同過濾算法,都是隱含采樣圖(a)的held-out的方式,忽略了不對稱的瀏覽模式。

四、Ranking
? ? ???

?,其中?
?是樣本數(shù)量,
?是正樣本數(shù)量,
?是觀看時長。假設(shè)正樣本集很小,那么我們學(xué)到的優(yōu)勢就近似?
?,?
?是點擊概率,?
?是觀看時間的期望值。因為?
?很小,那么這個乘積就約等于
。我們用指數(shù)函數(shù)?
?作為最終的激活函數(shù)來產(chǎn)生近似觀看時長的估計值。取值數(shù)量:分為單值特征,比如當(dāng)前待展示待打分的視頻ID;和多值特征,比如用戶過去觀看的N個視頻ID;
特征描述內(nèi)容:我們還根據(jù)它們描述項目的屬性(“印象”)還是用戶/上下文(“查詢”)的屬性來對特征進(jìn)行分類。每個請求計算一次查詢特征,同時為每個已評分項目計算展現(xiàn)特征。
用戶歷史行為:用戶之前和那些items有過交互,或者和相似的items的交互;
上此觀看時間:自上次觀看同channel視頻的時間,原理類似“注意力機(jī)制;
之前視頻已經(jīng)被曝光給該用戶的次數(shù):如果一個視頻之前展示過,用戶沒有觀看,那么用戶在下次展示的時候依舊不會觀看的概率比較大,其原理類似“exploration”。
?的ID個數(shù)的對數(shù)呈正比增加,即log(unique(values))。這些視頻是通過在訓(xùn)練之前掃描一次數(shù)據(jù)建立的簡單查找表。對視頻集按照ID在點擊展現(xiàn)中出現(xiàn)的頻率進(jìn)行倒序排列,僅保留頻率最高的topN個ID,其他的ID就被從視頻集中去掉了。不在視頻集中的值,簡單的被embedding成值為0的向量。像在候選集生成階段一樣,多值離散特征映射成embedding之后,在輸入網(wǎng)絡(luò)之前需要做一下加和平均。
?分布的特征?
?,等價轉(zhuǎn)化成
,用微積分使其均勻的分布在[0,1)區(qū)間上。在訓(xùn)練之前,掃描一次數(shù)據(jù),用線性插值的方法,基于特征值的分位數(shù)近似的計算出該積分。
的平方、
的平方根,特征的超線性和子線性的函數(shù)使得網(wǎng)絡(luò)有更強(qiáng)的表達(dá)能力。輸入連續(xù)特征的冪值,被證明是能提高離線精度的。這樣看似毫無邏輯的特征竟然也有用,可能真的是豐富了特征的表達(dá)吧,只能這么理解了。
參考文獻(xiàn)
[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
整理不易,點贊三連↓
