在线学习在爱奇艺信息流推荐业务中的探索与实践
概述
愛奇藝的信息流推薦業務每天會產生數十億規模的 feed 瀏覽,如此大規模的數據給模型訓練帶來了很大的挑戰。同時,信息流這類用戶與推薦系統的強交互場景也引入了很多有趣的研究課題。對于信息流推薦產品來說,用戶和產品交互性高,用戶興趣變化也很快。若模型不能及時更新,排序模型部署上線后,性能會緩慢下降。而對于排序模型來說,如何用較低成本完成百億樣本、千億參數 DNN 排序模型的及時更新是需要解決的首要問題。
引入在線學習是解決此類問題的首選方式。在線學習(Online Learning)能捕捉用戶的動態行為模式,實現模型的快速自適應,它對數據 pipeline 的穩定性、流式樣本的分布糾偏、模型訓練的穩定性以及模型部署的性能都提出了很高的要求,成為提升推薦系統性能的利器。在線學習為愛奇藝多個信息流推薦場景都帶來了明顯的效果增益,對新內容的分發也起到了明顯正向的作用,驗證了“唯快不破”的真理。
本文就來介紹一下愛奇藝技術團隊我們的相關成功實踐。基于學術界和工業界的經驗,探索出一套比較適合工業化實踐的 W&D 深度排序模型的在線學習范式,實現了消費流式數據、DNN 模型的實時訓練和及時更新。
在短視頻信息流推薦和圖文信息流推薦方面,完成了 AB 實驗和全流量上線,推薦效果和用戶體驗較之前的離線模型都獲得了較大的提升,短視頻信息推薦消費指標?+1.5%,圖文信息流推薦消費指標?+3.8%。此外,數據證明在線學習的上線對于新內容的分發有比較明顯的助益,也能在新內容上線當天進行快速試探,判別內容的優劣。以圖文信息流推薦為例,新 Feed 的平均分發量增益在?10%以上,而且這些 feed 的點擊率也有明顯提升。
信息流推薦排序模型目前的挑戰
目前,業界主流的信息流個性化推薦的排序模型目前基本都已轉向 DNN 模型,如 W&D、DeepFM 等,相比以往以 GBDT/LR/FM 為典型模型的淺層模型來說, 產生了下面幾個新的問題:
1. 模型更重
模型的寬度和深度,決定了模型參數空間的規則。DNN 模型是多層感知模型。億級別的 ID 特征 (UserID、ItemId、用戶行為序列等) 和 Dense 特征(統計特征、Session 特征、多模態 Embedding 特征)輸入,經過一個 1024 個激活 Cell 的 Hidden Layer, 模型參數可以很容易達到千億級別。
2. 訓練成本更高
有更多的訓練數據,迭代次數更多,DNN 模型才能收斂到最佳狀態。從樣本準備到整個模型訓練完成,周期更長,模型更新效率不高。而且訓練需要的硬件資源更多,目前基本是 GPU 訓練平臺為主,即使換成 CPU,還是需要數十倍的 CPU 資源才能匹配 GPU 訓練的效率。
3. 訓練收斂性問題
訓練一個百億樣本,千億參數的 DNN 模型要想要達到理想的效果,會遇到很多超參數調優問題,如 batch size,、學習率、正則系數、優化器的選擇等。這些參數組合的變化都可能會影響模型的最佳潛能。
從上面可以看出,要完成一個 DNN 模型的實時更新并非易事。而在傳統機器學習時代,只需要給模型最新的數據,通過在線學習算法(如 FTRL)做到模型的實時更新,實現了淺層模型的實時更新 [3,4,6]。在線學習需要的數據,訓練資源都明顯低于離線訓練場景。
DNN 模型的在線學習挑戰
DNN 模型的在線學習不能直接硬搬 LR+FTRL,主要的挑戰如下幾方面
:1. 解決 OOV 問題
目前已有的 DNN 模型基本都加入了 ID 特征來加強模型的記憶性。如何將新的 ID 快速加入模型的詞典,并通過在線學習更新其權重以及如何快速淘汰老的 ID,避免在 long running 場景下,模型詞典文件不會快速膨脹而不夠用,是一個較大的挑戰。
2. 非凸模型的在線梯度下降的收斂問題
目前還不能確定 Adam 家族是否還能應對 DNN 模型的在線學習場景,過一遍數據是否能收斂。
3. 正樣本 delay 實時數據分布不是真實分布時需要糾偏
廣告的場景如 CPA 類廣告,轉化類正樣本 delay 現象比較明顯。在愛奇藝短視頻推薦場景下,視頻的 label 邏輯不只與點擊相關,還要關聯到時長。用戶在觀看一個視頻結束后,才會上報時長日志。若點擊沒有關聯到時長,是不能作為正樣本的,需要等待時長日志到來。
DNN 模型的在線學習業界的解決方案
DNN 模型的在線學習其實已經在業界很多公司落地,阿里 XPS 平臺上通過在線學習訓練和更新的小時級 XNN 深度模型,在 2017 年的雙 11 期間應用在淘寶猜你喜歡和天貓推薦場景 [7]。阿里螞蟻金服團隊也在 2018 年基于類似底層平臺上線了在線學習深度模型。[1]
以阿里 XPS 為例,基于 C++ 實現了動態擴縮容的 embedding lookup 算子,底層是基于 C++ 實現的 XPS-ArrayHashMap,支持 ID 特征的增刪, 自適應的解決了 OOV 問題。其針對 DNN 模型,提出了 XNN 深度學習算法,自適應于 streaming data 的深度模型訓練。
現有的模型結構及訓練范式介紹
參考已有的業界的實踐,我們基于公司的深度模型訓練平臺,實現了在線學習在短視頻信息流和圖文信息流推薦的成功落地,下面介紹關于愛奇藝的實踐方案:
1. 主模型結構
這是一個 W&D 模型變種,但是 Wide 側和 Deep 側是各自經過一個 FM 后再進行結果融合:
- Deep 的輸入包括 Embedding 特征和 Dense 特征, Wide 側包括 GBDT 葉子節點,ID 類的 Sparse 特征, Embedding 特征和 Dense 特征;
- GBDT 的輸入主要是以統計特征為代表的 Dense 特征, 是一種基于模型的顯示特征組合;
- DNN 的優化器是 Adam, Wide 側優化器是 FTRL;
- 基于公司內部的深度學習平臺訓練離線模型。
2. 現有的模型遷移到在線學習的局限
- DNN 部分遷移到在線學習,可能不像 wide 側線性模型那么容易收斂。對于 DNN 深度模型的在線學習優化,目前還沒有成熟的優化器,FTRL 更適合線性簡單模型;
- GBDT 不適合增量 / 在線學習;
- 在線學習訓練持續 running 的情況下,Wide 側的輸入 ID 特征,在線學習訓練持續 running 的情況下, oov 幾率會顯著提升。
訓練范式
1. 在線學習 + 離線模型熱啟動的范式
愛奇藝技術團隊通過實踐探索,形成了一個比較成熟的在線學習框架——在線學習 + 離線模型熱啟動的范式。這里來先介紹下框架:
- 左側是在線學習,右側是離線學習:離線訓練仍然保留,它基于 7 天歷史數據訓練,主要是用于在線學習模型每天的熱啟動重啟。在線學習消費 Kafka 實時數據流,實時訓練模型;
- 數據實時化:在線學習的數據流從用戶行為數據到模型訓練樣本的生產都是在線進行的,實現了樣本、特征和時長數據的在線 Join, 數據流都通過 Kafka 向后傳遞;
- 模型訓練實時化:在線訓練任務消費訓練數據的 Kafka Topic,且只消費一次(one pass)。模型除了每天基于最新離線模型熱啟動重啟一次,當天都是 long running 的;
- 模型同步:模型按小時例行化導出模型文件同步給引擎,這里的同步效率可以自行調節。
以圖文信息流推薦為例,在線學習引入前后的整體數據流圖如下:
2. 數據實時化難點
- 多路實時數據的在線 Join,包括用戶行為數據, 特征等。
- 樣本歸因。因為行為上報的天然串行化,會導致 Label 的滯后性:用戶展示行為 << 用戶點擊行為 << 用戶播放日志。同一個用戶在同一個 feed 上產生的展示數據和點擊數據先后到達時,需要確定如何歸因樣本 label 和更新模型。
樣本歸因實踐
一個視頻 item 上的負樣本一般會先到達,后續同樣視頻上的正樣本到達,對于這兩個樣本在流式到達時如何處理并更新模型,目前有兩種范式:
我們對兩種方法都進行了嘗試,結論是后者更適合現有的工程架構,通過 loss 修正效果上并不弱于前者。
2. 實踐邏輯及困難解決
負樣本 Cache 策略:最終確定的 Cache 窗口為 10 分鐘,基于 impression 和 vv 的時間差分布統計,10 分鐘的窗口內有點擊的 impression 和 vv 的 join 成功率達 90%+。
基于 Cache 窗口的 Join 邏輯示意圖如下:
假定時間窗口大小 t1 是 20min,cache 保留窗口 t1’是 10min:
第一個時間窗口,我們結合 t1 和 t1’來統計信息,即 label 的歸因;
第二個時間窗口,我們結合 t1’,t2 和 t2’來統計 label。
沒有 cache, 每條最新樣本都去更新模型,這樣會存在 False Negative 或者說無法確定 Label 的樣本也更新了模型這樣的問題。Twitter 2019 最新的一篇論文 [6] 提出了如何在進行糾正,主要包括以下四種方法:
- 樣本重要性采樣 (importance sampling):機器學習模型一般是假設樣本符合一個特定數據分布,模型訓練就是一個搜索最佳的數據分布參數的過程。觀察到實時樣本流樣本分布由于包含了 FN 樣本,其實是一個有偏的分布。類似于強化學習等場景,會使用到重要性采樣方法對給予每個觀察到的樣本權重進行糾正,近似一個無偏數據分布。
- FN 矯正:模型擬合當前觀察到的有偏分布 b, 經過論文推導,無偏預測 p(y|x) 和有偏預測 b(y|x) 的關系如下。因此用包含 FN 的實時樣本訓練模型 b 后,預測時用下面的公式進行矯正即可。
- PU loss (Positive-unlabeled loss): 本質就是認為所有觀察到的負樣本都是 unlabeled. 因此對 loss 進行了如下改造,核心思想就是在觀察到一個實例的正樣本到達時,除了使用正樣本進行梯度下降,還會對相應的負樣本進行一個反向的梯度下降,抵消之前觀察到的 FN 樣本對 loss 的影響。
- 延遲反饋 Loss: 使用一個額外的模型去建模當前樣本的真實 Label 確定時的時間延遲,基于當前樣本距離上次展示的時間距離去評估當前樣本的 Label,是一個 true label 的概率。這個時間延遲模型和 pCTR 模型聯合訓練,優化 loss 如下,其中 Wd 就是時間延遲模型的參數。
我們嘗試了上面的第二種和第三種方法,目前線上使用的版本是第三種方法,論文實驗中效果最好的是第二種方法,這個可能和業務數據分布不一致有關。
模型實時化
在線學習場景下模型結構雖然和基線一致,但訓練方式和離線訓練存在一些不同
:1. GBDT 不適合在線學習
我們固定了 GBDT 部分,實驗期間 GBDT 不再更新,用作特征抽取器。所以這里需要定期更新,目前我們是按月更新,通過 AB 實驗看,更新是有一定收益的,所以這也促使我們正在實驗 DNN 的高階特征交叉方式來替換掉 GBDT。
2. 模型會基于離線模型進行熱啟動重啟。
因為 GBDT 固定,因此模型的熱啟動可以做到直接加載最新離線模型的 checkpoint,然后開始進行在線學習,持續更新模型參數。
a) 熱啟動的原因 1: 在線學習是 one pass 的,如果持續 long running,模型可能會因為一些局部 pattern 而被帶偏,基于離線模型熱啟動可以對其進行矯正。
b) 熱啟動的原因 2: 如果模型訓練是 long running 的,會導致 OOV 概率越來越大。實驗期間深度學習訓練平臺還不能做到自適應的動態 ID 增刪 [1],因此需要顯示的手動重啟,擴大 ID 空間。訓練平臺最新的版本已經支持了動態增加,后續會進行 long running 實驗。
3. 數據源不同。訓練采用和離線一樣的訓練框架,但是數據源是 Kafka, 每條訓練數據只進行一次梯度下降。
效果調優經驗分享
- 典型的在線學習對于訓練數據的消費是 One Pass 的,而離線模型的訓練是 multi-pass。從優化角度講,深度模型的在線學習是要解決在線非凸優化問題。FTRL 本身是一個適合在線學習的優化器。離線模型的 wide 側實際上已經是 FTRL, 只有 DNN 部分是 Adam。我們嘗試過把 DNN 部分的優化器也變為 FTRL,但效果是負向的,FTRL 比較適合稀疏線性模型的在線學習;
- 按小時例行的更新模型 vs 當模型性能超過基線時才更新模型:前者對于點擊率的指標更有利,該策略下 uctr 正向明顯。持續更新模型,能推出用戶最近感興趣的內容,點擊率容易高;
- 模型長期不熱啟動重置,效果是呈現下降的趨勢;
- 在線訓練消費樣本的輪數,我們做了下實驗對比,過多遍會更好一些,這可能要結合實際業務數據進行優化。
實踐效果
實踐證明,在線學習對于推薦效果和用戶體驗都有比較明顯的提升,愛奇藝短視頻信息流推薦消費指標提升 1.5%, 圖文推薦信息流消費指標相對提升 3.8%。
下圖給出了短視頻信息流產品推薦當天累積測試集的離線模型和在線學習每個小時推出的在線模型的 auc/wauc 對比,在線學習在當天測試集上表現優于離線模型。
1. 累積測試集:每個小時實時樣本流不放回抽樣 1.5% 加入累積測試集。T-1 小時的模型預測 T+1 hour 的數據,在線學習 AUC 是基于每個小時測試集的累積預測結果計算。
2. 離線模型:基于歷史 7 天數據訓練的離線模型,同時用于當天在線學習的熱啟動。
在圖文信息流推薦產品上,我們論證了實時特征 + 在線學習的組合更能發揮出實時特征的最大化效果。下圖是三個實驗的多天在線 AUC 走勢,可見實時特征 + 在線學習的 AUC 明顯高于基線,優于實時特征 + 離線訓練的組合。
后續優化
參考文獻:
總結
以上是生活随笔為你收集整理的在线学习在爱奇艺信息流推荐业务中的探索与实践的全部內容,希望文章能夠幫你解決所遇到的問題。