推薦精排模型之多目標模型

2021-02-15 AINLP

背景


做推薦算法肯定繞不開多目標,點擊率模型、時長模型和完播率模型是大部分信息流產品推薦算法團隊都會嘗試去做的模型。單獨優化點擊率模型容易推出來標題黨,單獨優化時長模型可能推出來的都是長視頻或長文章,單獨優化完播率模型可能短視頻短圖文就容易被推出來,所以多目標就應運而生。

剛開始做多目標的時候,一般針對每一個目標都單獨訓練一個模型,單獨部署一套預估服務,然後將多個目標的預估分融合後排序。這樣能夠比較好的解決推薦過程當中的一些負面case,在各個指標之間達到一個平衡,提升用戶留存。但是同時維護多個模型成本比較高,首先是硬體上,需要多倍的訓練、PS、和預估機器,這是一筆不小的開銷(一個月保守百萬左右吧),然後是各個目標的迭代不好協同,比如新上了一批好用的特徵,多個目標都需要重新訓練實驗和上線,然後就是同時維護多個目標對相關人員的精力也是一個比較大的消耗。

 

可以通過LTR(Learning To Rank)方法優化Item的重要性來解決多目標打算解決的問題,但是由於工程實現、推薦框架調整等方面的困難,相關方法在實際應用中比較少。現在主流的還是通過多任務學習訓練一個模型預估多個目標,然後線上融合多個目標進行排序。多個目標融合的時候很多公司都是加權融合,比如更看重時長可能時長的權重就大些,更看重分享,分享的權重就大些,加權係數一般通過AB實驗調整然後固定,這樣帶來的問題就是,當模型不斷迭代的時候,這個係數可能就不合適了,經常會出現的問題是加權係數影響模型的迭代效率。具體多個目標怎麼融合,這個裡面機制發揮的空間比較大,這裡不再贅述。

 

共享Embedding 多塔結構


底層共享embedding,三個目標三個獨立的塔,NN層各個目標完全獨立的。點擊模型使用全量有效曝光樣本進行訓練,時長模型和完播率模型使用點擊樣本進行訓練。經過多次迭代,這個結構上線後大盤PV和時長都有一定提升,每一個目標單獨來看,點擊指標基本微降,時長和完播率指標提升較多。

         

                 

 

MMOE


借鑑Google提出的MMOE,升級多目標模型,模型結構如下:Embedding層還是共享的,MMOE層對應每個目標分別給一個輸出,然後每個目標各自一個塔。MMOE模型相對Share-Bottom三塔結構,離線點擊指標有一定提升,時長和完播率基本持平,但是模型複雜度增大較多,訓練較慢。

 

MMOE結構如下:Expert是一個神經網絡,Expert個數根據訓練和預估性能做權衡,和任務數保持一致也可以。Gate是一個Softmax函數,個數與任務數一致,每個Gate的輸出個數與Expert個數一致。

 


其它嘗試


嘗試過在embedding與各個目標獨立的NN之間加入共享的NN層,比如把上面MMOElayer換成普通的NN層,這樣訓練發現完播率指標有提升,但是時長和點擊率指標下降,我們撤掉共享NN層之後,各個目標都取得了相對於單獨訓練的base模型的提升,但是完播和時長模型提升較大。

 

分析原因,撤掉共享NN後各個指標提升,應該是由於每個單獨的NN網絡模型複雜度不夠導致。同時,時長和有效閱讀指標提升較多,是由於訓練點擊模型使用的是全量曝光樣本,而時長和完播率模型使用的是點擊樣本,但是線上serving的時候時長和完播率模型都是面對全量樣本做預估的,訓練和預估時樣本分布不一致可能導致預估偏差較大,但是在多任務學習過當中,點擊率學習好的EMB是可以共享給時長和完播率完成遷移學習的,可能是EMB共享擴大了時長和完播率模型的學習空間,緩解了訓練和預估樣本分布差異。

 

完播率和點擊模型兩者相關性較大,所以在使用共享NN層時在其它指標下降的情況下,其指標也能提升。前期點擊模型的線上指標下降比較多的,整體也沒有收益,考慮到時長和完播率都是對點擊樣本進行學習,這可能對點擊模型的影響有點大了,於是稍微調大了點擊模型的學習率,加上撤掉共享NN層,整體指標基本就由負轉正了。

 

之前嘗試加入過互動模型(點讚、評論、收藏、分享),但由於樣本過於稀疏以及訓練和Serving的效率問題,最終沒有上線,後面有機會,還是值得嘗試一下的。

 

樣本空間不一致處理


三個目標的輸入是一樣的,都是全量有效曝光樣本,但是在時長和完播率這兩個塔,針對未點擊樣本,將其回傳梯度置零,這樣處理就相當於只使用點擊樣本在進行訓練了。如何理解呢?訓練其實就是一個梯度回傳的過程,將未點擊樣本的梯度置零,相當於這部分樣本的梯度未對網絡參數的調整起到影響,但是由於Mini-Batch 梯度優化算法最終會用整體修正梯度除batch樣本數量,所以在時長和完播率這兩個塔裡面除以的是Batch樣本裡面的點擊樣本數。

 

在點擊時長完播率三目標訓練當中,點擊模型的EMB共享可以彌補時長和完播率模型未能學習未點擊樣本造成的訓練和預估樣本分布偏差問題,但是時長和完播率模型的更新卻給點擊率模型的樣本造成了一定的擾動,相當於點擊樣本被多次訓練了,從而造成點擊模型點擊樣本和未點擊樣本的分布差異變大。通過增大點擊率的學習率,相當於給點擊模型加權了,這樣可以減小由於時長和完播率更新造成的點擊樣本和未點擊樣本之間的差距。這樣也確實給點擊模型的指標帶來了一定的提升。

正常來說,各個目標之間的Loss權重調整是不好把握的,當你對某個任務的loss加權的時候,不僅改變了當前任務的學習曲線,由於EMB共享,所以也會影響到其它任務,這種影響到底有利還是有弊呢,不知道,理論上也沒有保障,只能說試試看了。有論文使用每個任務的不確定度(uncertainty)來輔助對loss進行加降權,可以嘗試一下,還沒有做相關的實驗。

 

多目標的難點


也可以說是trick, 不同目標的訓練樣本不一致,比如點擊模型和時長模型,所以上面就有談到處理方法,那就是對只使用點擊樣本的任務將其未點擊樣本的回傳梯度置0,同時在更新相關任務的NN參數的時候根據點擊樣本數做平均。

 

然後是學習率的調整,這個其實可以根據不同任務的loss下降曲線來相應調整,我是根據離線和在線指標來進行調整,但是調大還是調小呢,那就要對不同的學習任務有比較深刻的理解。點擊任務的正負樣本分布被時長和完播給帶偏了,那麼增大其學習率自然可以緩解這種情況,但是時長和完播率則不然,點擊任務多出來的樣本一般來說會給另外兩個任務帶來額外的信息增益。

 

可以優化的點


1)點擊模型的輸出可以作為時長和完播率模型的輸入特徵,但是這個處理對於Serving時使用多線程對多個目標進行並行預估不友好。

2)可以研究不同目標loss加權的方法,使得不同目標的梯度更新能夠達到步調一致,整體的loss能夠穩定的降低。

3)訓練和預估支持的話,可以增大Expert的個數

4)MMOE裡面的Gate結構,可以與每一個Expert做成一個self-attention的結構

 

參考:

1)      推薦系統中的多任務學習

2)      美團「猜你喜歡」深度學習排序模型實踐

3)      多任務學習在美圖推薦排序的近期實踐

4)      多目標學習系統:如何讓知乎互動率提升 100%?

5)      MTL 在工業界如何更勝一籌

6)      YouTube 多目標排序系統:如何推薦接下來收看的視頻

7)      信息流短視頻時長多目標優化

8)      Modeling Task Relationships in Multi-task Learning with Multi-gateMixture-of-Experts

9)      Entire Space Multi-Task Model: An Effective Approach for EstimatingPost-Click Conversion Rate

 

由於微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:

(1)點擊頁面最上方"AINLP",進入公眾號主頁。

(2)點擊右上角的小點點,在彈出頁面點擊「設為星標」,就可以啦。

感謝支持,比心

進群請添加小助手微信 AINLPer(id: ainlper),備註推薦系統

推薦閱讀

這個NLP工具,玩得根本停不下來

徵稿啟示| 200元稿費+5000DBC(價值20個小時GPU算力)

完結撒花!李宏毅老師深度學習與人類語言處理課程視頻及課件(附下載)

從數據到模型,你可能需要1篇詳實的pytorch踩坑指南

如何讓Bert在finetune小數據集時更「穩」一點

模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法

文本自動摘要任務的「不完全」心得總結番外篇——submodular函數優化

Node2Vec 論文+代碼筆記

模型壓縮實踐收尾篇——模型蒸餾以及其他一些技巧實踐小結

中文命名實體識別工具(NER)哪家強?

學自然語言處理,其實更應該學好英語

史丹福大學NLP組Python深度學習自然語言處理工具Stanza試用

關於AINLP

AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。

閱讀至此了,分享、點讚、在看三選一吧🙏

相關焦點

  • 大數據模型迭代發展的歷程
    多目標學習現在是精排模型的基操,是行業內用的比較多的方案。精排多目標模型,調了一個多月線上效果都不好,怎麼提升?看badcase,看數據,單純看模型沒有什麼用?需要去找數據的原因,再就是這個問題是不是不適合多目標?
  • 從FFM到DeepFFM,推薦排序模型到底哪家強?
    首先,我會給大家介紹一下大規模推薦系統的整個流程框架和其中一些比較核心的技術點是什麼。第二,因為我們知道,做推薦系統模型會面臨兩個選擇,就是說傳統的線性排序模型,所以我會簡單地介紹一下模型的發展歷程,包括它們各自的特點。第三,FFM 模型有它的優點,也有它的問題,所以針對它的問題,我會介紹一個改進的版本,叫雙線性的 FFM 模型。
  • 推薦系統之Exploitation & Exploration
    可以嘗試使用個別探索性質強的召回做一下強插,比如說User-CF,因為精排就是一個貪心算法,即使召回出來了不錯的內容也有可能被精排給幹掉,使用強探索能力的召回做推送或者強插,結合精選內容池,說不定能夠取得不錯效果呢。 然後就是強化學習,以定義的長期收益作為目標,在與用戶的交互過程當中持續進行學習。
  • 推薦多目標之自適應權重學習
    >在  推薦系統之多目標模型 一文當中跟大家討論了工作中實踐過的一些多目標的模型,比如最基礎也是最經典好用的多塔多目標模型,其結構如下圖所示:                            原因也很清楚,時長和完播率預估的時候針對的是全量樣本,但是單獨訓練的時候,只會使用點擊樣本來訓練,所以有點擊任務訓練好的全量樣本的Embeding加持,這兩個任務在多目標模型當中當然會比單獨只是用點擊樣本訓練要好;而與此同時,對於點擊任務來說,時長模型和完播率模型就有點吊車尾的意思,我點擊任務embedding訓練得好好的,你時長和完播率就過來幹擾一下,當然效果就要掉了。
  • 萬字長文帶你了解推薦系統全貌
    本文將從實際經驗出發,為大家解構如何從從零搭建推薦系統,希望跟大家能夠相互交流,如有錯誤之處煩請指正
  • 推薦系統架構與算法流程詳解
    如果說網際網路的目標就是連接一切,那麼推薦系統的作用就是建立更加有效率的連接,推薦系統可以更有效率的連接用戶與內容和服務,節約了大量的時間和成本。精排:對於召回並過濾後的內容進行排序,將百量級的內容並按照順序推送。混排:為避免內容越推越窄,將精排後的推薦結果進行一定修改,例如控制某一類型的頻次。強規則:根據業務規則進行修改,例如在活動時將某些文章置頂。
  • 阿里是如何用 BERT 做序列推薦的?
    由於用戶的行為序列很像是文本序列,而Bert模型算是當前自然語言處理領域數一數二的模型,其使用Transformer的Encoder進行預訓練任務,能夠有效利用雙向信息,因此本文考慮將Bert用於推薦任務。接下來,咱們就來介紹BERT4Rec模型吧。2、BERT4Rec模型介紹使用BERT進行序列化推薦,其整體的模型結構如下:
  • 使用阿里雲平臺從0到1搭建推薦系統
    總結起來,召回和排序有如下特點:召回層:候選集規模大、模型和特徵簡單、速度快,儘量保證用戶感興趣數據多召回。排序層:候選集不大,目標是保證排序的精準,一般使用複雜和模型和特徵。在實際的生成環境中部署推薦系統時,當物品庫很大時,召回模塊的返回結果可能是在萬的量級,一般會把上述排序模塊拆分成粗排、精排、重排三個模塊,粗排模塊使用簡單的機器學習模型進一步過濾掉部分候選物品,保證進入精排的物品量級在一千以下,精排模塊使用較複雜的模型給每個候選物品計算一個排序分。
  • 推薦系統之特徵構建
    以信息流推薦場景為例,目標是希望推給用戶的內容都是用戶喜歡的。怎麼去衡量用戶是否喜歡呢?我們可以通過用戶對推薦的某篇文章或視頻的點擊、點讚、評論、轉發、收藏、瀏覽播放時長等數據來綜合衡量用戶對該文章或視頻的喜歡程度;還可以通過用戶打開APP的次數、用戶返回APP的時間間隔、用戶一次停留時長等來衡量用戶對APP的滿意程度,這從某種程度上也可以反應用戶對推薦內容的滿意程度。 知道了目標,確定了衡量目標的標準,接下來就可以圍繞這些標準來做特徵了。
  • 基於多目標優化的推薦系統綜述
    推薦系統已經廣泛應用於多個領域,其通過根據用戶偏好推薦可能感興趣的物品來進行輔助決策。
  • Facebook刷新開放域問答SOTA:模型訓模型!Reader當Teacher!
    然而,這類分階段檢索的模型仍然存在一些問題:它始終需要進過基於詞頻的檢索,有信息損失;每次預測都需要將較大量的文本送入BERT進行精排。能否在一開始就用BERT這類效果更好的模型預先編碼好所有段落,在檢索的時候直接進行向量搜索呢?
  • 推薦系統遇上深度學習(十九)--探秘阿里之完整空間多任務模型ESSM
    的比例CTCVR:從impression到conversion的比例pCTR:p(click=1 | impression)pCVR: p(conversion=1 | click=1,impression)pCTCVR: p(conversion=1,click=1 |impression) = p(click=1 | impression) * p(conversion
  • 序列推薦模型梳理(Sequential Recommendation)
    序列推薦的模型,隨著整個CS research領域的發展,也是一直在不斷變化。從最開始的Markov chain,到後來的RNN,CNN模型,以及現在流行的transformer。每個時期的序列推薦模型,基本上也是對應著該時期用的比較多的NLP模型。本文梳理了序列推薦模型的發展變化,幫助大家理清楚序列推薦系統的設計思路。
  • 文章推薦系統之基於 FTRL模型的在線排序
    ,FTRL 模型首先也是要完成訓練集的構建。首先開啟會話,將 train 中的特徵和標籤分別傳入 write_to_tfrecords() 方法,並利用多線程執行import tensorflow as tfwith tf.Session() as sess: # 創建線程協調器 coord = tf.train.Coordinator(
  • NLP集大成之預訓練模型綜述
    排序語言模型(PLM)為了解決MLM在訓練與處理下遊任務時輸入形式不完全一致的問題,XLNet提出了排序語言模型。PLM的主要思想是:將文本序列隨機打亂,隨機抽取其中幾種序列,再從這幾個序列中選擇幾個詞作為目標,用其他所有詞和目標詞的位置來預測。去噪自編碼器(DAE)去噪自編碼器的思想是:使用部分損壞的輸入去還原未原始輸入。
  • Transformer在目標檢測領域的開山之作DETR模型
    莫慌,今天小編就為萬千開發者破局~這個破局點就是:基於transform的目標檢測算法DETR,簡潔的pipeline,去除NMS、Anchor設計,且在COCO數據集上的指標與Faster RCNN相當。本項目將為大家詳細介紹DETR算法。同時,將帶領大家使用飛槳2.1版本在COCO數據集上實現基於DETR模型的目標檢測,以及使用訓練好的模型進行評估和預測。
  • 【AI實戰】手把手教你訓練自己的目標檢測模型
    目標檢測是AI的一項重要應用,通過目標檢測模型能在圖像中把人、動物、汽車、飛機等目標物體檢測出來,甚至還能將物體的輪廓描繪出來,就像下面這張圖
  • 《文章推薦系統》系列之基於 FTRL模型的在線排序
    構造 TFRecord 訓練集和前面的 LR 離線模型一樣,FTRL 模型首先也是要完成訓練集的構建。在上篇文章中,我們已經知道,可以通過讀取用戶歷史行為數據,及文章特徵和用戶特徵,構建出訓練集 train,其中包括 features 和 label 兩列數據,features 是文章特徵和用戶特徵的組合。
  • PyTorch 預訓練模型,保存,讀取和更新模型參數以及多 GPU 訓練模型
    目錄PyTorch 預訓練模型保存模型參數讀取模型參數凍結部分模型參數,進行 fine-tuning模型訓練與測試的設置利用 torch.nn.DataParallel 進行多 GPU 訓練1.with torch.no_grad():PyTorch 將不再計算梯度,這將使得模型 forward 的時候,顯存的需求大幅減少,速度大幅提高。注意:若模型中具有 Batch Normalization 操作,想固定該操作進行訓練時,需調用對應的 module 的 eval() 函數。