1. 程式人生 > >深度學習在美團點評推薦平臺排序中的應用--學習筆記

深度學習在美團點評推薦平臺排序中的應用--學習筆記

價格 美團 ger 連接 xtra 避免 傳統 jpeg 冗余

寫在前面:據說下周就要xxxxxxxx, 嚇得本寶寶趕緊找些廣告的東西看看

gbdt+lr的模型之前是知道怎麽搞的,dnn+lr的模型也是知道的,但是都沒有試驗過

深度學習在美團點評推薦平臺排序中的運用

美團點評作為國內最大的生活服務平臺,業務種類涉及食、住、行、玩、樂等領域,致力於讓大家吃得更好,活得更好,有數億用戶以及豐富的用戶行為。隨著業務的飛速發展,美團點評的用戶和商戶數在快速增長。在這樣的背景下,通過對推薦算法的優化,可以更好的給用戶提供感興趣的內容,幫用戶更快速方便的找到所求。我們目標是根據用戶的興趣及行為,向用戶推薦感興趣的內容,打造一個高精準性、高豐富度且讓用戶感到欣喜的推薦系統。為了達到這個目的,我們在不停的嘗試將新的算法、新的技術進引入到現有的框架中。

1. 引言

自2012年ImageNet大賽技驚四座後,深度學習已經成為近年來機器學習和人工智能領域中關註度最高的技術。在深度學習出現之前,人們借助SIFT、HOG等算法提取具有良好區分性的特征,再結合SVM等機器學習算法進行圖像識別。然而SIFT這類算法提取的特征是有局限性的,導致當時比賽的最好結果的錯誤率也在26%以上。卷積神經網絡(CNN)的首次亮相就將錯誤率一下由26%降低到15%,同年微軟團隊發布的論文中顯示,通過深度學習可以將ImageNet 2012資料集的錯誤率降到4.94%。

隨後的幾年,深度學習在多個應用領域都取得了令人矚目的進展,如語音識別、圖像識別、自然語言處理等。鑒於深度學習的潛力,各大互聯網公司也紛紛投入資源開展科研與運用。因為人們意識到,在大數據時代,更加復雜且強大的深度模型,能深刻揭示海量數據裏所承載的復雜而豐富的信息,並對未來或未知事件做更精準的預測。

美團點評作為一直致力於站在科技前沿的互聯網公司,也在深度學習方面進行了一些探索,其中在自然語言處理領域,我們將深度學習技術應用於文本分析、語義匹配、搜索引擎的排序模型等;在計算機視覺領域,我們將其應用於文字識別、圖像分類、圖像質量排序等。本文就是筆者所在團隊,在借鑒了Google在2016年提出的Wide & Deep Learning 的思想上,基於自身業務的一些特點,在大眾點評推薦系統上做出的一些思考和取得的實踐經驗。

2. 點評推薦系統介紹

與大部分的推薦系統不同,美團點評的場景由於自身業務的多樣性,使得我們很難準確捕獲用戶的興趣點或用戶的實時意圖。而且我們推薦的場景也會隨著用戶興趣、地點、環境、時間等變化而變化。點評推薦系統主要面臨以下幾點挑戰:

  • 業務形態多樣性:除了推薦商戶外,我們還根據不同的場景,進行實時判斷,從而推出不同形態的業務,如團單、酒店、景點、霸王餐等。

  • 用戶消費場景多樣性:用戶可以選擇在家消費:外賣,到店消費:團單、閃惠,或者差旅消費:預定酒店等。

針對上述問題,我們定制了一套完善的推薦系統框架,包括基於機器學習的多選品召回與排序策略,以及從海量大數據的離線計算到高並發在線服務的推薦引擎。推薦系統的策略主要分為召回和排序兩個過程,召回主要負責生成推薦的候選集,排序負責將多個算法策略的結果進行個性化排序。

召回層:我們通過用戶行為、場景等進行實時判斷,通過多個召回策略召回不同候選集。再對召回的候選集進行融合。候選集融合和過濾層有兩個功能,一是提高推薦策略的覆蓋度和精度;另外還要承擔一定的過濾職責,從產品、運營的角度制定一些人工規則,過濾掉不符合條件的Item。下面是一些我們常用到的召回策略:

  • User-Based 協同過濾:找出與當前User X最相似的N個User,並根據N個User對某Item的打分估計X對該Item的打分。在相似度算法方面,我們采用了Jaccard Similarity:

技術分享

  • Model-Based 協同過濾:用一組隱含因子來聯系用戶和商品。其中每個用戶、每個商品都用一個向量來表示,用戶u對商品i的評價通過計算這兩個向量的內積得到。算法的關鍵在於根據已知的用戶對商品的行為數據來估計用戶和商品的隱因子向量。

  • Item-Based 協同過濾:我們先用word2vec對每個Item取其隱含空間的向量,然後用Cosine Similarity計算用戶u用過的每一個Item與未用過Item i之間的相似性。最後對Top N的結果進行召回。

  • Query-Based:是根據Query中包含的實時信息(如地理位置信息、WiFi到店、關鍵詞搜索、導航搜索等)對用戶的意圖進行抽象,從而觸發的策略。

  • Location-Based:移動設備的位置是經常發生變化的,不同的地理位置反映了不同的用戶場景,可以在具體的業務中充分利用。在推薦的候選集召回中,我們也會根據用戶的實時地理位置、工作地、居住地等地理位置觸發相應的策略。

排序層:每類召回策略都會召回一定的結果,這些結果去重後需要統一做排序。點評推薦排序的框架大致可以分為三塊:

  • 離線計算層:離線計算層主要包含了算法集合、算法引擎,負責數據的整合、特征的提取、模型的訓練、以及線下的評估。

  • 近線實時數據流:主要是對不同的用戶流實施訂閱、行為預測,並利用各種數據處理工具對原始日誌進行清洗,處理成格式化的數據,落地到不同類型的存儲系統中,供下遊的算法和模型使用。

  • 在線實時打分:根據用戶所處的場景,提取出相對應的特征,並利用多種機器學習算法,對多策略召回的結果進行融合和打分重排。

具體的推薦流程圖如下:

技術分享

從整體框架的角度看,當用戶每次請求時,系統就會將當前請求的數據寫入到日誌當中,利用各種數據處理工具對原始日誌進行清洗,格式化,落地到不同類型的存儲系統中。在訓練時,我們利用特征工程,從處理過後的數據集中選出訓練、測試樣本集,並借此進行線下模型的訓練和預估。我們采用多種機器學習算法,並通過線下AUC、NDCG、Precision等指標來評估他們的表現。線下模型經過訓練和評估後,如果在測試集有比較明顯的提高,會將其上線進行線上AB測試。同時,我們也有多種維度的報表對模型進行數據上的支持。

3. 深度學習在點評推薦排序系統中應用

對於不同召回策略所產生的候選集,如果只是根據算法的歷史效果決定算法產生的Item的位置顯得有些簡單粗暴,同時,在每個算法的內部,不同Item的順序也只是簡單的由一個或者幾個因素決定,這些排序的方法只能用於第一步的初選過程,最終的排序結果需要借助機器學習的方法,使用相關的排序模型,綜合多方面的因素來確定。

3.1 現有排序框架介紹

技術分享

到目前為止,點評推薦排序系統嘗試了多種線性、非線性、混合模型等機器學習方法,如邏輯回歸、GBDT、GBDT+LR等。通過線上實驗發現,相較於線性模型,傳統的非線性模型如GBDT,並不一定能在線上AB測試環節對CTR預估有比較明顯的提高。而線性模型如邏輯回歸,因為自身非線性表現能力比較弱,無法對真實生活中的非線性場景進行區分,會經常對歷史數據中出現過的數據過度記憶。下圖就是線性模型根據記憶將一些歷史點擊過的單子排在前面:

技術分享

從圖中我們可以看到,系統在非常靠前的位置推薦了一些遠距離的商戶,因為這些商戶曾經被用戶點過,其本身點擊率較高,那麽就很容易被系統再次推薦出來。但這種推薦並沒有結合當前場景給用戶推薦出一些有新穎性的Item。為了解決這個問題,就需要考慮更多、更復雜的特征,比如組合特征來替代簡單的“距離”特征。怎麽去定義、組合特征,這個過程成本很高,並且更多地依賴於人工經驗。

而深度神經網絡,可以通過低維密集的特征,學習到以前沒出現過的一些Item和特征之間的關系,並且相比於線性模型大幅降低了對於特征工程的需求,從而吸引我們進行探索研究。

在實際的運用當中,我們根據Google在2016年提出的Wide & Deep Learning模型,並結合自身業務的需求與特點,將線性模型組件和深度神經網絡進行融合,形成了在一個模型中實現記憶和泛化的寬深度學習框架。在接下來的章節中,將會討論如何進行樣本篩選、特征處理、深度學習算法實現等。

3.2 樣本的篩選

數據及特征,是整個機器學習中最重要的兩個環節,因為其本身就決定了整個模型的上限。點評推薦由於其自身多業務(包含外賣、商戶、團購、酒旅等)、多場景(用戶到店、用戶在家、異地請求等)的特色,導致我們的樣本集相比於其他產品更多元化。我們的目標是預測用戶的點擊行為。有點擊的為正樣本,無點擊的為負樣本,同時,在訓練時對於購買過的樣本進行一定程度的加權。而且,為了防止過擬合/欠擬合,我們將正負樣本的比例控制在10%。最後,我們還要對訓練樣本進行清洗,去除掉Noise樣本(特征值近似或相同的情況下,分別對應正負兩種樣本)。

同時,推薦業務作為整個App首頁核心模塊,對於新穎性以及多樣性的需求是很高的。在點評推薦系統的實現中,首先要確定應用場景的數據,美團點評的數據可以分為以下幾類:

  • 用戶畫像:性別、常駐地、價格偏好、Item偏好等。

  • Item畫像:包含了商戶、外賣、團單等多種Item。其中商戶特征包括:商戶價格、商戶好評數、商戶地理位置等。外賣特征包括:外賣平均價格、外賣配送時間、外賣銷量等。團單特征包括:團單適用人數、團單訪購率等。

  • 場景畫像:用戶當前所在地、時間、定位附近商圈、基於用戶的上下文場景信息等。

3.3 深度學習中的特征處理

機器學習的另一個核心領域就是特征工程,包括數據預處理,特征提取,特征選擇等。

  1. 特征提取:從原始數據出發構造新的特征的過程。方法包括計算各種簡單統計量、主成分分析、無監督聚類,在構造方法確定後,可以將其變成一個自動化的數據處理流程,但是特征構造過程的核心還是手動的。

  2. 特征選擇:從眾多特征中挑選出少許有用特征。與學習目標不相關的特征和冗余特征需要被剔除,如果計算資源不足或者對模型的復雜性有限制的話,還需要選擇丟棄一些不重要的特征。特征選擇方法常用的有以下幾種:

技術分享

特征選擇開銷大、特征構造成本高,在推薦業務開展的初期,我們對於這方面的感覺還不強烈。但是隨著業務的發展,對點擊率預估模型的要求越來越高,特征工程的巨大投入對於效果的提升已經不能滿足我們需求,於是我們想尋求一種新的解決辦法。

深度學習能自動對輸入的低階特征進行組合、變換,得到高階特征的特性,也促使我們轉向深度學習進行探索。深度學習“自動提取特征”的優點,在不同的領域有著不同的表現。例如對於圖像處理,像素點可以作為低階特征輸入,通過卷積層自動得到的高階特征有比較好的效果。在自然語言處理方面,有些語義並不來自數據,而是來自人們的先驗知識,利用先驗知識構造的特征是很有幫助的。

因此,我們希望借助於深度學習來節約特征工程中的巨大投入,更多地讓點擊率預估模型和各輔助模型自動完成特征構造和特征選擇的工作,並始終和業務目標保持一致。下面是一些我們在深度學習中用到的特征處理方式:

3.3.1 組合特征

對於特征的處理,我們沿用了目前業內通用的辦法,比如歸一化、標準化、離散化等。但值得一提的是,我們將很多組合特征引入到模型訓練中。因為不同特征之間的組合是非常有效的,並有很好的可解釋性,比如我們將"商戶是否在用戶常駐地"、"用戶是否在常駐地"以及"商戶與用戶當前距離"進行組合,再將數據進行離散化,通過組合特征,我們可以很好的抓住離散特征中的內在聯系,為線性模型增加更多的非線性表述。組合特征的定義為:

技術分享

3.3.2 歸一化

歸一化是依照特征矩陣的行處理數據,其目的在於樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。在實際工程中,我們運用了兩種歸一化方法:

Min-Max:


技術分享

Min是這個特征的最小值,Max是這個特征的最大值。

Cumulative Distribution Function(CDF):CDF也稱為累積分布函數,數學意義是表示隨機變量小於或等於其某一個取值x的概率。其公式為:


技術分享

在我們線下實驗中,連續特征在經過CDF的處理後,相比於Min-Max,CDF的線下AUC提高不足0.1%。我們猜想是因為有些連續特征並不滿足在(0,1)上均勻分布的隨機函數,CDF在這種情況下,不如Min-Max來的直觀有效,所以我們在線上采用了Min-Max方法。

3.3.3 快速聚合

為了讓模型更快的聚合,並且賦予網絡更好的表現形式,我們對原始的每一個連續特征設置了它的super-liner和sub-liner,即對於每個特征x,衍生出2個子特征:

技術分享

實驗結果表示,通過對每一個連續變量引入2個子特征,會提高線下AUC的表現,但考慮到線上計算量的問題,並沒有在線上實驗中添加這2個子特征。

3.4 優化器(Optimizer)的選擇

在深度學習中,選擇合適的優化器不僅會加速整個神經網絡訓練過程,並且會避免在訓練的過程中困到鞍點。文中會結合自己的使用情況,對使用過的優化器提出一些自己的理解。

3.4.1 Stochastic Gradient Descent (SGD)

SGD 是一種常見的優化方法,即每次叠代計算Mini-Batch的梯度,然後對參數進行更新。其公式為:

技術分享

缺點是對於損失方程有比較嚴重的振蕩,並且容易收斂到局部最小值。

3.4.2 Momentum

為了克服SGD振蕩比較嚴重的問題,Momentum將物理中的動量概念引入到SGD當中,通過積累之前的動量來替代梯度。即:

技術分享技術分享

相較於SGD,Momentum就相當於在從山坡上不停的向下走,當沒有阻力的話,它的動量會越來越大,但是如果遇到了阻力,速度就會變小。也就是說,在訓練的時候,在梯度方向不變的維度上,訓練速度變快,梯度方向有所改變的維度上,更新速度變慢,這樣就可以加快收斂並減小振蕩。

3.4.3 Adagrad

相較於SGD,Adagrad相當於對學習率多加了一個約束,即:

技術分享

Adagrad的優點是,在訓練初期,由於gt較小,所以約束項能夠加速訓練。而在後期,隨著gt的變大,會導致分母不斷變大,最終訓練提前結束。

3.4.4 Adam

Adam是一個結合了Momentum與Adagrad的產物,它既考慮到了利用動量項來加速訓練過程,又考慮到對於學習率的約束。利用梯度的一階矩估計和二階矩估計動態調整每個參數的學習率。Adam的優點主要在於經過偏置校正後,每一次叠代學習率都有個確定範圍,使得參數比較平穩。其公式為:

技術分享

其中:

技術分享

小結

通過實踐證明,Adam結合了Adagrad善於處理稀疏梯度和Momentum善於處理非平穩目標的優點,相較於其他幾種優化器效果更好。同時,我們也註意到很多論文中都會引用SGD,Adagrad作為優化函數。但相較於其他方法,在實踐中,SGD需要更多的訓練時間以及可能會被困到鞍點的缺點,都制約了它在很多真實數據上的表現。

3.5 損失函數的選擇

深度學習同樣有許多損失函數可供選擇,如平方差函數(Mean Squared Error),絕對平方差函數(Mean Absolute Error),交叉熵函數(Cross Entropy)等。而在理論與實踐中,我們發現Cross Entropy相比於在線性模型中表現比較好的平方差函數有著比較明顯的優勢。其主要原因是在深度學習通過反向傳遞更新Wb的同時,激活函數Sigmoid的導數在取大部分值時會落入左、右兩個飽和區間,造成參數的更新非常緩慢。具體的推導公式如下:

一般的MSE被定義為:

技術分享

其中y是我們期望的輸出,a為神經元的實際輸出a=σ(Wx+b)。由於深度學習反向傳遞的機制,權值W與偏移量b的修正公式被定義為:

技術分享

因為Sigmoid函數的性質,導致σ′(z)z取大部分值時會造成飽和現象。

Cross Entropy的公式為:

技術分享

如果有多個樣本,則整個樣本集的平均交叉熵為:

技術分享

其中n表示樣本編號,i表示類別編號。 如果用於Logistic分類,則上式可以簡化成:

技術分享

與平方損失函數相比,交叉熵函數有個非常好的特質:

技術分享

可以看到,由於沒有了σ′這一項,這樣一來在更新wb就不會受到飽和性的影響。當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新就慢。

3.6 寬深度模型框架

在實驗初期,我們只將單獨的5層DNN模型與線性模型進行了比對。通過線下/線上AUC對比,我們發現單純的DNN模型對於CTR的提升並不明顯。而且單獨的DNN模型本身也有一些瓶頸,例如,當用戶本身是非活躍用戶時,由於其自身與Item之間的交互比較少,導致得到的特征向量會非常稀疏,而深度學習模型在處理這種情況時有可能會過度的泛化,導致推薦與該用戶本身相關較少的Item。因此,我們將廣泛線性模型與深度學習模型相結合,同時又包含了一些組合特征,以便更好的抓住Item-Feature-Label三者之間的共性關系。我們希望在寬深度模型中的寬線性部分可以利用交叉特征去有效地記憶稀疏特征之間的相互作用,而在深層神經網絡部分通過挖掘特征之間的相互作用,提升模型之間的泛化能力。下圖就是我們的寬深度學習模型框架:

技術分享

在離線階段,我們采用基於Theano、Tensorflow的Keras作為模型引擎。在訓練時,我們分別對樣本數據進行清洗和提權。在特征方面,對於連續特征,我們用Min-Max方法做歸一化。在交叉特征方面,我們結合業務需求,提煉出多個在業務場景意義比較重大的交叉特征。在模型方面我們用Adam做為優化器,用Cross Entropy做為損失函數。在訓練期間,與Wide & Deep Learning論文中不同之處在於,我們將組合特征作為輸入層分別輸入到對應的Deep組件和Wide組件中。然後在Deep部分將全部輸入數據送到3個ReLU層,在最後通過Sigmoid層進行打分。我們的Wide&Deep模型在超過7000萬個訓練數據中進行了訓練,並用超過3000萬的測試數據進行線下模型預估。我們的Batch-Size設為50000,Epoch設為20。

4. 深度學習線下/線上效果

在實驗階段,分別將深度學習、寬深度學習以及邏輯回歸做了一系列的對比,將表現比較好的寬深度模型放在線上與原本的Base模型進行AB實驗。從結果上來看,寬深度學習模型在線下/線上都有比較好的效果。具體結論如下:

技術分享

隨著隱藏層寬度的增加,線下訓練的效果也會隨著逐步的提升。但考慮到線上實時預測的性能問題,我們目前采用256->128->64的框架結構。

技術分享

下圖是包含了組合特征的寬深度模型與Base模型的線上實驗效果對比圖:

技術分享

從線上效果來看,寬深度學習模型一定程度上解決了歷史點擊過的團單在遠距離會被召回的問題。同時,寬深度模型也會根據當前的場景推薦一些有新穎性的Item。

技術分享

5. 總結

排序是一個非常經典的機器學習問題,實現模型的記憶和泛化功能是推薦系統中的一個挑戰。記憶可以被定義為在推薦中將歷史數據重現,而泛化是基於數據相關性的傳遞性,探索過去從未或很少發生的Item。寬深度模型中的寬線性部分可以利用交叉特征去有效地記憶稀疏特征之間的相互作用,而深層神經網絡可以通過挖掘特征之間的相互作用,提升模型之間的泛化能力。在線實驗結果表明,寬深度模型對CTR有比較明顯的提高。同時,我們也在嘗試將模型進行一系列的演化:

  1. 將RNN融入到現有框架。現有的Deep & Wide模型只是將DNN與線性模型做融合,並沒有對時間序列上的變化進行建模。樣本出現的時間順序對於推薦排序同樣重要,比如當一個用戶按照時間分別瀏覽了一些異地酒店、景點時,用戶再次再請求該異地城市,就應該推出該景點周圍的美食。

  2. 引入強化學習,讓模型可以根據用戶所處的場景,動態地推薦內容。

深度學習和邏輯回歸的融合使得我們可以兼得二者的優點,也為進一步的點擊率預估模型設計和優化打下了堅實的基礎。

6. 參考文獻

  1. H. Cheng, L. Koc, J. Harmsen etc, Wide & Deep Learning for Recommender Systems, Published by ACM 2016 Article, https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf

  2. P. Covington, J. Adams, E. Sargin, Deep Neural Networks for YouTube Recommendations, RecSys ‘16 Proceedings of the 10th ACM Conference on Recommender Systems,https://arxiv.org/pdf/1606.07792.pdf

  3. H. Wang, N. Wang, D. Yeung, Collaborative Deep Learning for Recommender Systems.

7. 作者簡介

潘暉,美團點評高級算法工程師。2015年博士畢業後加入微軟,主要從事自然語言處理的研發。2016年12月加入美團點評,現在負責大眾點評的排序業務,致力於用大數據和機器學習技術解決業務問題,提升用戶體驗。

搜索推薦技術中心:負責點評側基礎檢索框架及通用搜索推薦平臺的建設;通過大數據及人工智能技術,優化搜索列表的端到端用戶體驗,提升推薦展位的精準性及新穎性;構建智能技術平臺,支持點評側業務的智能化需求。我們的使命是用搜索推薦技術有效連接人,商家及服務,幫助用戶精準高效地發現信息內容,優化用戶體驗,擴展用戶需求,推動業務發展。

美團點評搜索推薦團隊招聘各類機器學習、數據挖掘人才,base在上海。我們致力於通過機器學習、數據挖掘、實時數據流分析等前沿技術手段對大數據進行分析,挖掘各類用戶特征,為用戶提供最佳的個性化搜索/推薦體驗,你將從多個角度對用戶進行建模,並不斷優化機器學習模型來優化點評搜索的用戶體[email protected]m。

熱門博客

算法

機器學習中模型優化不得不思考的幾個問題

美團DSP廣告策略實踐

外賣O2O的用戶畫像實踐

美團點評

技術團隊

http://tech.meituan.com

技術分享

長按二維碼關註我們

查看文章原網址可點擊“閱讀原文”。

更多技術博客:美團點評技術博客。

PS:正文中標綠的名詞均為參考鏈接,可點擊查詢。

閱讀原文 技術分享

微信掃一掃
關註該公眾號

深度學習在美團點評推薦平臺排序中的應用--學習筆記