知乎首頁推薦系統

收藏待读

知乎首頁推薦系統

前記

架構部分主要是針對業務的發展把召回、排序等模塊進行了可配置化和選型梳理

算法部分基本上參考youtube2016和alibaba2018的思路對系統進行了重構,包括召回和排序,也結合自己的業務做了一些優化,值得參考。

系統架構

  • 高並發場景從python到golang,利用抽象工廠模式來實現可插拔
  • 解決支持多隊列混排和支持多路召回
  • 具體的召回方式主要是ES + Redis + ANN 的模式進行構建。ES 主要支持相對複雜的召回邏輯,比如基於多種 topic 的混合召回;Redis 主要用於支持熱門召回,以及規模相對較小的 CF 召回等;ANN 主要支持 embedding 召回。
  • 離線任務和模型的管理問問題
    • 離線任務的代碼統一到一處管理
    • 離線任務管理平台,將所有任務以通用包的形式進行管理
    • 任務結果的監控體系
  • 特徵穿越問題
    • 在線代替了離線,通過在線落特徵日誌,而不是 Raw Data,並統一了特徵日誌 Proto,如此就可以統一特徵解析腳本。
  • StatsD + Grafana + InfluxDB 的監控系統,因為召回已經用配置的方式,那麼剩下的召回源的比例關係,還有特徵分佈,ranking 得分分佈都可以很方便的獲取,而不用一個一個開發

召回

  • 多路召回:用戶畫像、內容標籤、內容源信息、關注關係隊列、搜索關鍵詞隊列、用戶興趣召回感興趣的內容,根據搜索關鍵詞進行相關推薦
  • DNN召回1.0
    • 用戶 128 維的 Embedding 表示
    • 冷啟動:看到內容用戶的 Embedding 是什麼以及點擊這些內容用戶的 Embedding 是什麼,我們可以利用這份數據把這些新產生內容的 Embedding 計算出來更新到 Embedding 庫裏面去
  • 準確度 DNN 比起 ALS 來講提升了10倍的量級
  • DNN召回2.0
    • 原始數據比如長度有多少,有沒有圖片,經過三層的網絡之後會生成 Feed Embedding,可以直接得到 Content Embedding,解決新內容的召回機制問題
    • 1)User Representation Network 引入 FM Pooling 層,學習用戶高頻消費行為的交叉特徵,會讓 Top100 的精確度提高 8%,2)我們把展示未點擊的數據作為特徵引入到 User Representation Network 裏面,其中會用到歷史搜索和歷史閱讀數據。3)展示了但是跳過的內容會在採樣的時候加大權重,把它成為負例的概率變得更大,讓用戶的行為來指導採樣。

排序

  • GBDT -> DNN -> ATTENTION+LSTM , 強化學習
  • 引入 FM 層作為這些類別之間的 Sparse Input 之間的交叉,AUC 提升了 0.2%,CTR提升了 1%。引入 CNN 及 LSTM 分別作為文本Encoder/Last Action Encoder,單用戶使用時長提高 50 秒。
  • 引入 Attention 機製作為用戶 Embedding 和 Candidate Embedding 之間的交叉權重,單用戶使用時長增加了 40 秒左右
  • 多目標:我們使用了 CTR 預估模型預訓練網絡,利用 Parameter Hard Sharing,點擊和點贊這兩層共享之前的權重,會有一個獨立的隱藏層 model task 自己的目標,這樣能降低前向/反向傳播中的計算量。
  • 將連續值預測轉化成離散值預測:閱讀時長的分佈,這個分佈與正態分佈比較類似。所以我們使用了 z-value 來對閱讀市場進行離散化,離散化之後會把閱讀時長分為五等——沒點擊、點擊了閱讀時長低、點擊了閱讀時長中等、點擊了閱讀時長偏高、點擊了閱讀時長非常高
  • 修改了 Softmax 函數:如果預測出的檔數和實際用戶閱讀時長檔數差太多,我們加一個比較大的修改函數,讓這種樣本的 loss 加大

模型訓練問題和業務問題

  • 樣本組織:線上進行實時打點避免穿越;正負樣本進行不同採樣率的實驗
  • 特徵工程:分佈範圍比較大的特徵,有一萬個贊也有幾萬個贊的,做 CTR 預估的過程中贊量的影響會變得非常不平均,所以通常會進行特徵的歸一化和 boxing,分成不同的段輸入
  • 模型評估:做了一個 DCG Gain 收益的指標,比AUC具有更高的參考意義
  • 多樣性問題:一個內容出現幾次之後你沒有點擊,之後都不會推薦相似的內容
  • 信息繭房:針對老用戶及興趣比較均勻的用戶,適當減少興趣探測力度,在探測過程中也會盡量使用 Tag 之間的關聯信息增強探測效率

總結

  • ES也許在我們目前的場景中能發揮用處,而不用人工來進行索引拆解
  • DNN來進行召回和排序看起來已經是業界非常通用的方法了,而且ESSM和DIN、DIEN這些ali的方法看起來工業屆也是用起來比較合適的
  • 特徵工程其實有很多統計的工作
  • 配置化不僅策略上線方便,監控也方便

原文 : Go語言中文網

相關閱讀

免责声明:本文内容来源于studygolang.com,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。