這里是王喆的機(jī)器學(xué)習(xí)筆記,每隔一到兩周我會(huì)站在算法工程師的角度講解一些計(jì)算廣告、推薦系統(tǒng)相關(guān)的文章。選擇文章必須滿足一下三個(gè)條件:
一是工程導(dǎo)向的;
二是阿里、Facebook、Google 等一線互聯(lián)網(wǎng)公司出品的;
三是前沿或者經(jīng)典的。
這周我們一起討論一下 *** 的深度推薦系統(tǒng)論文《Deep Neural Networks for YouTube Recommendations》,這是 2016 年的論文,按照今天的標(biāo)準(zhǔn)來(lái)看,已經(jīng)沒(méi)有什么新穎的地方,我也是兩年前讀過(guò)這篇文章之后就放下了,但前幾天重讀這篇文章,竟讓發(fā)現(xiàn)了諸多亮點(diǎn),幾乎處處是套路,處處是經(jīng)驗(yàn),不由驚為神文。這篇神文給我留下的深刻印象有兩點(diǎn):
這毫無(wú)疑問(wèn)是工業(yè)界論文的典范,是我非常推崇的工程導(dǎo)向的,算法工程師必讀的文章;
我以為毫不起眼的地方,也藏著 *** 工程師寶貴的工程經(jīng)驗(yàn),相比上周介紹的阿里的深度興趣網(wǎng)絡(luò) DIN,最重要的價(jià)值就在于 Attention 機(jī)制,這篇文章你應(yīng)該精確到句子來(lái)體會(huì),這是我驚為神文的原因。
廢話不多說(shuō),下面就跟大家分享一下兩次拜讀這篇論文的不同體驗(yàn)和收獲。
第一遍讀這篇論文的時(shí)候,我想所有人都是沖著算法的架構(gòu)去的,在深度學(xué)習(xí)推薦系統(tǒng)已經(jīng)成為各大公司“基本操作”的今天,*** 在算法架構(gòu)上并無(wú)驚奇之處,我們來(lái)快速介紹一下文章中的深度學(xué)習(xí)推薦系統(tǒng)的算法架構(gòu)。
*** 的用戶推薦場(chǎng)景自不必多說(shuō),作為全球最大的 UGC 的視頻網(wǎng)站,需要在百萬(wàn)量級(jí)的視頻規(guī)模下進(jìn)行個(gè)性化推薦。由于候選視頻集合過(guò)大,考慮 online 系統(tǒng)延遲問(wèn)題,不宜用復(fù)雜網(wǎng)絡(luò)直接進(jìn)行推薦,所以 *** 采取了兩層深度網(wǎng)絡(luò)完成整個(gè)推薦過(guò)程:
第一層是Candidate Generation Model完成候選視頻的快速篩選,這一步候選視頻集合由百萬(wàn)降低到了百的量級(jí)。
第二層是用Ranking Model完成幾百個(gè)候選視頻的精排。
首先介紹 candidate generation 模型的架構(gòu)。
*** Candidate Generation Model
我們自底而上看這個(gè)網(wǎng)絡(luò),最底層的輸入是用戶觀看過(guò)的 video 的 embedding 向量,以及搜索詞的 embedding 向量。至于這個(gè) embedding 向量是怎么生成的,作者的原話是這樣的:
Inspired by continuous bag of words language models, we learn high dimensional embeddings for each video in a xed vocabulary and feed these embeddings into a feedforward neural network
所以作者是先用 word2vec 方法對(duì) video 和 search token 做了 embedding 之后再作為輸入的,這也是做 embedding 的“基本操作”,不用過(guò)多介紹;當(dāng)然,除此之外另一種大家應(yīng)該也比較熟悉,就是通過(guò)加一個(gè) embedding 層跟上面的 DNN 一起訓(xùn)練,兩種方法孰優(yōu)孰劣,有什么適用場(chǎng)合,大家可以討論一下。
特征向量里面還包括了用戶的地理位置的 embedding,年齡,性別等。然后把所有這些特征 concatenate 起來(lái),喂給上層的 ReLU 神經(jīng)網(wǎng)絡(luò)。
三層神經(jīng)網(wǎng)絡(luò)過(guò)后,我們看到了 softmax 函數(shù)。這里 *** 的同學(xué)們把這個(gè)問(wèn)題看作為用戶推薦 next watch 的問(wèn)題,所以輸出應(yīng)該是一個(gè)在所有 candidate video 上的概率分布,自然是一個(gè)多分類(lèi)問(wèn)題。
好了,這一套深度學(xué)習(xí)的“基本操作”下來(lái),就構(gòu)成了 *** 的 candidate generation 網(wǎng)絡(luò),看似平淡無(wú)奇,其實(shí)還是隱藏著一些問(wèn)題的,比如:
架構(gòu)圖的左上角,為什么在 online serving 的時(shí)候不直接用這套網(wǎng)絡(luò)進(jìn)行預(yù)測(cè)而要使用 nearest neighbor search 的方法?
多分類(lèi)問(wèn)題中,*** 的 candidate video 有百萬(wàn)之巨,意味著有幾百萬(wàn)個(gè)分類(lèi),這必然會(huì)影響訓(xùn)練效果和速度,如何改進(jìn)?
這些問(wèn)題在讀第一遍的時(shí)候我也沒(méi)有深想深看,但卻是工程實(shí)現(xiàn)中必然會(huì)遇到的問(wèn)題,我們隨后再深入介紹論文中的解決方法。
既然得到了幾百個(gè)候選集合,下一步就是利用 ranking 模型進(jìn)行精排序,下面是 ranking 深度學(xué)習(xí)網(wǎng)絡(luò)的架構(gòu)圖。
*** Ranking Model
乍一看上面的 ranking model 似乎與 candidate generation 模型沒(méi)有什么區(qū)別,模型架構(gòu)還是深度學(xué)習(xí)的“基本操作”,唯一的區(qū)別就是特征工程,那么我們就講講特征工程。
事實(shí)上原文也明確說(shuō)明了,引入另一套 DNN 作為 ranking model 的目的就是引入更多描述視頻、用戶以及二者之間關(guān)系的特征,達(dá)到對(duì)候選視頻集合準(zhǔn)確排序的目的。
During ranking, we have access to many more features describing the video and the user's relationship to the video because only a few hundred videos are being scored rather than the millions scored in candidate generation.
具體一點(diǎn),從左至右的特征依次是:
impression video ID embedding:當(dāng)前要計(jì)算的 video 的 embedding
watched video IDs average embedding:用戶觀看過(guò)的最后 N 個(gè)視頻 embedding 的 average pooling
language embedding:用戶語(yǔ)言的 embedding 和當(dāng)前視頻語(yǔ)言的 embedding
time since last watch:自上次觀看同 channel 視頻的時(shí)間
#previous impressions:該視頻已經(jīng)被曝光給該用戶的次數(shù)
上面五個(gè)特征中,我想重點(diǎn)談?wù)劦?4 個(gè)和第 5 個(gè)。因?yàn)檫@兩個(gè)很好的引入了對(duì)用戶行為的觀察。
第 4 個(gè)特征背后的思想是:
We observe that the most important signals are those that describe a user's previous interaction with the item itself and other similar items.
有一些引入 attention 的意思,這里是用了 time since last watch 這個(gè)特征來(lái)反映用戶看同類(lèi)視頻的間隔時(shí)間。從用戶的角度想一想,假如我們剛看過(guò)“DOTA 經(jīng)典回顧”這個(gè) channel 的視頻,我們很大概率是會(huì)繼續(xù)看這個(gè) channel 的視頻的,那么該特征就很好的捕捉到了這一用戶行為。
第 5 個(gè)特征#previous impressions則一定程度上引入了 exploration 的思想,避免同一個(gè)視頻持續(xù)對(duì)同一用戶進(jìn)行無(wú)效曝光,盡量增加用戶沒(méi)看過(guò)的新視頻的曝光可能性。
至此,我的第一遍論文閱讀就結(jié)束了,對(duì) *** 的算法框架有了概念,但總覺(jué)得不過(guò)如此,沒(méi)什么太多新穎的地方。
但如果真這么想,還是太 naive 了,與上一篇阿里的深度興趣網(wǎng)絡(luò) DIN 不同的是,你讀懂了 DIN 的 attention 機(jī)制,你就抓住了其論文 70% 的價(jià)值,但這篇文章,如果你只讀懂了 *** 的推薦系統(tǒng)架構(gòu),你只抓住了 30% 的價(jià)值。那么剩下的 70% 的價(jià)值在哪里呢?
在重讀這篇文章的時(shí)候,我從一個(gè)工程師的角度,始終繃著“如何實(shí)現(xiàn)”這根弦,發(fā)現(xiàn)這篇論文的工程價(jià)值之前被我大大忽略了。下面我列出十個(gè)文中解決的非常有價(jià)值的問(wèn)題:
文中把推薦問(wèn)題轉(zhuǎn)換成多分類(lèi)問(wèn)題,在 next watch 的場(chǎng)景下,每一個(gè)備選 video 都會(huì)是一個(gè)分類(lèi),因此總共的分類(lèi)有數(shù)百萬(wàn)之巨,這在使用 softmax 訓(xùn)練時(shí)無(wú)疑是低效的,這個(gè)問(wèn)題 *** 是如何解決的?
在 candidate generation model 的 serving 過(guò)程中,*** 為什么不直接采用訓(xùn)練時(shí)的model進(jìn)行預(yù)測(cè),而是采用了一種最近鄰搜索的方法?
*** 的用戶對(duì)新視頻有偏好,那么在模型構(gòu)建的過(guò)程中如何引入這個(gè) feature?
在對(duì)訓(xùn)練集的預(yù)處理過(guò)程中,*** 沒(méi)有采用原始的用戶日志,而是對(duì)每個(gè)用戶提取等數(shù)量的訓(xùn)練樣本,這是為什么?
*** 為什么不采取類(lèi)似 RNN 的 Sequence model,而是完全摒棄了用戶觀看歷史的時(shí)序特征,把用戶最近的瀏覽歷史等同看待,這不會(huì)損失有效信息嗎?
在處理測(cè)試集的時(shí)候,*** 為什么不采用經(jīng)典的隨機(jī)留一法(random holdout),而是一定要把用戶最近的一次觀看行為作為測(cè)試集?
在確定優(yōu)化目標(biāo)的時(shí)候,*** 為什么不采用經(jīng)典的 CTR,或者播放率(Play Rate),而是采用了每次曝光預(yù)期播放時(shí)間(expected watch time per impression)作為優(yōu)化目標(biāo)?
在進(jìn)行 video embedding 的時(shí)候,為什么要直接把大量長(zhǎng)尾的 video 直接用 0 向量代替?
針對(duì)某些特征,比如 #previous impressions,為什么要進(jìn)行開(kāi)方和平方處理后,當(dāng)作三個(gè)特征輸入模型?
為什么 ranking model 不采用經(jīng)典的 logistic regression 當(dāng)作輸出層,而是采用了 weighted logistic regression?
因?yàn)槲乙彩窃谝曨l推薦領(lǐng)域工作,所以可以很負(fù)責(zé)任的說(shuō)以上的十個(gè)問(wèn)題都是非常有價(jià)值的。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8439瀏覽量
133087 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5515瀏覽量
121553
原文標(biāo)題:重讀 Youtube 深度學(xué)習(xí)推薦系統(tǒng)論文,字字珠璣,驚為神文
文章出處:【微信號(hào):worldofai,微信公眾號(hào):worldofai】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論