當前位置:
首頁 > 科技 > 深度學習在美團點評推薦平台排序中的運用

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

作者|潘暉

編輯|小智

深度學習已經成為近年來機器學習和人工智慧領域中關注度最高的技術。網路上講深度學習理論的文章很多,講實踐應用的很少。這是一篇來自美團點評技術團隊的深度學習實踐,供您參考。

寫在前面

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

背景介紹

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

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

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

點評推薦系統介紹

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

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

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

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

召回層

我們通過用戶行為、場景等進行實時判斷,通過多個召回策略召回不同候選集。再對召回的候選集進行融合。候選集融合和過濾層有兩個功能,一是提高推薦策略的覆蓋度和精度;另外還要承擔一定的過濾職責,從產品、運營的角度制定一些人工規則,過濾掉不符合條件的 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 測試。同時,我們也有多種維度的報表對模型進行數據上的支持。

在點評推薦排序系統中的應用

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

現有排序框架介紹

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

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

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

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

樣本的篩選

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

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

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

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

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

深度學習中的特徵處理

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

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

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

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

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

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

組合特徵

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

歸一化

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

Min-Max:

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

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

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

快速聚合

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

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

優化器(Optimizer)的選擇

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

Stochastic Gradient Descent (SGD)

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

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

Momentum

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

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

Adagrad

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

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

Adam

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

其中:

小結

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

損失函數的選擇

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

一般的 MSE 被定義為:

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

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

Cross Entropy 的公式為:

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

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

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

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

寬深度模型框架

在實驗初期,我們只將單獨的 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。

深度學習線下 / 線上效果

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

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

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

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

寫在最後

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

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

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

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

參考文獻

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

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

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

作者介紹

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

今日薦文

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 InfoQ 的精彩文章:

微博&蘑菇街&UCloud:混合雲架構實踐和系統建設經驗談
從代碼層面優化系統性能應該怎麼做?
免費系列公開課:知識圖譜和自然語言處理企業實踐關鍵技術解讀

TAG:InfoQ |

您可能感興趣

消息稱大眾點評即將「消失」:商家推薦、排序等將被美團拿走
美團點評的增長空間
中美合作開發出新型除草劑——專家點評
圖片點評 排列組合
美團點評資料庫智能運維探索與實踐
二季度經濟邊際變化與政策拐點之變—4月PMI點評
印度最大外賣平台Swiggy獲1億美元融資 美團點評參投
中金首席經濟學家梁紅點評貿易戰:「不出問題的情況是最大概率」
全能又高顏值,點評TWA積家北宸系列限量版地理學家世界時腕錶
經典美度指揮官系列腕錶簡單點評
王明軒點評中央三台合併
美團點評發人事調整內部信:大眾點評更名為點評App部
搭建大眾點評 CAT 監控平台
張康組Cell報道基於深度學習的視網膜疾病診斷工具——附專家點評
美團點評正式在港提交招股書
漢得信息中報預告點評:營收增速提升,新業務穩步推進華創計算機陳寶健團隊
流行的精油品牌點評整理
點評 全家福
大眾點評點餐小程序開發經驗之發布與推廣
新能源造車「新勢力」靠譜程度點評:不如PPT美好