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