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