為什么要特殊對待特殊人群?
- 新用戶,低活用戶的行為很少,個性化推薦不準確。個性化的召回和排序都需要基于用戶的歷史行為,如果歷史行為少,個性化就做不好,尤其是新用戶,這就需要策略把個性化做的特別好或者用非個性化方法來做彌補
- 新用戶,低活用戶容易流失,要想辦法促使他們留存。對于全體用戶,推薦系統要努力提升很多指標,比如留存,時長,消費等。而對于新用戶和低活用戶,只需要考慮留存,不需要考慮其他任何指標,所以只需要考慮優化留存
- 特殊用戶的行為(比如點擊率,交互率等)不同于主流用戶,基于全體用戶行為訓練出的模型在特殊用戶人群上有偏。要對特殊用戶人群用特殊模型來消除偏差
漲指標的方法
- 構造特殊內容池,用于特殊用戶人群的召回
- 使用特殊排序策略,保護特殊用戶
- 使用特殊的排序模型,消除模型預估的偏差
構造特殊的內容池
- 為什么需要特殊內容池?
- 新用戶,低活用戶的行為很少,個性化召回不準確(既然個性化不好,那么就需要保證內容質量好,用優質內容彌補個性化缺失)
- 針對特定群體的特點構造特殊內容池,提升用戶滿意度(例如,對于喜歡留評論的中年女性,構造粗評論內容池,滿足這些用戶的互動需求)
- 方法1:根據物品獲得的交互次數,交互率選擇優質物品
- 圈定人群:只考慮特定人群,例如 18 到 25 歲一二線城市男性
- 構造內容池:用該人群對物品的交互次數,交互率給物品打分,選出分數最高的物品進入內容池,分數高說明質量好,容易吸引用戶
- 內容池有弱個性化的效果,說明這個人群對這個池子的內容感興趣
- 內容池定期更新,加入新物品,排除交互率低和失去時效性的老物品
- 該內容池只對該人群生效
- 方法2:做因果推斷,判斷物品對人群留存率的貢獻,根據貢獻值選物品
- 通常使用雙塔模型從特殊內容池中做召回
- 雙塔模型是個性化的
- 對于新用戶,雙塔模型的個性化做不準
- 靠高質量,弱個性化做彌補(可以容忍雙塔模型的不準確)
- 額外的訓練代價?
- 對于正常用戶,無論有多少內容池,只訓練一個雙塔模型
- 對于新用戶,由于歷史交互記錄很少,需要單獨訓練模型。但不論有多少個內容池,新用戶只需要一個自己的雙塔模型就夠了
- 額外的推理代碼?
- 內容池定期更新,然后要更新 ANN 索引
- 線上做召回時,需要做 ANN 檢索
- 無論是更新內容池還是做召回,每多一個內容池,就需要多一份額外的算力,內容池越大,需要的額外算力越多
- 特殊內容池都很小(比全量內容池少 10 到 100 倍),所以需要的額外算力不大
特殊的排序策略
排除低質量物品
- 對于新用戶,低活用戶這樣的特殊人群,業務上只關注留存,不在乎消費(總曝光量,廣告收入,電商收入)
- 對于新用戶,低活用戶,少出廣告,甚至不出廣告
- 新發布的物品不在新用戶,低活用戶上做探索
- 新物品發布時,推薦做的不準,會損害用戶體驗。這沒辦法,畢竟一定要推薦出去。如果不做探索,推薦系統就不知道誰會喜歡這些物品
- 只在老用戶上做探索,對新物品做提權(boost)。老用戶受一點傷害并不會流失
- 不在新用戶,低活用戶上做探索,避免傷害用戶體驗。用這些特殊用戶做探索會得不償失
差異化的融分公式
- 新用戶,低活用戶的點擊,交互行為不同于正常用戶
- 低活用戶的人均點擊量很小;沒有點擊就不會有進一步的交互
- 低活用戶的融分公式中,提高預估點擊率的權重(相較于普通用戶,點進去看了才可能留存)
- 保留幾個曝光坑位給點擊率最高的幾個物品
- 例:精排從 500 個物品中選 50 個作為推薦結果,其中 3 個坑位給點擊率最高的物品,剩余 47 個坑位由融分公式決定。這 3 個坑位的目的是吸引用戶點擊
- 甚至把點擊率最高的物品排在第一,確保用戶一定能看到。如果用在普通用戶身上會損害核心指標
特殊的排序模型
差異化的排序模型
- 特殊用戶人群的行為不同于普通用戶。新用戶,低活用戶的點擊率,交互率偏高或偏低
- 排序模型被主流用戶主導,對特殊用戶做不準預估
- 用權力用戶訓練出的模型,給新用戶做的預估有嚴重偏差
- 如果一個 APP 的用戶 90% 都是女性,用全體用戶數據訓練出的模型,對男性用戶做的預估有偏差
- 問題:對于特殊用戶,如何讓排序模型預估做的更準?
- 方法1:大模型 + 小模型
- 用全體用戶行為訓練大模型,大模型的預估 ppp 擬合用戶的行為 yyy
- 用特殊用戶的行為訓練小模型,小模型的預估 qqq 擬合大模型的殘差 y?py-py?p,殘差是大模型犯的錯誤,我們希望小模型可以糾正大模型的錯誤
- 對主流用戶只用大模型做預估 ppp
- 對特殊用戶,結合大模型和小模型的預估 p+qp+qp+q,小模型的作用是糾偏
- 方法2:融合多個 experts,類似 MMoE
- 只用一個模型,模型有多個 experts,各輸出一個向量
- 對 expert 的輸出做加權平均
- 根據用戶特征計算權重(和MMoE的區別是這里的神經網絡輸入只有一個用戶特征)
- 以新用戶為例,模型將用戶的新老,活躍度等特征作為輸入,輸出權重,用戶對 expert 做加權平均。例:如果有兩個 expert,用戶剛剛注冊,那么新用戶 expert 的權重是 1,老用戶 expert 的權重是 0。如果介于新老之間那么兩個 expert都有一定的權重
- 方法3:大模型預估之后,用小模型做校準
- 用大模型預估點擊率,交互率
- 將用戶特征,大模型預估點擊率和交互率作為小模型(例如 GBDT)的輸入
- 在特殊用戶人群的數據上訓練小模型,小模型7的輸入擬合用戶的真實行為
- 方法1:大模型 + 小模型
錯誤的做法
- 每個用戶人群使用一個排序模型,推薦系統同時維護多個大模型
- 系統有一個主模型,每個用戶人群有自己的一個模型
- 每天凌晨,用全體用戶數據更新主模型,訓練 1 個 epoch
- 基于訓練好的主模型,在某特殊用戶人群的數據上再訓練 1 epoch,作為該用戶人群的模型、
- 短期可以提升指標;維護代價大,長期有害
- 起初,低活男性用戶模型比主模型的 AUC 高 0.2%
- 主模型迭代幾個版本后,AUC 累計提升 0.5%
- 特殊人群模型太多,長期沒有人維護和更新
- 如果把低活男性用戶模型下線,換成主模型,在低活用戶上的 AUC 反倒提升 0.3%