本人最近系統的看了youtube推薦相關的論文,以爲很是有收穫,因此整理小文以饗讀者;「它山之石能夠攻玉」 ,但願能夠給你們帶來幫助和啓發。算法
做者 | 賴博先網絡
Youtube是全球最大的視頻分享平臺,用戶量高達10億+,天天上傳的UGC和PGC都是百萬級別。那麼問題就來了,他們是如何讓用戶在這麼多的視頻中快速的發現本身感興趣的內容呢?你們可能會想到搜索,確實搜索是一個必不可少的工具,但有一個前提條件是用戶必須知道視頻的關鍵詞,經過搜索關鍵詞才能找到對應的視頻,而且用戶不少時候其實並非很知道本身須要什麼樣的內容,逛youtube純粹爲了打發時間。爲了很好的解決用戶快速發現可能感興趣的視頻這個問題,推薦系統絕對是搜索的一個很好的補充。架構
本文主要介紹youtube 10年推薦系統相關的算法和策略變遷。框架
筆者從網上找到了三篇介紹youtube推薦系統相關的文章。dom
一篇是2008年發表的《Video suggestion and discovery for youtube: taking random walks through the view graph》。ide
一篇是2010年發表的《The_YouTube_video_recommendation_system》。函數
還有一篇是2016年發表的《 Deep Neural Networks for YouTube Recommendations》。工具
這三篇文章介紹都了youtube推薦系統以及內部算法架構,經過這些文章咱們能夠窺伺其在不一樣時期,基於不一樣資源和技術對系統的進化過程,對於想在本身場景中使用推薦技術的同窗有很是好的借鑑意義。學習
08年發表的那篇相對於後面兩篇來講技術上差異仍是蠻大的,做者把推薦問題創建在一個user-video的圖上,對於某個user,做者定義了他可能感興趣的video v 須要知足的條件:網站
u到v的路徑是最短的
u到v有儘量多的路徑
u到v要避開熱門v的影響(熱門v能夠根據度來判斷)
根據上述三個標準,能夠給圖上每一個用戶推薦適合的video,那如何實現呢?文章裏做者提出了一種叫作Adsorption的學習框架,這個框架目標是解決少許有標註(labeled)數據集,來預估大的無標註(unlabeled)數據集的問題。
做者使用多種方法在這個算法框架上好比Averageing、Random Walk、Linear System,而且給出了不少概念定義和算法描述,實驗結果也是很是吸引人。對於圖模型,Random Walk是必定會想到的解決方案,其邏輯是將每一個頂點V的label發送到相關聯的鄰居上,在每次傳遞結束後,對頂點的label進行歸一化。對應到視頻推薦是咱們夠建user觀看(固然能夠是其餘行爲:轉評贊等)video的關係圖,把用戶喜歡看的視頻看成label,而後進行隨機遊走,將label推廣到其餘視頻上。
這個算法試驗結果很好,可是文章也是是給出了漂亮的結果,對裏面實現一筆帶過,我理解對於這麼大的數據量級使用這種迭代算法,計算代價是很是高的,因此應用到實際場景,系統工程要求也是很是高。
相比於08年文章,2010年發表在RecSys的文章,不論是行文風格,仍是算法架構都發生了很是大的變化。08年文章充滿了學術氣息,長篇大論,可是如何應用到實際業務中並無提到不少。
2010年的文章很短,4頁,很是簡單明瞭的介紹了youtube推薦系統的方方面面,同時還介紹了不少實際業務中須要使用的trick,好比如何解決相關推薦帶來的興趣狹窄問題,引入minimum score threshold去除不相關視頻等,在實際業務中很是有借鑑意義。這篇文章介紹的推薦場景是youtube主頁,場景的目的是給用戶提供個性化的內容以此提高用戶使用網站的互動性和娛樂性。文章介紹的核心算法其實就是item-based算法,而後根據用戶在網站上的歷史行爲給其生成一個個性化的視頻列表:
文章做者也提到,他們把這個問題定義成TOP-N推薦問題,而不是點擊預估問題,須要完整地考慮內容的新鮮度、精確度、多樣性以及用戶近期行爲。另外認真的同窗會發現推薦列表中,每一個視頻封面圖片下面有系列的介紹,標題、視頻發表時間、觀看次數、Because you watch XXX;裏面推薦理由也是很是重要的,讓用戶知道爲何會給他推薦這個視頻,並且列表前四個Because you watch都不一樣,說明是通過了策略的調整。
回到文章核心算法,要根據用戶歷史行爲推薦相關視頻,一個核心問題是計算視頻與視頻的相關度,做者文章中說是使用了association rule mining的技術來解決,實際上是使用co-view來計算視頻之間的類似度:
公式裏面分子 Cij 表示視頻 i 和視頻 j 在一個時間窗口(文章用1天)裏面co-view的次數,分母f(Vi ,Vj) 是一個規範化函數(normalization functions),來避免熱門視頻帶來的影響,文章中列舉了一個簡單的函數:f(vi, vj) = ci · cj ,固然實際業務中能夠根據業務知識自定義這個規範函數;若是是使用f(vi, vj) = ci · cj,那麼r(vi, vj)其實就是關聯規則置信度的計算公司,對於種子視頻Vi,要找到最類似的視頻,ci 是不影響排序,而 cj 直接打壓了熱門視頻的影響,必定程度上提高了多樣性,而且對於小曝光視頻有扶持做用。
上述計算相關性的公式,只是一個簡單抽象,文章提到實際業務中還考慮了不少因素,好比播放時間戳、播放序列、video metadata 等。有了視頻之間的相關性,就能夠將每一個視頻做爲節點,視頻之間的相關性rij做爲邊的權值構建一個有向的 video graph,接下來根據這個圖爲每一個用戶 u 來產生推薦候選集合,而後將推薦集合傳入進入排序層生成推薦列表,大概邏輯以下:
種子視頻生成是根據用戶歷史正向行爲獲取的,好比用戶收藏、贊、加入播放列表、評分等。有了 video graph 和種子視頻,根據 item - based 算法就能夠跟每一個用戶生成一個個性化的推薦候選池,可是做者認爲這種傳統作法會讓用戶的興趣愈來愈窄,因而他們在搜索最近鄰居的基礎上加以擴展,搜索多階的最近鄰居,公式以下:
生成完候選以後,下一步是從幾百個視頻中,挑選幾個到十幾個視頻展現給用戶,那必須須要有一個排序算法,文章中提到了三類型的因素用於最終的打分:
v 視頻質量
v 用戶的切合程度
v 多樣性
視頻質量主要是根據用戶反饋信息來獲得,好比收看數目、總被觀看時長、評分、評論、贊、分享等,同時還有視頻的上傳時間之類的信息。
用戶切合度是取決於用戶對種子視頻的喜歡程度,以及視頻之間的類似程度,同時增強近期行爲。多樣性主要是經過分類數目來衡量;而後把這三方面的因素做線性加權獲得候選集合的權重(注:若是用樹模型或者 FM 模型應該能夠取得更好的成績),排序獲得推薦列表。
推薦系統實現方面分爲三個方面:
數據收集;
推薦候選生成;
線上推薦服務;系統主要使用了 Bigtable 和 mapReduce 實現。
2016年的論文用到的技術相對於2010年有了很是大的改變,所用到的數據源也不只僅只有用戶顯性行爲,可是主框架仍是候選生成+排序模型的模式,只是這兩層架構都是使用了深度模型(四層,其實不深)下圖是16年論文中提到的架構圖:
主架構經過 candidate generation(候選生成)模塊,從百萬video corpus(全部推薦候選池)找出幾百個與用戶相關的待推薦視頻;而後ranking(排序)模塊將候選模塊產生的推薦列表中在選擇十幾個視頻展現給用戶。這篇文章比較有開創性的是,在這兩個模塊中都使用了深度學習,合理的將不一樣特徵和不一樣數據源融合在一塊兒,並取得很是不錯的效果。下圖是候選生成模型框架:
文章將推薦問題轉換爲極多分類問題(extreme multiclass classication),公式以下:
表示在時刻 t,用戶U(上下文信息C)在視頻庫V中精準的預測出視頻 i 的類別(每一個具體的視頻視爲一個類別,i 即爲一個類別)的機率。上面的公式是一個明顯的 softmax 多分類器的形式。其中 u 和 v,分別是用戶的 embdded 向量和視頻的 embdded 向量,具體怎麼來的呢?對於視頻向量,文章採用了 word embedding 的方式計算出每一個視頻的 embedded 向量(原文:Inspired by continuous bag of words language models,we learn high dimensional embeddings for each video in a fixed vocabulary and feed these embeddings into a feedforward neural network),而 u 則是經過輸入用戶信息和上下文信息給上面模型架構訓練獲得。
整個模型由包含三個隱層DNN組成,輸入層輸入的的信息有,用戶播放歷史和搜索歷史embedded向量分別取average,再加入用戶基礎畫像(年齡、性別等)其他特徵:視頻質量、視頻age等特徵concat成向量輸入。從上圖能夠看出,輸出分爲serving和training兩個部分。Training部分輸出層是softmax層,也就是上面提到的那個公式表示的機率值,線上部分經過u向量和v向量得出用戶相關topN視頻(注:serving是指線上推薦服務;training是離線訓練模型;下同)。
Ranking 模型框架:
Ranking 層從架構上跟候選生成層基本一致,不一樣是的最後輸出層training是一個 weighted logistic,而serving階段激活函數是ex;ranking層針對視頻播放時長進行建模(並非一個單純的ctr預估模型,文章指出,單純根據 CTR 來進行推薦,會出現「clickbait」,也就是滋長標題黨,封面黨;這樣並不能帶來用戶停留時長的提高),以有沒有點擊來劃分正負樣本,正樣本根據播放時長進行加權,正樣本的權重是播放時長 Ti,負樣本權重是1,而最後一層模型是weighted logistic regression;那麼LR學到的odds爲:
其中 N 是總的樣本數量,k 是正樣本數量,Ti 是第i正樣本的觀看時長。k 相對 N 比較小,所以上式的 odds 能夠轉換成E[T]/(1+P),其中 P 是點擊率,點擊率通常很小,這樣 odds接近於E[T],即指望觀看時長。所以在線上 serving 的 inference 階段,咱們採用 ex 做爲激勵函數,就是近似的估計指望的觀看時長。
另外文章也花了很大篇幅將特徵工程相關的工做(這與深度學習自動提取特徵有點不符,哈哈)做者說雖然深度學習能夠緩解人工構造特徵的負擔,可是原始數據也是沒法直接餵給前饋神經網絡,因此特徵工程依舊很是重要。
在架構上整個推薦系統是創建在 Google brain 上面,使用 TensorFlow 進行建模。
本文經過對 youtube 不一樣時期發表的文章,能夠看到其技術的變遷,10年的推薦技術的積累,有不少東西能夠值得咱們去學習的。
參考文獻:
[1] Baluja, S. and Seth, R. and Sivakumar, D. and Jing, Y. Video suggestion and discovery for youtube: taking random walks through the view graph. Proceeding of the 17th international conference on World Wide Web. 2008
[2] Davidson, J. and Liebald, B. and Liu, J. The YouTube video recommendation system. Proceedings of the fourth ACM conference on Recommender systems. 2010
[3]P Covington,J Adams,E Sargin. Deep Neural Networks for YouTube Recommendations. Acm Conference on Recommender Systems , 2016 :191-198
本文轉自騰訊雲技術社區—騰雲閣,原文地址
https://www.qcloud.com/community/article/989677