知乎推荐页 Ranking 构建历程和经验分享
https://www.infoq.cn/article/g95hu67a4WheikGu*w9K
本次分享主題主要從以下是三個(gè)方面展開:
-
知乎推薦頁場(chǎng)景和 Ranking 歷程介紹;
-
深度學(xué)習(xí)在 Ranking 中的嘗試和應(yīng)用現(xiàn)狀;
-
Ranking 面臨的問題和未來研究方向。
首先大家看一下知乎 APP 的推薦頁的推薦結(jié)果,由于單厚智老師對(duì)機(jī)器學(xué)習(xí)比較感興趣,所以推薦內(nèi)容大部分和機(jī)器學(xué)習(xí)相關(guān)。
一、推薦頁請(qǐng)求流程
1、 召回:負(fù)責(zé)將用戶可能感興趣的內(nèi)容提取出來,重點(diǎn)是全。
-
基于話題:獲取用戶的關(guān)注數(shù)據(jù),用戶行為挖掘;
-
基于內(nèi)容:協(xié)同過濾的方式。
2、排序:負(fù)責(zé)對(duì)召回的內(nèi)容進(jìn)行打分,可以理解為感興趣程度,重點(diǎn)是準(zhǔn)。
-
基于規(guī)則:時(shí)間順序,線性加權(quán);
-
基于模型:GDBT,DNN。
3、重排序:出于產(chǎn)品或業(yè)務(wù)的考慮,對(duì)排序的內(nèi)容進(jìn)行重排,最終展示給用戶。
-
提權(quán):比如給視頻進(jìn)行一定的提權(quán);
-
隔離:相似內(nèi)容隔開;
-
強(qiáng)插:高質(zhì)量的新內(nèi)容流通。
以上就是知乎推薦頁的整體架構(gòu)流程,下面針對(duì) Ranking 模塊做詳細(xì)講解。
首先介紹一下推薦頁 Ranking 的演進(jìn)歷程, 如下圖所示,Ranking 的演進(jìn)主要經(jīng)歷了四個(gè)階段。
-
按照用戶的行為,比如關(guān)注,動(dòng)態(tài)等,并根據(jù)時(shí)間進(jìn)行排序;
-
它的問題是沒有考慮到親密度或者感興趣的程度。
該算法借鑒 Facebook 的 EdgeRank 算法,根據(jù)用戶親密度進(jìn)行排序。
采用 GDBT 模型。
深度學(xué)習(xí)模型,DNN 等。
模型的選擇主要有以下方面的考量:
-
深度學(xué)習(xí)大趨勢(shì);
-
能處理更高維度特征,如幾十萬話題量級(jí),GBDT 無法完成訓(xùn)練;
-
非線性模型,不必做大量的特征組合;
-
使用 GPU + HDFS 結(jié)構(gòu),可以訓(xùn)練更多的樣本。
二、特征介紹
我們的特征按照內(nèi)容進(jìn)行劃,可分為如下分三類:
1、用戶畫像特征
-
用戶屬性特征: 性別等;
-
統(tǒng)計(jì)特征:用戶點(diǎn)贊數(shù)等。
2、 內(nèi)容畫像
-
固有特征:文章長(zhǎng)度,關(guān)鍵詞等;
-
統(tǒng)計(jì)特征:歷史點(diǎn)贊數(shù)等。
3、交叉特征
- 用戶與內(nèi)容的交叉特征: 比如用用戶感興趣的話題和當(dāng)前待推薦內(nèi)容的話題交叉。
特征的形式主要有以下幾個(gè)方面:
-
數(shù)值特征:文章長(zhǎng)度,點(diǎn)贊數(shù);
-
Onehot:比如,內(nèi)容類型;
-
Multihot:內(nèi)容多個(gè)話題 id;
-
Onehot with value:用戶對(duì)單類型內(nèi)容的感興趣程度;
-
Multihot with value :用戶對(duì)各話題的感興趣程度。
三、特征設(shè)計(jì)
設(shè)計(jì)原則:
-
特征盡量全:從現(xiàn)有的數(shù)據(jù)中提取盡可能多的特征;
-
特征原始值全:比如加歷史 CTR 特征的時(shí)候,可以把 pv 和 click 都帶上;
-
覆蓋率大:去掉一些覆蓋率很低的特征,這些特征影響影響范圍小,大部分是缺失值;
-
線上線下一致:覆蓋率和取值分布盡可能接近。
新特征方向:
-
顯式交叉特征:DNN 能學(xué)習(xí)特征的非線性能力,增加交叉特征可以降低模型搜索的空間,在訓(xùn)練數(shù)據(jù)一定的情況下可以提升效果,如用戶的話題興趣和當(dāng)前話題的均值和最大值,效果提升明顯;
-
出于業(yè)務(wù)考慮:需要對(duì)業(yè)務(wù)有一定的理解,把自己當(dāng)做用戶,考慮什么情況下點(diǎn)擊率會(huì)大,什么樣的內(nèi)容更容易被用戶點(diǎn),比如視頻在 wifi 下更容易被點(diǎn),視頻點(diǎn)擊率高的人更喜歡視頻;
-
數(shù)據(jù)挖掘特征:如內(nèi)容 Embedding 特征。
3.1 內(nèi)容 Embedding
-
Embedding 目的:把內(nèi)容映射到低緯空間,相似內(nèi)容距離較近,可以當(dāng)做內(nèi)容特征;
-
文本角度:tfidf,關(guān)鍵詞進(jìn)行 word2vec 等;
-
行為角度:考慮用戶在知乎的行為,搜索內(nèi)容相關(guān)性較好,依據(jù)搜索點(diǎn)擊序列設(shè)計(jì) Embedding。
實(shí)現(xiàn)細(xì)節(jié)
-
數(shù)據(jù):將搜索行為進(jìn)行 session 切分,組織成類似于 sentence 序列;
-
樣本:85 億;
-
模型:skip-gram;
-
loss:nce-loss。
該方法借鑒 word2vec 的原理, 通過“詞”去預(yù)測(cè)“上下文”,這里面的“詞”就是 itemId,“上下文”就是指在點(diǎn)擊該 Item 事件前后,固定窗口下其他 Item 的 Id 信息。
之所以通過搜索行為構(gòu)建序列,是因?yàn)樗阉魇菍儆凇皬?qiáng)目的”的,并且搜索結(jié)果內(nèi)容相似。
下圖是模型的訓(xùn)練結(jié)果,從結(jié)果可以看出,這些內(nèi)容大體相似。
四、CTR 模型
選擇模型的原因:
1、推薦頁排序目標(biāo)是把用戶推薦感興趣的內(nèi)容排在前面,可有下面兩個(gè)學(xué)習(xí)目標(biāo):
-
停留時(shí)長(zhǎng):適合用回歸問題來解決,最后會(huì)偏向于長(zhǎng)文章;
-
點(diǎn)擊率:二分類問題,知乎的問答一般不長(zhǎng),更加合適。
2、分類問題相比回歸問題,目標(biāo)類別少,相對(duì)準(zhǔn)確率高;
3、分類問題場(chǎng)景業(yè)界應(yīng)用較廣,可交流空間大;
4、分類問題最后會(huì)輸出一個(gè)概率分,方便與多目標(biāo)結(jié)合。
損失函數(shù)采用交叉熵:
4.1 最初 DNN 結(jié)構(gòu)
-
將輸入特征分為用戶和內(nèi)容兩塊;
-
經(jīng)過特征映射后分別通過全連接與兩個(gè)獨(dú)立的隱含層連接;
-
兩個(gè)獨(dú)立的隱含層 cancat 后再經(jīng)過兩個(gè)全連接層;
-
最后輸出 sigmoid 與交叉熵?fù)p失作為 loss。
結(jié)果:這一版模型的 AUC 為 0.7618
4.2 優(yōu)化 DNN 結(jié)構(gòu)
-
將用戶和內(nèi)容的特征,分別按照內(nèi)容的 field 分為不同的 block;
-
每個(gè) block 先經(jīng)過全連接到獨(dú)立的隱含層;
-
將上面的隱含層 concat 再經(jīng)過后面的 DNN 模型。
結(jié)果:AUC:0.7678,提升 0.6%
4.3 Deep FM
-
增加了一階和 FM 模塊,FM 通過 block 之間的內(nèi)積實(shí)現(xiàn);
-
AUC 提升 0.2%。
該 DeepFM 算法與華為設(shè)計(jì)的 DeepFM 不同,改模型將 FM 層的結(jié)果作為 DNN 的輸入。
4.4 Last View + DIN
-
Last view topic 與當(dāng)前內(nèi)容的幾個(gè) topic 計(jì)算 Attention Score,再按權(quán)重進(jìn)行 sum pooling;
-
AUC 提升約 0.2%。
我們基于的考慮是用戶過去點(diǎn)擊的內(nèi)容肯定對(duì)他 2 將要點(diǎn)擊的內(nèi)容產(chǎn)生動(dòng)態(tài)影響,這個(gè)模型參考了阿里的 DIN 模型,它會(huì)把用戶看過的東西 Embedding,然后根據(jù) Attention Score 再乘起來,我們的做法有所不同,我們是基于 Topic,是過去用戶看過那些 Topic 下的內(nèi)容進(jìn)行劃分。
4.5 Last Display + GRU
根據(jù) 4.4 的思想,過去點(diǎn)擊的行為對(duì)現(xiàn)在能夠產(chǎn)生影響,那么同理,過去展示的內(nèi)容中沒有點(diǎn)擊的內(nèi)容對(duì)當(dāng)下的點(diǎn)擊行為同樣會(huì)產(chǎn)生影響,所以這里面增加了 Last Display(包括點(diǎn)擊和沒點(diǎn)擊的所有數(shù)據(jù))。
-
Last Display 經(jīng)過 Embedding 后與是否點(diǎn)擊結(jié)合,再進(jìn)入 GRU 模塊,最后狀態(tài)當(dāng)做 DNN 輸入;
-
AUC 提升約 0.4%。
4.6 多目標(biāo)
之前所有的模型都是基于 CTR 為導(dǎo)向來進(jìn)行設(shè)計(jì)的,但是這樣用戶的負(fù)反饋可能會(huì)比較多一些,因?yàn)橐恍╅L(zhǎng)尾的內(nèi)容,或者大眾化的內(nèi)容會(huì)比較多,影響用戶的體驗(yàn)。
后來考慮設(shè)計(jì)一個(gè)多目標(biāo)模型,一個(gè)是基于點(diǎn)擊率的模型,一個(gè)是基于收藏率的模型,基于點(diǎn)贊率,基于評(píng)論率等等,一共設(shè)計(jì) 8 個(gè)目標(biāo)。
從性能方面的考慮,我們將底層權(quán)重設(shè)置成共享的, 最后一層會(huì)根據(jù)不同的目標(biāo)進(jìn)行權(quán)重的訓(xùn)練。
主要分為以下步驟:
o 每個(gè) task 共享前面的幾層權(quán)重,可以節(jié)省訓(xùn)練和預(yù)測(cè)的計(jì)算量;
o Loss 可以是幾個(gè) task 的 loss 做簡(jiǎn)單線性加權(quán);
o 上線仍然要確定各個(gè) ctr 的加權(quán)值,經(jīng)驗(yàn)比較重要;
o 上線后線上表現(xiàn):點(diǎn)擊率基本不變,而其他的幾個(gè)指標(biāo),比如點(diǎn)贊,收藏大幅提升。
4.7 最終模型結(jié)構(gòu)
綜合以上模型的優(yōu)點(diǎn),最終設(shè)計(jì)出如上圖所示的模型。
五、經(jīng)驗(yàn)分享
1、對(duì)于隨時(shí)間變化的統(tǒng)計(jì)特征,比如用戶和內(nèi)容畫像的統(tǒng)計(jì)值,線上 service 應(yīng)當(dāng)紀(jì)錄請(qǐng)求時(shí)的值,生成訓(xùn)練樣本時(shí)直接從紀(jì)錄的日志里獲取,避免特征穿越問題;
2、如果發(fā)現(xiàn)線下效果好,比如 AUC 和 NDCG 提升明顯,但上線效果不顯著,很可能是特征不一致導(dǎo)致的,可重點(diǎn)排查;
3、線上線下最好使用同一套特征抽取框架,只需使用的相同特征配置便可保證一致性,我們 Global Ranking 使用同一套 proto 結(jié)構(gòu)和特征抽取模塊實(shí)現(xiàn);
4、做特征歸一化操作,發(fā)現(xiàn)有特別大的值,比如幾萬或者幾十萬,要先取 log ,不然會(huì)導(dǎo)致這個(gè)特征大部分值都趨向 0,相當(dāng)于征失效;
5、 輸入特征要做非法檢查,防止出現(xiàn) inf,nan,而導(dǎo)致模型訓(xùn)練出現(xiàn)異常的參數(shù);
6、對(duì)于線上的每次請(qǐng)求,用戶特征都是一樣的,可以只計(jì)算一遍用戶特征相關(guān)的 block,避免冗余運(yùn)算;
7、訓(xùn)練數(shù)據(jù)量要盡可能大,可以使用 FlatBuffer 結(jié)構(gòu)把訓(xùn)練數(shù)據(jù)存放在 HDFS 上,訓(xùn)練時(shí)直接從 HDFS 讀取,邊讀取邊訓(xùn)練;
8、線上模型要能自動(dòng)更新,過老的模型效果下降嚴(yán)重。
六、面臨問題
1、推薦頁與搜索頁的特性不同
-
搜索帶著 query 來的,結(jié)果與之相關(guān)性越高越好,不用太關(guān)心結(jié)果的多樣性;
-
推薦頁用戶沒有明確的目的,但是有興趣偏好和對(duì)結(jié)果的多樣性需求,推薦既要準(zhǔn)確又要多樣化。
2、CTR 預(yù)估模型是 pointwise 模型,沒有考慮單個(gè)內(nèi)容與其他內(nèi)容同時(shí)出現(xiàn)的影響。
3、用戶對(duì)感興趣的東西會(huì)出現(xiàn)審美疲勞,要及時(shí)抓住這種特點(diǎn),比如一個(gè)算法工程師看完幾個(gè)機(jī)器學(xué)習(xí)文章后就不想再看了,這時(shí)候要能推薦一些其他話題的內(nèi)容。
七、未來方向
1、強(qiáng)化學(xué)習(xí)
-
Actor:根據(jù)用戶過去的瀏覽和點(diǎn)擊行為生成推薦頁整屏結(jié)果;
-
Critic:接收到點(diǎn)擊或者其他正向行為作為 reward,同時(shí)訓(xùn)練 Critic 和 Actor 網(wǎng)絡(luò)參數(shù)。
2、優(yōu)點(diǎn)
-
能及時(shí)捕捉用戶的反饋,從而避免對(duì)同一話題產(chǎn)生審美疲勞;
-
推薦整屏幕內(nèi)容,避免 pointwise 方式下內(nèi)容較為集中問題。
3、缺點(diǎn)
- 模型結(jié)構(gòu)復(fù)雜,模型參數(shù)訓(xùn)練較困難。
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/10576464.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的知乎推荐页 Ranking 构建历程和经验分享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: solr查询工作原理深入内幕
- 下一篇: 阅读源代码的一点小技巧