作者在《深度學習在推薦系統中的應用》這篇文章中對YouTube在2016年提出的一個兩階段的深度學習推薦模型進行了詳細介紹,該模型是深度學習在推薦系統中的應用最經典的模型之一。後面(去年)YouTube又提出了一個針對推薦排序階段的多任務深度學習模型,這即是這篇文章我們要介紹的。
在本篇文章中,我們從問題背景及算法方案簡介、排序算法模型整體框架、排序算法模型核心模塊、排序模型核心亮點解讀、建模過程中的挑戰、模型未來優化的方向等6個方面來介紹這篇非常有學習參考價值的文章。跟16年那篇文章一樣,這篇文章也是難得的講解工業級推薦系統算法工程實踐的佳作。希望讀者讀完後可以從中受到啟發,能夠更好地從工程實踐、問題建模、優化目標等角度來思考怎麼構建推薦排序模型,從而更好地學習推薦系統算法設計的哲學。
一、問題背景及算法方案簡介
該論文提出了一個在YouTube視頻分享平臺上基於當前觀看視頻預測用戶下一部要觀看的視頻(具體產品形態見下面圖1)的大型多目標推薦排序系統(見參考文獻1)。該論文聚焦在推薦排序階段,通過構建一個複雜的大容量模型從候選集中挑選出用戶最可能看的視頻作為最終推薦結果。該系統面臨許多真實業務場景中的挑戰,主要體現如下:
1. 面臨多個不同甚至相互衝突的的排序目標;比如,我們希望用戶觀看某個視頻,並且還希望他能夠給視頻高評分並分享給他的好友。
2. 用戶對推薦結果隱式反饋產生的選擇偏差;比如用戶可能會觀看一個評分比較高(因此排在推薦列表的前面)的視頻但是用戶本身不是特別喜歡這個視頻。
為了解決如上兩個現實問題,論文通過軟參數共享技術(soft-parameter sharing techniques,比如Multi-gate Mixture-of-Experts,簡稱MMoE,見參考文獻3)來優化多個排序目標。另外,通過引入wide & deep框架(參考文獻4),該模型增加一個整合了偏差信息(位置偏差等)的淺層塔結構來解決選擇偏差問題。最終通過在YouTube上做在線AB測試驗證,發現該模型確實可以顯著提升多種排序目標的推薦質量。
圖1:YouTube推薦下一部要觀看的視頻(用戶看完左上角視頻會連播右邊一列視頻,即是所謂的連播推薦)
二、排序算法模型整體框架
在上一節我們介紹了該論文的背景知識,在這一節,我們來介紹具體的算法模型,我們介紹該算法怎麼通過引入不同的模塊來解決上一節提到的兩個問題的。
該算法模型的架構如下圖2,該模型將最終需要優化的目標分為如下兩大類:
1. 用戶參與度(engagement objective)目標
比如用戶的點擊、用戶對推薦視頻的接觸程度(視頻觀看比例等)等屬於參與度指標。
2. 用戶滿意度(satisfaction objective)目標
比如用戶喜歡一個視頻(圖1中的」頂一下「按鈕)、用戶給推薦的視頻評分等都屬於滿意度目標。
為了學習和估計多樣的用戶行為,該模型基於wide &deep模型架構做了拓展,採用MMoE(參考文獻3)技術來自動學習多個可能存在衝突的目標的共享模型參數。下圖中間偏右的Mixture-of-Experts模塊從多種輸入數據源中學習數據不同維度的特徵,每個維度可以類比為某個方面的」專家「(Experts),再通過使用多個門控網絡(Gating Networks)模塊(見下圖中間部分),不同的學習目標可以選擇不同的或者共享的」專家「來最終優化多目標任務。
為了減少從有偏差的訓練數據中產生的模型偏差(比如位置偏差),該模型加入了一個淺層塔(shallow tower)模塊(見下圖左邊藍色的shollow tower模塊),這個模塊可以類比wide & deep模型中的wide部分。該模塊通過整合推薦的視頻的位置信息等可能產生偏差的信息,最終作為主模型的偏差項(淺塔模型輸出是一個具體的數值)整合進主模型進行學習,而在推斷時,可以將位置參數設置為pos=1來消除位置產生的影響。
圖2:多任務排序模型架構
該模型通過部署到YouTube平臺中進行AB測試,相對原來的模型,在用戶參與度和用戶喜好度等指標上都有較大提升。
通過上面的簡單介紹,總結來說,這篇論文的主要貢獻有如下幾點:
1. 引入了一個端到端的推薦排序模型;
2. 將排序模型抽象為一個多任務學習問題,並且利用MMoE技術來優化多目標學習;
3. 通過採用wide & deep架構,引入淺層塔結構避免位置偏差;
4. 通過在YouTube上部署AB測試,證實了該模型可以大大提升預測效果;
三、排序算法模型核心模塊
我們在第二節對論文中算法模型的整體框架進行了簡單介紹,知道了該模型的架構、解決的問題以及該論文的主要貢獻,下面我們對模型的細節進行更深入的解讀,讓讀者更好地理解該模型的精妙之處。我們從如下4個維度來講解模型的實現細節。
1. 模型系統概述
該論文中的排序系統學習兩類用戶反饋:用戶參與行為(如點擊、播放等)和用戶滿意度行為(喜歡、不喜歡等)。對每個待排序的候選視頻,排序模型利用候選視頻的特徵、query(如用戶播放歷史或者用戶人口統計學特徵等)、上下文(如觀看時的時間等)作為輸入來預測多種用戶行為(見下面圖3)。
圖3:排序模型的輸入與目標
該論文採用LTR(learning to rank)框架,將預測問題建模為分類或者回歸問題。具體是利用point-wise方法,而不是pair-wise或者list-wise LTR方法,主要是因為point-wise更簡單,可以有效地拓展到大規模的候選集排序中,儘管pair-wise和list-wise方法可以增加預測結果的多樣性。
2. 排序目標定義
排序模型利用用戶的行為作為訓練的label。在1中提到排序模型預測參與性目標與滿意性目標。對於參與度目標(如點擊與播放),將預測行為建模為二分類任務(如點擊) 和回歸任務(如用戶播放時長)兩大類。類似地,對於滿意度目標,也可以建模為二分類任務和回歸任務兩大類,比如,喜歡某個視頻可以看成是二分類任務,對視頻進行評分可以看成是回歸任務。對於二分類任務,可以採用交叉熵(cross entropy)損失函數,而對於回歸任務,可以採用平方損失函數。
一旦多任務排序的目標和建模問題類型確定了,我們可以訓練多任務排序模型來進行最終的排序。對任意一個候選視頻,我們通過多個目標預測模型的輸入獲得一個綜合得分(通過多個預測模型得分的加權乘積,權重通過手動調整,需要權衡用戶參與度和滿意度目標)。
3. 利用MMoE技術來對任務的相關性與衝突性建模
多目標排序系統的學習一般使用一個共用的底層模型(見下面圖4左邊的網絡結構),但是硬編碼的參數共享往往對學習多目標是有副作用的,特別是當這些不同學習任務相關性很低時。為了避免這種情況,這篇論文採用了MMoE技術,MMoE採用軟參數共享結構,可以消除多任務目標中的存在衝突的目標。
MMoE採用Mixture-of-Experts(MoE)結構應對多任務學習,讓多個任務共享這些「專家」,同時,每個任務配備一個訓練好的門控網絡(gating network)來協調不同「專家「所起的作用。相比於共享的底層模型結構,MMoE需要更少的參數。MMoE的核心思想是對每個學習任務將共享的ReLU層替換為MoE層並加上門控網絡。
推薦排序系統通過在共享的隱含層之上增加」專家「層(見下面圖4的右邊網絡結構),讓最終的模型可以從輸入中學習模塊化的信息。在輸入層或者隱含層之上增加」專家「層,最終可以更好地對多模態的特徵空間進行建模。但是直接加在輸入層之上會增加模型訓練和推斷的時間開銷(因為輸入層維度相比隱含層包含更多的參數,參數越多,訓練效率往往越低),因此該論文採用」專家「層直接加在隱含層之上的方法。
圖4:利用MMoE來取代共享的網絡層
該模型的」專家「網絡相當於參考文獻3中的利用ReLU作為激活函數的多層感知機。對於任務 k 和預測值 及最後一個隱含層 。包含n個」專家「的MMoE層在任務k上的輸出為: 。可以用如下方程來表示:
這裡 是共享隱含層的低維嵌入向量,是任務k的門控網絡, , 是第 i 個分量,而 是第 i 個」專家「。門控網絡是輸入通過簡單線性變換後再經過softmax變換,即
這裡, 是線性變換的自由參數。」專家「的數量可以設置為很多個,但是論文構建的模型中只用少量的」專家「,期望」專家「可以被更多的任務共享,這樣做主要是期望提升模型的訓練效率(」專家「數越多參數越大)。
4. 通過整合淺層塔結構剔除位置等帶來的偏差
隱式反饋數據被廣泛用於排序學習模型的訓練中。從用戶行為日誌中可以獲得大量的隱式反饋信息,因此可以利用複雜的神經網絡模型來學習排序特徵。但是,很多隱式反饋是從推薦排序系統的產品交互中產生的(我們通過給用戶推薦視頻,用戶點擊推薦的視頻產生隱式反饋行為),因此是帶有偏差的。位置偏差(推薦的視頻在推薦列表中所排的次序)及其他類型的偏差被大量研究者在排序學習模型中所證實。
在我們的排序系統中,這裡的查詢請求是當前用戶正在觀看的視頻(如果將推薦問題看成一個搜素問題,那麼當前在看的視頻可以等價於搜素的查詢關鍵詞),候選視頻是相關的視頻,用戶通常傾向於點擊並觀看顯示在列表頂部的視頻,而不管這些視頻的真實用戶效用(與觀看視頻的相關性、用戶的偏好)如何(這是一種先入為主的效應,因此會產生位置偏差)。我們的目標是從排序模型中消除這種位置偏差。在我們的訓練數據中或在模型訓練過程中通過建模減少選擇偏差可以提升模型質量。
我們的模型採用跟wide & deep類似的結構,將模型預測分解為兩個部分:來自主塔的用戶效用(user-utility)部分和來自淺層塔的偏差部分。具體地說,我們訓練一個包含選擇偏差(如位置偏差)特徵的淺塔模型,然後將其輸出添加到主模型的Logit中,如下圖5所示。在訓練中,使用所有視頻的位置信息,採用drop-out的思路,隨機丟棄10%的位置信息,以防止我們的模型過度依賴位置特徵。在模型推斷期間,將位置特徵設置為缺失值(這樣所以視頻的位置信息都不考慮了,從而剔除了位置偏差)。同時我們將位置特徵與設備特徵交叉(是因為在不同類型的設備上觀察到不同的位置偏差)。
圖5:增加淺塔層便於學習模型的偏差(如位置偏差)
四、排序模型核心亮點解讀
通過上面的詳細講解,我們介紹完了這篇非常有工程參考價值的推薦排序學習模型。在這一節我們來梳理一下該模型的核心亮點,這些點都是值得我們參考借鑑的。
1. 通過多任務學習來進行排序
該模型通過將用戶的行為分為參與度行為與滿意度行為兩大類,作為獨立的任務,通過機器學習中的多任務學習框架來建模。參與度行為更多的是隱式反饋,而滿意度行為更多的用戶的主動反饋,在同一個模型中整合這兩類反饋可以充分利用已知信息,提升模型的精準度。使用多種類型的隱式反饋信號和多個排序目標,我們獲得了更多調控手段,更好地平衡模型預測結果和用戶真實興趣之間的關係。
2. 通過MMoE技術來平衡多目標
有了多任務框架,那麼怎麼來學習和平衡這兩類任務呢?MMoE框架通過在不同任務之間共享」專家「的方式來更好地平衡多任務之間的衝突和相關關係,可以更好地學習多任務模型。這個思想是非常樸素的,不同的」專家「有不同的優點和特長,不同任務通過在不同」專家「上學習到不同的權重參數分布(可以簡單理解為選擇適合自己的」專家「),最終達到更好地刻畫每個任務的目的,最終提升整體模型的效果。
分布式訓練一般可能會導致模型發散。在MMoE模型中,採用softmax激活函數的門控網絡會導致」專家「分布不平衡的問題,最終導致很多」專家「的效用為0,該論文作者在實驗中發現大概20%的概率會出現這種情況,作者採用drop-out的方式來解決了該問題,具體就是採用10%的概率隨機設置」專家「的效用為0,並且重新歸一化softmax的輸出。
3. 通過整合位置信息來消除偏差
採用wide & deep的雙塔結構,在淺層塔中通過整合位置信息,讓模型學到位置偏差,最終在模型推斷時剔除掉位置偏差,從而讓模型有更好的表現。位置偏差等選擇偏差是推薦算法工程師在構建推薦模型中很少會考慮的(但是一般是會意識到這個問題的)的一類影響因子。該模型提供了一種消除位置偏差的解決方案和思路。
4. 按照時間序將數據灌入模型訓練
作者按照樣本產生的時間順序依次訓練模型。先訓練之前的數據,當有新的樣本產生時再將新樣本加入訓練中。通過這樣做,模型可以適應最新的數據。這對於許多實際的推薦應用來說是非常關鍵的,在這些實際應用中,數據分布和用戶模式會隨著時間的推移而動態變化。
五、模型構建過程中面臨的挑戰
在構建YouTube排序推薦模型過程中會面臨很多問題與挑戰,這裡我們簡要整理一下,本篇論文對這些問題與挑戰給出了相應的解決方案,在前面都有所講解。這些問題及經驗教訓值得我們多思考。
1. 構建基於神經網絡的推薦排序算法面臨的問題
許多推薦系統研究擴展了最初為傳統機器學習應用設計的模型體系結構,如自然語言處理的multi-headed attention和計算機視覺的cnn算法。然而,許多適合於特定領域的表示學習的模型體系結構並不直接適用於YouTube的推薦需求。這是由於:
(1) 多模態特徵空間
YouTube排序模型依賴多種數據源的特徵,這些特徵包括類別特徵、文本、圖像等等,從混合特徵中進行學習是非常有挑戰的。
(2) 可拓展性及多目標排序
很多模型結構被設計來建模某種信息,它們在提升某個目標的同時可能損害另外一個目標,通過構建複雜的模型結構來處理多目標又往往無法拓展到大規模數據場景。
(3) 包含噪音及局部稀疏的數據
排序系統需要訓練視頻和查詢的嵌入向量。然而,大多數稀疏特性遵循冪律分布,並且在用戶反饋上有較大的差異。比如,在同一條件下,用戶可能會播放或者不播放一個視頻僅僅由於推薦視頻的視頻海報圖清晰度上的一點點差異,而這些差異又很難被算法捕捉到,因此,對於長尾內容訓練出好的嵌入表示是非常困難的。
(4) 利用mini-batch隨機梯度下降法來分布式訓練
當數據量大,模型表達能力強(模型複雜,參數多)時,必須要用分布式技術進行訓練,這本身在工程上就是一件非常有挑戰的事情(需要搭建分布式計算平臺來支持模型訓練,還要實現分布式算法)。論文作者基於TensorFlow利用TPU來訓練模型,利用TFX(見參考文獻7)來提供生產服務。
效果與效率的平衡
在工業級推薦系統中,效率除了影響請求時間外,也會影響用戶體驗。過於複雜的模型會顯著增加生成視頻推薦結果的延遲,從而降低用戶滿意度和在線指標。因此,我們通常更熱衷於使用更簡單、更直接的模型。
2. 訓練數據中的偏差
除了位置偏差外,模型可能還存在其他種類的偏差,這些偏差可能是未知的。自動化地學習和捕獲這些偏差本身就是一個非常複雜的問題。
3. 模型評估面臨的挑戰
由於排序模型使用隱式反饋,線下評估好的模型上線後不一定真實的線上指標就好,甚至有時真實線上指標效果會更差。一般來說,可以選擇一個簡單的模型,這樣可以更好地推廣到線上,產生相對較好的結果,也就是說,簡單的模型能更好地保證線下和線上指標的一致性。
六、未來優化的方向
論文作者在文章最後總結了幾個對該模型進行優化的方向,具體包含如下3點:
1. 探索新模型架構,在穩定性、可訓練性、強表達能力等三方面達到平衡
MMoE技術通過靈活選擇哪些「專家」可以共享來提升多任務排序模型的性能,參考文獻5提供了另一種架構,除了可以保證模型性能外,還能提升模型穩定性,是值得研究的一個方向。
2. 理解和識別偏差
為了對已知和未知的偏差進行建模,探索從訓練數據中自動識別潛在偏差並學習如何減少這些偏差的模型架構和目標函數是一個值得研究的方向。
3. 模型壓縮
為了降低請求延遲,可以使用不同類型的模型壓縮技術(見參考文獻6),減少模型大小,從而提升處理效率。
總結
該論文通過構建多任務學習模型,利用MMoE技術來平衡多個任務之間的相關或者衝突關係從而更好地平衡多個目標。同時將位置偏差信息整合進模型,消除偏差影響,最終達到非常好的線上效果。
從這篇文章出發,我們可以進行更深入的思考。比如視頻一般是包含貼片廣告的,增加貼片廣告(從而為公司創造廣告收益)和用戶體驗之間也是一對衝突的目標,是否可以採用多任務學習的方式來尋求廣告收益和用戶體驗的平衡呢?除了位置偏差外,視頻海報的顏色、清晰度是否會產生偏差呢?怎麼通過將這些因素引入模型解決相關的偏差呢?這些都是值得探索的問題,相信本文給我提供了很好的思路,為我們指明了探索的方向。
參考文獻
1. [2019 YouTube] Recommending What Video to Watch Next- A Multitask Ranking System
2. [2016 YouTube] Deep Neural Networks for YouTube Recommendations
3. [2018] Modeling task relationships in multi-task learning with multi-gate mixture-of- experts
4. [2016 Google] Wide & Deep Learning for Recommender Systems
5. [2019] SNR: Sub-Network Routing for Flexible Parameter Sharing in Multi-task Learning
6. [2018] Ranking distillation: Learning compact ranking models with high performance for recommender system
7. [2017] TFX: A TensorFlow-Based Production-Scale Machine Learning Platform