今天給大家?guī)?lái)的是2016年YouTube發(fā)表的基于Deep learning做視頻推薦的論文,站在今天來(lái)看,這篇paper在算法架構(gòu)上并沒(méi)有什么特別的地方,但是從工程和視頻場(chǎng)景理解上的的確確是一篇經(jīng)典之作,下面一起重溫經(jīng)典。
這篇論文提出的背景主要有三點(diǎn),也就是當(dāng)時(shí)YouTube視頻推薦面臨的問(wèn)題:
推薦系統(tǒng)的架構(gòu)基本都是大同小異,無(wú)非是召回和排序兩大部分,YouTube也不例外。第一層Candidate Generation就是召回模塊,完成候選視頻快速篩選,候選視頻的量級(jí)從百萬(wàn)到百。第二層Ranking指完成召回后的幾百量級(jí)候選視頻的精排序。召回模型相對(duì)簡(jiǎn)單,特征較少,主要保證時(shí)效性,對(duì)個(gè)性化的要求較低,排序則是使用更多特征,模型較為復(fù)雜,對(duì)個(gè)性化要求高。
召回部分的特征集主要由三部分組成:
熟悉word2vec,這一塊應(yīng)該很容易理解,就是對(duì)用戶觀看過(guò)的視頻做embedding,最后做一個(gè)average得到視頻embedding。
用戶歷史搜索的關(guān)鍵詞embedding最后average得到token embedding。
上面其實(shí)和文本分類中由word embedding到doc embedding是一樣的,直接將歷史觀看視頻的embedding做加法平均還是比較暴力的,對(duì)比阿里DIN論文,這一塊其實(shí)是可以優(yōu)化的。目前的推薦架構(gòu)中一般是直接onehot輸入經(jīng)過(guò)一個(gè)embedding layer,直接參與網(wǎng)絡(luò)訓(xùn)練的,我估計(jì)YouTube應(yīng)該是考慮召回的效率沒(méi)有采用這種方式(有不同意見(jiàn)的,歡迎評(píng)論區(qū)留言。)
如地理位置,設(shè)備,性別,年齡,登錄狀態(tài)等連續(xù)或離散特征都被歸一化為[0,1], 和watch vector以及search vector做concat
除了以上這些歷史向量、人員基本信息的特征以外,Youtube還將視頻年齡作為特征加入訓(xùn)練。
視頻年齡=(訓(xùn)練窗口內(nèi)的最近觀看時(shí)間)-該視頻的上傳時(shí)間。
該特征表示視頻被上傳之后的時(shí)間。我們知道,每一秒中,YouTube都有大量視頻被上傳,推薦這些最新視頻對(duì)于YouTube來(lái)說(shuō)是極其重要的。作者持續(xù)的觀察到,用戶更傾向于推薦那些盡管相關(guān)度不高但是是最新(fresh)的視頻。推薦系統(tǒng)往往是利用用戶過(guò)去的行為來(lái)預(yù)測(cè)未來(lái),那么對(duì)于歷史行為,推薦系統(tǒng)通常是能夠?qū)W習(xí)到一種隱式的基準(zhǔn)的。但是對(duì)于視頻的流行度分布,往往是高度不穩(wěn)定的。作者寫(xiě)道,在之前的處理上,訓(xùn)練所選擇的時(shí)間窗口,是采用最近幾周的用戶平均觀看似然率來(lái)進(jìn)行推薦的。那么考慮到example age的現(xiàn)象,我們的推薦策略將example age作為一個(gè)特征拼接到DNN的輸入向量。訓(xùn)練時(shí),時(shí)間窗口越靠后,該值越接近于0或者為一個(gè)小負(fù)數(shù)。加入了example age特征后,模型效果和觀測(cè)到的實(shí)際數(shù)據(jù)更加逼近,參見(jiàn)下圖:
1、收集一些非推薦的視頻觀看。訓(xùn)練數(shù)據(jù)中收集所有的youtube觀看視頻(或者一些站外觀看)而不是僅僅是推薦的結(jié)果是非常重要的。這樣不但可以防止用戶興趣學(xué)習(xí)有偏(推薦系統(tǒng)給什么,看什么),而且可以試探到很多用戶的興趣。
2、固定每個(gè)用戶訓(xùn)練樣本量。這樣做的好處是平等對(duì)待每個(gè)用戶的損失影響,避免損失來(lái)自小部分活躍用戶。
3、不對(duì)稱的共同瀏覽(asymmetric co-watch)問(wèn)題。用戶在瀏覽視頻往往是序列式的,具有先后關(guān)系。下圖所示圖(a)是hled-out方式,利用上下文信息預(yù)估中間的一個(gè)視頻;相當(dāng)于對(duì)用戶未來(lái)看到的內(nèi)容進(jìn)行了信息泄漏。圖(b)是predicting next watch的方式,是利用上文信息,預(yù)估下一次瀏覽的視頻。這和我們實(shí)際閱讀順序是一致的。文中也提到圖(b)的方式在線上A/B test中表現(xiàn)更佳。而實(shí)際上,傳統(tǒng)的協(xié)同過(guò)濾類的算法,都是隱含的采用圖(a)的held-out方式,忽略了不對(duì)稱的瀏覽模式。
添加特征以及DNN深度可以顯著提升預(yù)測(cè)效果,但并非一直如此。第0層的輸入向量全連接到softmax輸出層,第0層以及輸出層都是采用固定的256維度。中間的深度網(wǎng)絡(luò)采用的是類似tower的結(jié)構(gòu)。深度增加時(shí),預(yù)測(cè)效果如下圖:
由上圖可以看到,DNN深度到三層預(yù)測(cè)效果基本就穩(wěn)定了。
得到特征集之后直接concatenate喂給三層DNN(激活函數(shù)為relu),最后通過(guò)softmax輸出概率, 這一階段的目標(biāo)是從資源庫(kù)中找出幾百個(gè)最相關(guān)的資源,推薦系統(tǒng)以往的做法是采用矩陣分解技術(shù)計(jì)算相關(guān)度,作者提到他們?cè)缙谝彩褂眠^(guò)淺層神經(jīng)網(wǎng)絡(luò)對(duì)用戶歷史瀏覽的embedded進(jìn)行訓(xùn)練,該算法可以視作是非線性的矩陣分解技術(shù)。作者將推薦任務(wù)轉(zhuǎn)化為一個(gè)超級(jí)多分類問(wèn)題,也即在時(shí)刻t,用戶U在場(chǎng)景C的觀看Wt為從視頻庫(kù)V預(yù)測(cè)為視頻i的類別,其中每一個(gè)視頻i可以視作為一個(gè)類別,其分類模型如下式所示:
其中u是用戶和場(chǎng)景信息的高維embedding, vj表示候選視頻的embedding。Embedding可以簡(jiǎn)單的理解為將一個(gè)稀疏實(shí)體(user,vedio)到RN空間內(nèi)的密集向量的映射。DNN的任務(wù)是基于用戶的歷史及場(chǎng)景,學(xué)習(xí)一個(gè)用戶向量u的映射函數(shù)(embedding),通過(guò)一個(gè)softmax分類器,u能夠有效的從視頻語(yǔ)料庫(kù)中識(shí)別視頻的類別(也就是推薦的結(jié)果)。softmax層的輸出是預(yù)測(cè)的視頻分類結(jié)果。也就是上面公式用戶觀看視頻j的概率。要注意,視頻向量的embedding是通過(guò)類似word2vec的方式生成的,我們能拿到視頻j的id,就能得到vj的向量。
在線服務(wù)有嚴(yán)格的性能要求,必須在幾十毫秒內(nèi)返回結(jié)果。DNN輸出用戶向量u,u與視頻庫(kù)中的視頻向量做內(nèi)積并排序,得到TopN。該過(guò)程耗費(fèi)時(shí)間巨大,作者采用了一種hashing算法進(jìn)行加速。
排序階段視頻候選只有幾百量級(jí),因此排序模型會(huì)引入更多特征進(jìn)行精細(xì)的打分排序。排序階段采用和召回階段類似的網(wǎng)絡(luò)結(jié)構(gòu),用logistics regresion對(duì)視頻進(jìn)行打分。不同的是,排序階段采用觀看時(shí)長(zhǎng)作為學(xué)習(xí)目標(biāo)而非點(diǎn)擊率(想一想這是為什么?)
從模型架構(gòu)來(lái)說(shuō),Ranking和召回類似,具體的特征如下:
(1) impression video ID embedding: 當(dāng)前要計(jì)算的視頻embedding
(2) watched video IDs average embedding: 用戶觀看過(guò)的最后N個(gè)視頻embedding的average pooling
(3)language embedding: 用戶搜索關(guān)鍵詞的embedding和當(dāng)前視頻語(yǔ)言的embedding
(4) time since last watch: 自上次觀看同channel視頻的時(shí)間
(5) #previous impressions: 該視頻已經(jīng)被曝光給該用戶的次數(shù)
特征中需要注意的點(diǎn)是:
1、同空間特征共享Embedding(video embedding、language embdding)
這么做主要還是減少內(nèi)存占用,減少網(wǎng)絡(luò)參數(shù),加速訓(xùn)練。在vido embedding中直接截?cái)嗟皖lvideo,目的應(yīng)該還是節(jié)約內(nèi)存,另外低頻偶然性比較大,截?cái)嗫梢詼p低noise數(shù)據(jù)干擾。
2、連續(xù)特征歸一化
神經(jīng)網(wǎng)絡(luò)模型對(duì)輸入規(guī)模和分布非常敏感。文中采用累計(jì)積分的方式,將連續(xù)特征歸一化到0到1之間,并且添加sqrt(x)等引入非線性。
3、歷史交互的特征
上面特征集中的(4)、(5)都是表示用戶與視頻之間的歷史交互,引入用戶行為提高推薦準(zhǔn)確性。
以點(diǎn)擊率作為目標(biāo),受標(biāo)題,視頻封面圖等影響比較大,不能夠完全表達(dá)用戶喜好,而觀看時(shí)長(zhǎng)能夠真實(shí)地捕獲用戶的興趣,更重要的是觀看時(shí)長(zhǎng)更符合商業(yè)價(jià)值,因此youtube的預(yù)測(cè)期目標(biāo)是觀看時(shí)長(zhǎng)。具體如何操作?訓(xùn)練集中包含正樣本和負(fù)樣本,正樣本是用戶點(diǎn)擊并且觀看的視頻,負(fù)樣本是曝光之后沒(méi)有點(diǎn)擊的視頻。訓(xùn)練時(shí)采用Weighted logistics,并且對(duì)正負(fù)樣本設(shè)置不同的權(quán)重,負(fù)樣本設(shè)置單位權(quán)重,正樣本用觀看時(shí)長(zhǎng)作為權(quán)重,在serving時(shí),用指數(shù)函數(shù)作為激活函數(shù)計(jì)算期望觀看時(shí)長(zhǎng)。
為什么在train時(shí)使用Weighted logistics,在serving時(shí)使用指數(shù)損失衡量呢?在邏輯回歸中odds是一個(gè)非常重要的概念:
對(duì)于Weighted logistics,相當(dāng)于對(duì)正樣本進(jìn)行過(guò)采樣,odds就是下面形式:
在視頻場(chǎng)景中p一般很小,所以上面結(jié)果剛好是視頻播放時(shí)長(zhǎng)的期望。
這樣預(yù)測(cè)的正是視頻的期望觀看時(shí)長(zhǎng),預(yù)測(cè)的目標(biāo)跟建模的期望保持一致,這是這篇paper型很巧妙的地方。
這篇paper開(kāi)啟了工業(yè)界利用DNN做推薦系統(tǒng)上的先河。如何結(jié)合業(yè)務(wù)實(shí)際和用戶場(chǎng)景,選擇等價(jià)問(wèn)題上為很多公司提供指導(dǎo)。工程性極強(qiáng),幾乎是近幾年最經(jīng)典的paper了,
聯(lián)系客服