快手精排模型迭代


https://ai.51cto.com/art/202102/644214.htm

 

問題1:CTR 模型缺乏個性化

問題:

快手認為,DNN, DeepFM這一類簡單的全連接深度模型,在全局用戶的共建語義模式下缺乏個性化。

目標:

在網絡參數上為不同用戶學習一個獨有的個性化偏差。

借鑒:

LHUC,為每個說話人學習一個 hidden unit contribution。

快手的做法:

PPNET,parameter personalized net。一種 gating 機制,可以增加DNN網絡參數個性化,並加速模型收斂。

快手的效果:

2019年全量上線,顯著提升CTR 目標的預估能力。

 

具體做法:

1. gateNN:

  - 輸入

    id 類特征,包括, user_id, photo_id, atyhor_id。

    原始輸入給模型的所有特征的 embedding。

    這兩類特征的 embedding 會拼接在一起,作為 gateNN 的輸入

  - 結構

    2層神經網絡

    第二層的激活函數是 2*sigmoid。目的是將約束控制在 【0, 2】,默認值是1。當默認值是1時,等價於原始的模型。

    

2. 每一層神經網絡的輸入,多增加了和  gatenn 的 element-wise product,以此作為個性化偏置。

3. gateNN 不對原始網絡做梯度下降,以防防止收斂。

 

 

 

 

 

多目標模型

背景: 訓練數據里面包含雙列發現頁和全屏精選頁兩種異構數據。

快手認為:單列交互行為都是基於 show 發生的 (很像我們的 feed),並沒有像雙列那樣有非常重要的點擊行為(很像我們的push)。

快手做的工作:

  - 模型層面,嘗試拆解出單列的數據,單獨優化。 

  - 特征層面,復用雙列模型特征,只是針對單列的目標,需要額外添加個性化偏置特征和統計特征。

  - embedding 層面,前期單列的數據少,不能保證收斂。

    - 最初使用雙列數據主導訓練

    - 后面改用單列用戶數據主導訓練

  - 網絡結構

    - 基於 shared-bottom,不相關的目標獨占一個 tower。

  - 暴露的問題

    - 沒有考慮到單雙列的 embedding 分布差異,造成了 embedding 學習不充分。

 

快手的改進工作

  - 模型層面,將 shared-bottom 網絡替換成 mmoe 的 expert 層

    - 特征層面,進行了語義統一,修正在單雙列業務中語義不一致特征(click_history feed流里面用的是全部的點擊歷史,push只用了push的 show history 是不是要統一)

  - embeeding 層面,空間映射,設計了 embedding transform layer。幫助單雙列 embedding映射到統一空間分布。

  - 特征重要性層面,slot-gating layer,為不同業務做特征重要性選擇?

 這四個方面,總歸是為了多任務,提取不同表征。

 


特征淘汰機制

背景: 每個ID 單獨映射一個 embedding 會使得機器內存很快炸掉。傳統的 lru, lfu 只考慮了頻率信息,主要是為了最大化緩存的命中率。

方案:全局共享的嵌入表 gset, 每個特征定制 feature score進行淘汰。

思想:針對低頻 ID,為防止這些特征無意義的進入和淘汰,設置准入門檻!

改進:

  - 新的存儲器件, INTEL AEP。

  - 實現底層的 kv引擎

 

 

 

 

 

 

 

短期行為序列模型

背景:用戶的行為特征豐富且多變。

常見解決方案:

  - 對於用戶歷史的行為進行 weighted sum

    快手 baseline 是所有用戶行為簡單的做 sum pooling。在單列場景下,show 是被動接受的,用戶需要觀看一段時間之后再做反饋。

  - 通過 RNN 之類的模型,進行時序建模

  - 改進!借鑒 transformer (encoder + decoder)

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM