美團“猜你喜歡”深度學習排序模型實踐

美團“猜你喜歡”深度學習排序模型實踐

一. 引言

推薦作為解決資訊過載和挖掘使用者潛在需求的技術手段,在美團點評這樣業務豐富的生活服務電子商務平臺,發揮著重要的作用。在美團App裡,首頁的“猜你喜歡”、運營區、酒店旅遊推薦等重要的業務場景,都是推薦的用武之地。

arch 
圖1 美團首頁“猜你喜歡”場景 

目前,深度學習模型憑藉其強大的表達能力和靈活的網路結構在諸多領域取得了重大突破,美團平臺擁有海量的使用者與商家資料,以及豐富的產品使用場景,也為深度學習的應用提供了必要的條件。本文將主要介紹深度學習模型在美團平臺推薦排序場景下的應用和探索。

二. 深度學習模型的應用與探索

美團推薦場景中每天活躍著千萬級別的使用者,這些使用者與產品互動產生了海量的真實行為資料,每天能夠提供十億級別的有效訓練樣本。為處理大規模的訓練樣本和提高訓練效率,我們基於PS-Lite研發了分散式訓練的DNN模型,並基於該框架進行了很多的優化嘗試,在排序場景下取得了顯著的效果提升。

arch
圖2 模型排序流程圖

如上圖所示,模型排序流程包括日誌收集、訓練資料生成、模型訓練和線上打分等階段。當推薦系統對瀏覽推薦場景的使用者進行推薦時,會記錄當時的商品特徵、使用者狀態與上下文資訊,並收集本次推薦的使用者行為反饋。在經過標籤匹配和特徵處理流程後生成最終的訓練資料。我們在離線運用PS-Lite框架對Multi-task DNN模型進行分散式訓練,通過離線評測指標選出效果較好的模型並載入到線上,用於線上排序服務。

下面將著重介紹我們在特徵處理和模型結構方面所做的優化與嘗試。

特徵處理

美團“猜你喜歡”場景接入了包括美食、酒店、旅遊、外賣、民宿、交通等多種業務,這些業務各自有著豐富的內涵和特點,同時各業務的供給、需求與天氣、時間、地理位置等條件交織,構成了O2O生活服務場景下特有的多樣性和複雜性,這就給如何更高效地組織排序結果提出了更高的要求。構造更全面的特徵、更準確高效地利用樣本一直是我們優化的重點方向。

特徵種類

  • User特徵:使用者年齡,性別,婚否,有無孩子等
  • Item特徵:價格,折扣,品類和品牌相關特徵,短期和長期統計類特徵等
  • Context特徵:天氣,時間,地理位置,溫度等
  • 使用者行為:使用者點選Item序列,下單Item序列等

除上述列舉的幾類特徵外,我們還根據O2O領域的知識積累,對部分特徵進行交叉,並針對學習效果對特徵進行了進一步處理。具體的樣本和特徵處理流程如下:

arch
圖3 訓練資料處理流程

標籤匹配

推薦後臺日誌會記錄當前樣本對應的User特徵、Item特徵與Context特徵,Label日誌會捕獲使用者對於推薦項的行為反饋。我們把兩份資料按照唯一ID拼接到一起,生成原始的訓練日誌。

等頻歸一化

通過對訓練資料的分析,我們發現不同維度特徵的取值分佈、相同維度下特徵值的差異都很大。例如距離、價格等特徵的資料服從長尾分佈,體現為大部分樣本的特徵值都比較小,存在少量樣本的特徵值非常大。常規的歸一化方法(例如 min-max, z-score)都只是對資料的分佈進行平移和拉伸,最後特徵的分佈仍然是長尾分佈,這就導致大部分樣本的特徵值都集中在非常小的取值範圍內,使得樣本特徵的區分度減小;與此同時,少量的大值特徵可能造成訓練時的波動,減緩收斂速度。此外也可以對特徵值做對數轉化,但由於不同維度間特徵的分佈不同,這種特徵值處理的方式並不一定適用於其他維度的特徵。

在實踐中,我們參考了Google的Wide & Deep Model[6]中對於連續特徵的處理方式,根據特徵值在累計分佈函式中的位置進行歸一化。即將特徵進行等頻分桶,保證每個桶裡的樣本量基本相等,假設總共分了n個桶,而特徵xi屬於其中的第bi(bi ∈ {0, …, n – 1})個桶,則特徵xi最終會歸一化成 bi/n。這種方法保證對於不同分佈的特徵都可以對映到近似均勻分佈,從而保證樣本間特徵的區分度和數值的穩定性。

低頻過濾

過多的極為稀疏的離散特徵會在訓練過程中造成過擬合問題,同時增加引數的儲存數量。為避免該問題,我們對離散特徵進行了低頻過濾處理,丟掉小於出現頻次閾值的特徵。

經過上述特徵抽取、標籤匹配、特徵處理後,我們會給特徵分配對應的域,並對離散特徵進行Hash處理,最終生成LIBFFM格式的資料,作為Multi-task DNN的訓練樣本。下面介紹針對業務目標所做的模型方面的優化嘗試。

模型優化與嘗試

在模型方面,我們借鑑工業界的成功經驗,在MLP模型的基礎上,針對推薦場景進行模型結構方面的優化。在深度學習中,很多方法和機制都具有通用性,比如Attention機制在機器翻譯,影象標註等方向上取得了顯著的效果提升,但並不是所有具體的模型結構都能夠直接遷移,這就需要結合實際業務問題,對引入的模型網路結構進行了針對性調整,從而提高模型在具體場景中的效果。

Multi-task DNN

推薦場景上的優化目標要綜合考慮使用者的點選率和下單率。在過去我們使用XGBoost進行單目標訓練的時候,通過把點選的樣本和下單的樣本都作為正樣本,並對下單的樣本進行上取樣或者加權,來平衡點選率和下單率。但這種樣本的加權方式也會有一些缺點,例如調整下單權重或者取樣率的成本較高,每次調整都需要重新訓練,並且對於模型來說較難用同一套引數來表達這兩種混合的樣本分佈。針對上述問題,我們利用DNN靈活的網路結構引入了Multi-task訓練。

根據業務目標,我們把點選率和下單率拆分出來,形成兩個獨立的訓練目標,分別建立各自的Loss Function,作為對模型訓練的監督和指導。DNN網路的前幾層作為共享層,點選任務和下單任務共享其表達,並在BP階段根據兩個任務算出的梯度共同進行引數更新。網路在最後一個全連線層進行拆分,單獨學習對應Loss的引數,從而更好地專注於擬合各自Label的分佈。

arch
圖4 點選與下單多目標學習

Multi-task DNN的網路結構如上圖所示。線上預測時,我們將Click-output和Pay-output做一個線性融合。

在此結構的基礎上,我們結合資料分佈特點和業務目標進行了進一步的優化:針對特徵缺失普遍存在的情況我們提出Missing Value Layer,以用更合理的方式擬合線上資料分佈;考慮將不同task的物理意義關聯起來,我們提出KL-divergence Bound,以減輕某單一目標的Noise的影響。下面我們就這兩塊工作做具體介紹。

Missing Value Layer

通常在訓練樣本中難以避免地有部分連續特徵存在缺失值,更好地處理缺失值會對訓練的收斂和最終效果都有一定幫助。通常處理連續特徵缺失值的方式有:取零值,或者取該維特徵的平均值。取零值會導致相應權重無法進行更新,收斂速度減慢。而取平均值也略顯武斷,畢竟不同的特徵缺失所表示的含義可能不盡相同。一些非神經網路的模型能比較合理的處理缺失值,比如XGBoost會通過Loss的計算過程自適應地判斷特徵缺失的樣本被劃分到左子樹還是右子樹更優。受此啟發,我們希望神經網路也可以通過學習的方式自適應地處理缺失值,而不是人為設定預設值。因此設計瞭如下的Layer來自適應的學習缺失值的權重:

arch
圖5 Miss Value Layer

通過上述的Layer,缺失的特徵可以根據對應特徵的分佈去自適應的學習出一個合理的取值。

通過離線調研,對於提升模型的訓練效果,自適應學習特徵缺失值的方法要遠優於取零值、取均值的方式,模型離線AUC隨訓練輪數的變化如下圖所示:

arch 
圖6 自適應學習特徵缺失值與取0值和均值效果對比 

AUC相對值提升如下表所示:

arch 
圖7 自適應學習特徵缺失值AUC相對值提升 

KL-divergence Bound

我們同時考慮到,不同的標籤會帶有不同的Noise,如果能通過物理意義將有關係的Label關聯起來,一定程度上可以提高模型學習的魯棒性,減少單獨標籤的Noise對訓練的影響。例如,可以通過MTL同時學習樣本的點選率,下單率和轉化率(下單/點選),三者滿足p(點選) * p(轉化) = p(下單)的意義。因此我們又加入了一個KL散度的Bound,使得預測出來的p(點選) * p(轉化)更接近於 p(下單)。但由於KL散度是非對稱的,即KL(p||q) != KL(q||p),因此真正使用的時候,優化的是 KL(p||q) KL(q||p)。

arch 
圖8 KL-divergence Bound 

經過上述工作,Multi-tast DNN模型效果穩定超過XGBoost模型,目前已經在美團首頁“猜你喜歡”場景全量上線,線上上也取得了點選率的提升:

arch 
圖9 線上CTR效果與基線對比圖 

線上CTR相對值提升如下表所示:

arch 
圖10 線上CTR效果相對值提升 

除了線上效果的提升,Multi-task訓練方式也很好的提高了DNN模型的擴充套件性,模型訓練時可以同時考慮多個業務目標,方便我們加入業務約束。

更多探索

在Multi-task DNN模型上線後,為了進一步提升效果,我們利用DNN網路結構的靈活性,又做了多方面的優化嘗試。下面就NFM和使用者興趣向量的探索做具體介紹。

NFM

為了引入Low-order特徵組合,我們在Multi-task DNN的基礎上進行了加入NFM的嘗試。各個域的離散特徵首先通過Embedding層學習得到相應的向量表達,作為NFM的輸入,NFM通過Bi-Interaction Pooling的方式對輸入向量對應的每一維進行2-order的特徵組合,最終輸出一個跟輸入維度相同的向量。我們把NFM學出的向量與DNN的隱層拼接在一起,作為樣本的表達,進行後續的學習。

arch
圖11 NFM DNN

NFM的輸出結果為向量形式,很方便和DNN的隱層進行融合。而且從調研的過程中發現,NFM能夠加快訓練的收斂速度,從而更有利於Embedding層的學習。因為DNN部分的層數較多,在訓練的BP階段,當梯度傳到最底層的Embedding層時很容易出現梯度消失的問題,但NFM與DNN相比層數較淺,有利於梯度的傳遞,從而加快Embedding層的學習。

通過離線調研,加入NFM後,雖然訓練的收斂速度加快,但AUC並沒有明顯提升。分析原因是由於目前加入NFM模型部分的特徵還比較有限,限制了學習的效果。後續會嘗試加入更多的特徵域,以提供足夠的資訊幫助NFM學出有用的表達,深挖NFM的潛力。

使用者興趣向量

使用者興趣作為重要的特徵,通常體現在使用者的歷史行為中。通過引入使用者歷史行為序列,我們嘗試了多種方式對使用者興趣進行向量化表達。

  1. Item的向量化表達:線上列印的使用者行為序列中的Item是以ID的形式存在,所以首先需要對Item進行Embedding獲取其向量化的表達。最初我們嘗試通過隨機初始化Item Embedding向量,並在訓練過程中更新其引數的方式進行學習。但由於Item ID的稀疏性,上述隨機初始化的方式很容易出現過擬合。後來採用先生成item Embedding向量,用該向量進行初始化,並在訓練過程中進行fine tuning的方式進行訓練。

  2. 使用者興趣的向量化表達:為生成使用者興趣向量,我們對使用者行為序列中的Item向量進行了包括Average Pooling、 Max Pooling與Weighted Pooling三種方式的融合。其中Weighted Pooling參考了DIN的實現,首先獲取使用者的行為序列,通過一層非線性網路(Attention Net)學出每個行為Item對於當前要預測Item的權重(Align Vector),根據學出的權重,對行為序列進行Weighted Pooling,最終生成使用者的興趣向量。計算過程如下圖所示:

    arch
    圖12 Weighted Pooling

通過離線AUC對比,針對目前的訓練資料,Average Pooling的效果為最優的。效果對比如下圖所示:

arch 
圖13 不同Pooling方式點選AUC對比 

以上是我們在模型結構方面的優化經驗和嘗試,下面我們將介紹針對提高模型訓練效率所做的框架效能優化工作。

訓練效率優化

經過對開源框架的廣泛調研和選型,我們選擇了PS-Lite作為DNN模型的訓練框架。PS-Lite是DMLC開源的Parameter Server實現,主要包含Server和Worker兩種角色,其中Server端負責模型引數的儲存與更新,Worker端負責讀取訓練資料、構建網路結構和進行梯度計算。相較於其他開源框架,其顯著優點在於: 
* PS框架:PS-Lite的設計中可以更好的利用特徵的稀疏性,適用於推薦這種有大量離散特徵的場景。 
* 封裝合理:通訊框架和演算法解耦,API強大且清晰,整合比較方便。

arch 
圖14 Parameter Server 

在開發過程中,我們也遇到並解決了一些效能優化問題:

  1. 為了節約Worker的記憶體,通常不會將所有的資料儲存在記憶體中,而是分Batch從硬碟中Pre-fetch資料,但這個過程中存在大量的資料解析過程,一些後設資料的重複計算(大量的key排序去重等),累計起來也是比較可觀的消耗。針對這個問題我們修改了資料的讀取方式,將計算過的後設資料也序列化到硬碟中,並通過多執行緒提前將資料Pre-fetch到對應的資料結構裡,避免了在此處浪費大量的時間來進行重複計算。

  2. 在訓練過程中Worker的計算效率受到宿主機實時負載和硬體條件的影響,不同的Worker之間的執行進度可能存在差異(如下圖所示,對於實驗測試資料,大部分Worker會在700秒完成一輪訓練,而最慢的Worker會耗時900秒)。而通常每當訓練完一個Epoch之後,需要進行模型的Checkpoint、評測指標計算等需要同步的流程,因此最慢的節點會拖慢整個訓練的流程。考慮到Worker的執行效率是大致服從高斯分佈的,只有小部分的Worker是效率極低的,因此我們在訓練流程中新增了一箇中斷機制:當大部分的機器已經執行完當前Epoch的時候,剩餘的Worker進行中斷,犧牲少量Worker上的部分訓練資料來防止訓練流程長時間的阻塞。而中斷的Worker在下個Epoch開始時,會從中斷時的Batch開始繼續訓練,保證慢節點也能利用所有的訓練資料。 

    這裡寫圖片描述 圖15 Worker耗時分佈

三. 總結與展望

深度學習模型落地到推薦場景後,對業務指標有了明顯的提升,今後我們還將深化對業務場景的理解,做進一步優化嘗試。

在業務方面,我們將嘗試對更多的業務規則進行抽象,以學習目標的方式加入到模型中。業務規則一般是我們短期解決業務問題時提出的,但解決問題的方式一般不夠平滑,規則也不會隨著場景的變化進行自適應。通過Multi-task方式,把業務的Bias抽象成學習目標,在訓練過程中對模型的學習進行指導,從而可以比較優雅的通過模型解決業務問題。

在特徵方面,我們會繼續對特徵的挖掘和利用進行深入調研。不同於其他推薦場景,對於O2O業務,Context特徵的作用非常顯著,時間,地點,天氣等因素都會影響使用者的決策。今後會繼續嘗試挖掘多樣的Context特徵,並利用特徵工程或者模型進行特徵的組合,用於優化對樣本的表達。

在模型方面,我們將持續進行網路結構的探索,嘗試新的模型特性,並針對場景的特點進行契合。學術界和工業界的成功經驗都很有價值,給我們提供了新的思路和方法,但由於面臨的業務問題和場景積累的資料不同,還是需要進行鍼對場景的適配,以達到業務目標的提升。

參考文獻

[1] Mu Li, David G. Andersen, Alexander Smola, and Kai Yu. Communication Efficient Distributed Machine Learning with the Parameter Server. NIPS, 2014b. 
[2] Rich Caruana. Multitask Learning. Betascript Publishing, 1997. 
[3] Xiangnan He and Tat-Seng Chua. Neural Factorization Machines for Sparse Predictive Analytics. Proceedings of the 40th International ACM SIGIR conference on Research and Development in Information Retrieval(2017). 
[4] Guorui Zhou, Chengru Song, et al. Deep Interest Network for Click-Through Rate Prediction.arXiv preprint arXiv:1706.06978,2017. 
[5] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. Neural Machine Translation by Jointly Learning to Align and Translate. ICLR ’15, May 2015. 
[6] H.-T. Cheng, L. Koc, J. Harmsen, T. Shaked, T. Chandra, H. Aradhye, G. Anderson, G. Corrado, W. Chai, M. Ispir, et al. Wide & deep learning for recommender systems. arXiv preprint arXiv:1606.07792, 2016.

作者簡介

紹哲,2015年校招入職原美團, 主要從事推薦排序模型相關的工作。 
劉銳,先後在百度、阿里巴巴從事推薦業務相關工作,現就職於美團平臺推薦技術中心,專注深度學習模型的研發工作。