背景
youtube視頻推薦碰到的挑戰(zhàn):
- 大數(shù)據(jù)量酱床,涉及到海量的用戶和視頻缠劝,需要高效的分布式學(xué)習(xí)算法和線上服務(wù)系統(tǒng);
- 新鮮度驹沿,包括新上傳的視頻和利用用戶最新的交互記錄,平衡新舊視頻的推薦蹈胡;
- 噪聲渊季,用戶的行為記錄很少,并且受到外部影響罚渐,不易預(yù)測却汉,用戶滿意度不好定義,上傳內(nèi)容包含很多非結(jié)構(gòu)化數(shù)據(jù)荷并。
模型涉及 10億參數(shù)合砂,千億樣本。
之前的方法有矩陣分解璧坟、協(xié)同過濾
系統(tǒng)概述
論文構(gòu)建的推薦系統(tǒng)分為兩個(gè)部分:候選集生成和排序既穆,即常說的召回和排序兩個(gè)步驟赎懦,召回從百萬級(jí)的視頻中快速精確的找到數(shù)百的視頻雀鹃,排序?qū)@數(shù)百個(gè)視頻進(jìn)行精排序,最后將排名靠前的呈現(xiàn)為用戶励两。
這樣設(shè)計(jì)的好處是使得推薦系統(tǒng)可以應(yīng)用于大數(shù)據(jù)量的情況黎茎,并且保證個(gè)性化和用戶滿意的推薦的結(jié)果,此外当悔,還可以融合之前方法得到的候選集傅瞻。
候選集生成
文章以每個(gè)視頻為一個(gè)類別,問題看成是大規(guī)模的多分類問題盲憎,分為線上和線下兩個(gè)部分嗅骄。
線下訓(xùn)練
訓(xùn)練目標(biāo)
在線下訓(xùn)練時(shí)計(jì)算了在給定用戶U和上下文C的情況下,用戶選擇觀看第i個(gè)視頻的概率饼疙,用softmax函數(shù)表示如下:
其中vi表示第i個(gè)視頻的embedding溺森,u表示用戶和上下文的embedding,對(duì)二者做內(nèi)積窑眯,然后計(jì)算softmax得到看第i個(gè)視頻的概率屏积。從圖中的可以看到,用戶和上下文的向量是模型最后一層的輸出磅甩,視頻的向量是后面接的softmax層的連接權(quán)重炊林,在訓(xùn)練時(shí)二者都可以得到更新,類似于word2vec的設(shè)置卷要。
label設(shè)計(jì)
既然是多分類模型渣聚,就必然需要區(qū)分正類和負(fù)類独榴。文中以是否看完某個(gè)視頻作為區(qū)分標(biāo)準(zhǔn),看完了為正奕枝,否則為負(fù)括眠,雖然youtube有其他反映用戶滿意度的反饋信號(hào),如點(diǎn)贊倍权、調(diào)查等掷豺,但是這些信號(hào)很少,正樣本會(huì)很少薄声,不利于模型的訓(xùn)練当船,尤其是長尾視頻。
損失函數(shù)
文章采用的損失函數(shù)是交叉熵默辨,但是對(duì)百萬量級(jí)的來說德频,計(jì)算成本過高。文章采用了負(fù)采樣的方式降低計(jì)算量缩幸,采樣了數(shù)千的負(fù)樣本壹置,速度加快了100倍以上。
負(fù)采樣和分層softmax是常見的加快訓(xùn)練速度的方法表谊,文章為什么沒有采用分層的softmax呢钞护,理論上是因?yàn)榉謱拥膕oftmax每層節(jié)點(diǎn)之間通常是不相關(guān)的,分類更困難爆办,實(shí)際上的實(shí)驗(yàn)也確實(shí)沒有達(dá)到負(fù)采樣的效果难咕。
輸入特征
模型的輸入特征是用戶和上下文信息,主要包括用戶看過的視頻embedding累加求平均距辆、搜索過的詞做uni-gram和bi-gram的embedding累加求平均余佃、人口統(tǒng)計(jì)信息和example age等,其中前兩者利用了用戶的歷史信息跨算,在實(shí)際實(shí)驗(yàn)中取的窗口大小為50爆土,embedding維度為256,取平均也是因?yàn)楸惹蠛椭畈稀⑶笞畲笾档鹊膶?shí)驗(yàn)效果更好步势;人口統(tǒng)計(jì)信息是為了新用戶的冷啟動(dòng),example age表示到樣本出現(xiàn)到現(xiàn)在的時(shí)間挫望,線上時(shí)值為0立润,它可以更好的擬合用戶對(duì)新視頻的偏好,用戶其實(shí)是偏好于新的視頻媳板,即使于用戶之前的觀看興趣不太相符桑腮,而且推薦系統(tǒng)往往有推薦歷史數(shù)據(jù)的偏好,加入這個(gè)特征可以很好的進(jìn)行修復(fù)這一點(diǎn)蛉幸。
數(shù)據(jù)處理上破讨,神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)的范圍和分布比較敏感丛晦,更適合處理連續(xù)特征。稀疏的id特征經(jīng)過embedding變成稠密的連續(xù)值提陶,簡單的連續(xù)特征也被標(biāo)準(zhǔn)化到[0,1]烫沙。
樣本構(gòu)造
在構(gòu)造訓(xùn)練樣本時(shí),并非只選用推薦視頻的播放情況隙笆,那樣會(huì)讓推薦系統(tǒng)偏向之前推薦過的視頻锌蓄,過于exploitation而缺少了exploration。文章選取了所有的播放記錄撑柔,甚至嵌入在別的網(wǎng)站上的播放記錄瘸爽,這樣做的好處是便于新視頻的推薦,能利用上用戶最新的動(dòng)作铅忿。
為了不讓少量觀看次數(shù)多的用戶主導(dǎo)了損失函數(shù)剪决,每個(gè)用戶都構(gòu)造了相同數(shù)量的訓(xùn)練樣本,達(dá)到統(tǒng)一權(quán)重的目的檀训。
在預(yù)測的目標(biāo)上柑潦,文章并沒有從用戶的一系列觀看時(shí)間節(jié)點(diǎn)中隨便選一個(gè),用之前和之后的觀看記錄特征進(jìn)行預(yù)測峻凫,而是預(yù)測用戶的下一個(gè)觀看的視頻渗鬼,防止信息泄露。
模型結(jié)構(gòu)
模型是一個(gè)多層的塔式NN結(jié)構(gòu)蔚晨,文章依次增加隱層的寬度和深度乍钻,直到效果不能提升肛循、不能收斂铭腕、超出算力,在構(gòu)造時(shí)多糠,每一層的隱藏層節(jié)點(diǎn)依次減半累舷,實(shí)驗(yàn)效果如下圖,可以看到隨著深度的增加和特征的增加夹孔,效果逐漸變好被盈。
線上預(yù)測
在進(jìn)行線上預(yù)測時(shí),因?yàn)闀r(shí)間和性能的限制搭伤,通過網(wǎng)絡(luò)計(jì)算得到用戶和上下文的向量后只怎,不能對(duì)每個(gè)視頻都計(jì)算softmax得分。
文章在訓(xùn)練時(shí)通過內(nèi)積限制兩個(gè)embedding在相同空間怜俐,對(duì)訓(xùn)練時(shí)得到的視頻向量身堡,選擇了點(diǎn)積空間中的最近鄰的近似評(píng)價(jià)方式,經(jīng)過實(shí)驗(yàn)驗(yàn)證拍鲤,實(shí)驗(yàn)效果對(duì)最近鄰算法的選擇并不敏感贴谎。
Note:
雖然跑一遍就可以得到每個(gè)視頻的softmax得分汞扎,這樣的時(shí)間復(fù)雜度還是過高,softmax逐個(gè)進(jìn)行向量內(nèi)積運(yùn)算加排序擅这,復(fù)雜度應(yīng)該是nlogn級(jí)別的澈魄。但使用LSH這種ANN(Approximate Nearest Neighbo)的方法,建立索引后的復(fù)雜度甚至可以低到 logN甚至常數(shù)級(jí)別的仲翎。NN只是對(duì)argtop_k u'vj的近似痹扇,NN近似讓人感覺u,v屬于同一個(gè)space,但是u和v應(yīng)該不是同一個(gè)空間溯香,有點(diǎn)像rowspace和nullspace的關(guān)系帘营。|u-v|^2=|u|^2+|v|^2-2u'v
,可見u'v和NN還差了一項(xiàng)|v|^2
逐哈,假設(shè)|v|^2
是正態(tài)分布芬迄,可以按|v|^2
分成3組做ANN近鄰搜索,|v|^2<u-sigma昂秃,>u-sigma and between
禀梳,這樣近似更精確。文章說k~幾百肠骆,所以ANN非乘阃荆快,k相對(duì)大(2k)的時(shí)候蚀腿,很有可能還是u'V算起來更快嘴瓤。
新的視頻可以不走這樣的召回,通過其他方式分發(fā)給用戶莉钙,然后根據(jù)用戶的embedding去反推廓脆。〈庞瘢或者用雙端模型停忿,引入物品側(cè)的特征,像用戶端一樣也訓(xùn)練一個(gè)nn結(jié)構(gòu)蚊伞,新的視頻只要有特征就可以過nn結(jié)構(gòu)embedding了
排序
排序部分模型架構(gòu)整體上候選集生成部分類似席赂,主要區(qū)別在于訓(xùn)練和預(yù)測的目標(biāo)、設(shè)計(jì)的特征时迫。
label和訓(xùn)練目標(biāo)
文章在排序部分使用了期望的觀看時(shí)長作為預(yù)測目標(biāo)颅停,沒有采用點(diǎn)擊率,因?yàn)辄c(diǎn)擊率可能會(huì)把一些標(biāo)題黨等騙點(diǎn)擊的視頻推薦給用戶掠拳。ranking模型通過加權(quán)的LR給每個(gè)視頻都賦予了一個(gè)得分癞揉,根據(jù)得分的高低排序依次展示給用戶。
在實(shí)際建模中,因?yàn)橛玫搅薒R烧董,所以依然要設(shè)置正例和負(fù)例毁靶,文章將點(diǎn)擊的視頻當(dāng)作正例,沒有點(diǎn)擊的視頻當(dāng)作負(fù)例逊移,為了預(yù)測期望的觀看時(shí)長预吆,對(duì)正例賦予觀看時(shí)長的權(quán)重,負(fù)例的權(quán)重均設(shè)成單位權(quán)重胳泉。
在線下訓(xùn)練時(shí)拐叉,依然采用了交叉熵作為損失函數(shù),線上就直接通過參數(shù)點(diǎn)成計(jì)算扇商,然后求以e為底凤瘦,目標(biāo)值為冪的值,剛好表示了期望時(shí)長案铺。
特征工程
排序階段相對(duì)于候選集生成階段需要處理的視頻數(shù)量大幅降低蔬芥,可以使用更多的特征。主要包含的特征如結(jié)構(gòu)圖所示控汉,其中要展示的video和看過的video時(shí)共享embedding的笔诵,用戶的語言和視頻的語言也是共享embedding的,其他的還包括視頻的來源姑子、視頻在候選集生成階段的得分乎婿、上次觀看這個(gè)視頻的時(shí)間、看過這個(gè)視頻的次數(shù)等街佑。
值得注意的有以下幾點(diǎn):
- 用戶部分特征計(jì)算一次就可以谢翎,但是視頻因?yàn)榘芏鄠€(gè),特征就需要計(jì)算幾百次沐旨。
- 用戶之前對(duì)該視頻和該視頻相關(guān)的頻道森逮、主題等的交互特征非常重要并且泛化性能很好,比如看過多少次希俩、上次什么時(shí)候看的吊宋。
- 用戶看過多少次這個(gè)特征可以防止總是給用戶推薦這個(gè)視頻。
- embedding的維度可以設(shè)置成id數(shù)目的對(duì)數(shù)個(gè)颜武,很少出現(xiàn)的視頻的embedding可以設(shè)置成全0,節(jié)省計(jì)算資源拖吼。
- 同類id共享embedding可以提升泛化性能鳞上,加速訓(xùn)練和節(jié)省計(jì)算資源。
- 過多使用序列信息可能會(huì)導(dǎo)致用戶總是看到某一種視頻吊档,文章拋棄了序列性這一點(diǎn)篙议,將歷史信息打亂作為特征(當(dāng)時(shí)應(yīng)該是沒有很好的掌握序列信息的使用方法,現(xiàn)在經(jīng)過attention的使用已經(jīng)克服了這樣的缺陷)。
-
文中使用的標(biāo)準(zhǔn)化方法是采用了累積分布鬼贱,并做了平方和開跟的非線性變化移怯,增加模型的表達(dá)能力,在實(shí)驗(yàn)中也驗(yàn)證了做非線性變換的好處这难。
模型結(jié)構(gòu)的實(shí)驗(yàn)
文章評(píng)價(jià)loss用的是正例被分錯(cuò)的觀看時(shí)長占整體
其他內(nèi)容
線下的指標(biāo)往往和線上的情況不符舟误,可以通過對(duì)點(diǎn)擊率、觀看時(shí)長等評(píng)價(jià)方式進(jìn)行修改去近似判斷用戶是否滿意姻乓。
預(yù)測目標(biāo)是非常關(guān)鍵的嵌溢,指明了大方向
參考資料:
https://research.google.com/pubs/archive/45530.pdf
https://zhuanlan.zhihu.com/p/52169807
https://zhuanlan.zhihu.com/p/52504407