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