大眾點評搜尋基於知識圖譜的深度學習排序實踐

1。 引言

挑戰與思路

搜尋是大眾點評App上使用者進行資訊查詢的最大入口,是連線使用者和資訊的重要紐帶。而使用者搜尋的方式和場景非常多樣,並且由於對接業務種類多,流量差異大,為大眾點評搜尋(下文簡稱點評搜尋)帶來了巨大的挑戰,具體體現在如下幾個方面:

意圖多樣

:使用者查詢的資訊型別和方式多樣。資訊型別包括POI、榜單、UGC、攻略、達人等。以找店為例,查詢方式包括按距離、按熱度、按菜品和按地理位置等多種方式。例如使用者按照品牌進行搜尋時,大機率是需要尋找距離最近或者常去的某家分店;但使用者搜尋菜品時,會對菜品推薦人數更加敏感,而距離因素會弱化。

業務多樣

:不同業務之間,使用者的使用頻率、選擇難度以及業務訴求均不一樣。例如家裝場景使用者使用頻次很低,行為非常稀疏,距離因素弱,並且選擇週期可能會很長;而美食多為即時消費場景,使用者行為資料多,距離敏感。

使用者型別多樣

:不同的使用者對價格、距離、口味以及偏好的類目之間差異很大;搜尋需要能深度挖掘到使用者的各種偏好,實現定製化的“千人千面”的搜尋。

LBS的搜尋

:相比電商和通用搜索,LBS的升維效應極大地增加了搜尋場景的複雜性。例如對於旅遊使用者和常駐地使用者來說,前者在搜尋美食的時候可能會更加關心當地的知名特色商戶,而對於距離相對不敏感。

上述的各項特性,疊加上時間、空間、場景等維度,使得點評搜尋面臨比通用搜索引擎更加獨特的挑戰。而解決這些挑戰的方法,就需要升級NLP(Natural Language Processing,自然語言處理)技術,進行深度查詢理解以及深度評價分析,並依賴知識圖譜技術和深度學習技術對搜尋架構進行整體升級。在美團NLP中心以及大眾點評搜尋智慧中心兩個團隊的緊密合作之下,經過短短半年時間,點評搜尋核心KPI在高位基礎上仍然大幅提升,是過去一年半漲幅的六倍之多,提前半年完成全年目標。

基於知識圖譜的搜尋架構重塑

美團NLP中心正在構建全世界最大的餐飲娛樂知識圖譜——美團大腦(相關資訊請參見《美團大腦:知識圖譜的建模方法及其應用》)。它充分挖掘關聯各個場景資料,用NLP技術讓機器“閱讀”使用者公開評論,理解使用者在菜品、價格、服務、環境等方面的喜好,構建人、店、商品、場景之間的知識關聯,從而形成一個“知識大腦”[1]。透過將知識圖譜資訊加入到搜尋各個流程中,我們對點評搜尋的整體架構進行了升級重塑,圖1為點評搜尋基於知識圖譜搭建的5層搜尋架構。本篇文章是“美團大腦”系列文章第二篇(系列首篇文章請參見《美團餐飲娛樂知識圖譜——美團大腦揭秘》),主要介紹點評搜尋5層架構中核心排序層的演變過程,文章主要分為如下3個部分:

核心排序從傳統機器學習模型到大規模深度學習模型的演進。

搜尋場景深度學習排序模型的特徵工程實踐。

適用於搜尋場景的深度學習Listwise排序演算法——LambdaDNN。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

2。 排序模型探索與實踐

搜尋排序問題在機器學習領域有一個單獨的分支,Learning to Rank(L2R)。主要分類如下:

根據樣本生成方法和Loss Function的不同,L2R可以分為Pointwise、Pairwise、Listwise。

按照模型結構劃分,可以分為線性排序模型、樹模型、深度學習模型,他們之間的組合(GBDT+LR,Deep&Wide等)。

在排序模型方面,點評搜尋也經歷了業界比較普遍的迭代過程:從早期的線性模型LR,到引入自動二階交叉特徵的FM和FFM,到非線性樹模型GBDT和GBDT+LR,到最近全面遷移至大規模深度學習排序模型。下面先簡單介紹下傳統機器學習模型(LR、FM、GBDT)的應用和優缺點,然後詳細介紹深度模型的探索實踐過程。

傳統機器學習模型

大眾點評搜尋基於知識圖譜的深度學習排序實踐

LR可以視作單層單節點的線性網路結構。模型優點是可解釋性強。通常而言,良好的解釋性是工業界應用實踐比較注重的一個指標,它意味著更好的可控性,同時也能指導工程師去分析問題最佳化模型。但是LR需要依賴大量的人工特徵挖掘投入,有限的特徵組合自然無法提供較強的表達能力。

FM可以看做是在LR的基礎上增加了一部分二階交叉項。引入自動的交叉特徵有助於減少人工挖掘的投入,同時增加模型的非線性,捕捉更多資訊。FM能夠自動學習兩兩特徵間的關係,但更高量級的特徵交叉仍然無法滿足。

GBDT是一個Boosting的模型,透過組合多個弱模型逐步擬合殘差得到一個強模型。樹模型具有天然的優勢,能夠很好的挖掘組合高階統計特徵,兼具較優的可解釋性。GBDT的主要缺陷是依賴連續型的統計特徵,對於高維度稀疏特徵、時間序列特徵不能很好的處理。

深度神經網路模型

隨著業務的發展,在傳統模型上取得指標收益變得愈發困難。同時業務的複雜性要求我們引入海量使用者歷史資料,超大規模知識圖譜特徵等多維度資訊源,以實現精準個性化的排序。因此我們從2018年下半年開始,全力推進L2核心排序層的主模型遷移至深度學習排序模型。深度模型優勢體現在如下幾個方面:

強大的模型擬合能力

:深度學習網路包含多個隱藏層和隱藏結點,配合上非線性的啟用函式,理論上可以擬合任何函式,因此十分適用於點評搜尋這種複雜的場景。

強大的特徵表徵和泛化能力

:深度學習模型可以處理很多傳統模型無法處理的特徵。例如深度網路可以直接中從海量訓練樣本中學習到高維稀疏ID的隱含資訊,並透過Embedding的方式去表徵;另外對於文字、序列特徵以及影象特徵,深度網路均有對應的結構或者單元去處理。

自動組合和發現特徵的能力

:華為提出的DeepFM,以及Google提出的DeepCrossNetwork可以自動進行特徵組合,代替大量人工組合特徵的工作。

下圖是我們基於Google提出的Wide&Deep模型搭建的網路結構[2]。其中Wide部分輸入的是LR、GBDT階段常用的一些細粒度統計特徵。透過較長週期統計的高頻行為特徵,能夠提供很好的記憶能力。Deep部分透過深層的神經網路學習Low-Order、高緯度稀疏的Categorical型特徵,擬合樣本中的長尾部分,發現新的特徵組合,提高模型的泛化能力。同時對於文字、頭圖等傳統機器學習模型難以刻畫的特徵,我們可以透過End-to-End的方式,利用相應的子網路模型進行預處理表示,然後進行融合學習。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

3。 搜尋深度排序模型的特徵工程實踐

深度學習的橫空出世,將演算法工程師從很多人工挖掘和組合特徵的事情中解放出來。甚至有一種論調,專做特徵工程的演算法工程師可能面臨著失業的風險。但是深度學習的自動特徵學習目前主要集中體現在CV領域,CV領域的特徵資料是圖片的畫素點——稠密的低階特徵,深度學習透過卷積層這個強力工具,可以自動對低階特徵進行組合和變換,相比之前人工定義的影象特徵從效果上來說確實更加顯著。在NLP領域因為Transformer的出現,在自動特徵挖掘上也有了長足的進步,BERT利用Transformer在多個NLP Task中取得了State-of-The-Art的效果。

但是對於CTR預估和排序學習的領域,目前深度學習尚未在自動特徵挖掘上對人工特徵工程形成碾壓之勢,因此人工特徵工程依然很重要。當然,深度學習在特徵工程上與傳統模型的特徵工程也存在著一些區別,我們的工作主要集中在如下幾個方面。

3。1 特徵預處理

特徵歸一化

:深度網路的學習幾乎都是基於反向傳播,而此類梯度最佳化的方法對於特徵的尺度非常敏感。因此,需要對特徵進行歸一化或者標準化以促使模型更好的收斂。

特徵離散化

:工業界一般很少直接使用連續值作為特徵,而是將特徵離散化後再輸入到模型中。一方面因為離散化特徵對於異常值具有更好的魯棒性,其次可以為特徵引入非線性的能力。並且,離散化可以更好的進行Embedding,我們主要使用如下兩種離散化方法:等頻分桶:按樣本頻率進行等頻切分,缺失值可以選擇給一個預設桶值或者單獨設定分桶。樹模型分桶:等頻離散化的方式在特徵分佈特別不均勻的時候效果往往不好。此時可以利用單特徵結合Label訓練樹模型,以樹的分叉點做為切分值,相應的葉子節點作為桶號。

特徵組合

:基於業務場景對基礎特徵進行組合,形成更豐富的行為表徵,為模型提供先驗資訊,可加速模型的收斂速度。典型示例如下:使用者性別與類目之間的交叉特徵,能夠刻畫出不同性別的使用者在類目上的偏好差異,比如男性使用者可能會較少關注“麗人”相關的商戶。時間與類目之間的交叉特徵,能夠刻畫出不同類目商戶在時間上的差異,例如,酒吧在夜間會更容易被點選。

3。2 萬物皆可Embedding

深度學習最大的魅力在於其強大的特徵表徵能力,在點評搜尋場景下,我們有海量的使用者行為資料,有豐富的商戶UGC資訊以及美團大腦提供的多維度細粒度標籤資料。我們利用深度學習將這些資訊Embedding到多個向量空間中,透過Embedding去表徵使用者的個性化偏好和商戶的精準畫像。同時向量化的Embedding也便於深度模型進一步的泛化、組合以及進行相似度的計算。

3。2。1 使用者行為序列的Embedding

使用者行為序列(搜尋詞序列、點選商戶序列、篩選行為序列)包含了使用者豐富的偏好資訊。例如使用者篩選了“距離優先”時,我們能夠知道當前使用者很有可能是一個即時消費的場景,並且對距離較為敏感。行為序列特徵一般有如下圖所示的三種接入方式:

Pooling

:序列Embedding後接入Sum/Average Pooling層。此方式接入成本低,但忽略了行為的時序關係。

RNN

:LSTM/GRU接入,利用迴圈網路進行聚合。此方式能夠考慮行為序列的時序關係;代價是增大了模型複雜度,影響線上預測效能。

Attention

:序列Embedding後引入Attention機制,表現為加權的Sum Pooling;相比LSTM/GRU計算開銷更低[4]。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

同時,為了突顯使用者長期偏好和短期偏好對於排序的不同影響,我們按照時間維度對行為序列進行了劃分:Session、半小時、一天、一週等粒度,也在線上取得了收益。

3。2。2 使用者ID的Embedding

一種更常見的刻畫使用者偏好的方式,是直接將使用者ID經過Embedding後作為特徵接入到模型中,但是最後上線的效果卻不盡如人意。透過分析使用者的行為資料,我們發現相當一部分使用者ID的行為資料較為稀疏,導致使用者ID的Embedding沒有充分收斂,未能充分刻畫使用者的偏好資訊。

Airbnb發表在KDD 2018上的文章為這種問題提供了一種解決思路[9]——利用使用者基礎畫像和行為資料對使用者ID進行聚類。Airbnb的主要場景是為旅遊使用者提供民宿短租服務,一般使用者一年旅遊的次數在1-2次之間,因此Airbnb的使用者行為資料相比點評搜尋會更為稀疏一些。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

如上圖所示,將使用者畫像特徵和行為特徵進行離散分桶,拼接特徵名和所屬桶號,得到的聚類ID為:US_lt1_pn3_pg3_r3_5s4_c2_b1_bd2_bt2_nu3。

我們也採取了類似Airbnb的方案,稀疏性的問題得到了很好的解決,並且這樣做還獲得了一些額外的收益。點評搜尋作為一個本地化的生活資訊服務平臺,大部分使用者的行為都集中自己的常駐地,導致使用者到達一個新地方時,排序個性化明顯不足。透過這種聚類的方式,將異地有相同行為的使用者聚集在一起,也能解決一部分跨站的個性化問題。

3。2。3 商戶資訊Embedding

商戶Embedding除了可以直接將商戶ID加入模型中之外,美團大腦也利用深度學習技術對UGC進行大量挖掘,對商家的口味、特色等細粒度情感進行充分刻畫,例如下圖所示的“好停車”、“菜品精緻”、“願意再次光顧”等標籤。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

這些資訊與單純的商戶星級、點評數相比,刻畫的角度更多,粒度也更細。我們將這些標籤也進行Embedding並輸入到模型中:

直連

:將標籤特徵做Pooling後直接輸入模型。這種接入方式適合端到端的學習方式;但受輸入層大小限制,只能取Top的標籤,容易損失抽象實體資訊。

分組直連

:類似於直連線入的方式,但是先對標籤進行分類,如菜品/風格/口味等類別;每個分類取Top N的實體後進行Pooling生成不同維度的語義向量。與不分組的直連相比,能夠保留更多抽象資訊。

子模型接入

:可以利用DSSM模型,以標籤作為商戶輸入學習商戶的Embedding表達。此種方式能夠最大化保留標籤的抽象資訊,但是線上實現和計算成本較高。

3。2。4 加速Embedding特徵的收斂

在我們的深度學習排序模型中,除了Embedding特徵,也存在大量Query、Shop和使用者維度的強記憶特徵,能夠很快收斂。而Embedding特徵是更為稀疏的弱特徵,收斂速度較慢,為了加速Embedding特徵的收斂,我們嘗試瞭如下幾種方案:

低頻過濾

:針對出現頻率較低的特徵進行過濾,可以很大程度上減少引數量,避免過擬合。

預訓練

:利用多類模型對稀疏Embedding特徵進行預訓練,然後進入模型進行微調:透過無監督模型如Word2vec、Fasttext對使用者-商戶點選關係建模,生成共現關係下的商戶Embedding。利用DSSM等監督模型對Query-商戶點選行為建模得到Query和商戶的Embedding。

Multi-Task

:針對稀疏的Embedding特徵,單獨設定一個子損失函式,如下圖所示。此時Embedding特徵的更新依賴兩個損失函式的梯度,而子損失函式脫離了對強特徵的依賴,可以加快Embedding特徵的收斂。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

3。3 圖片特徵

圖片在搜尋結果頁中佔據了很大的展示面積,圖片質量的好壞會直接影響使用者的體驗和點選,而點評商戶首圖來自於商戶和使用者上傳的圖片,質量參差不齊。因此,圖片特徵也是排序模型中較為重要的一類。目前點評搜尋主要用了以下幾類圖片特徵:

基礎特徵

:提取圖片的亮度、色度飽和度等基礎資訊,進行特徵離散化後得到圖片基礎特徵。

泛化特徵

:使用ResNet50進行圖片特徵提取[3],透過聚類得到圖片的泛化特徵。

質量特徵

:使用自研的圖片質量模型,提取中間層輸出,作為圖片質量的Embedding特徵。

標籤特徵

:提取圖片是否是食物、環境、價目表、Logo等作為圖片分類和標籤特徵。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

4。 適用於搜尋場景的深度學習Listwise排序演算法—LambdaDNN

4。1 搜尋業務指標與模型最佳化目標的Gap

通常模型的預測目標與業務指標總會存在一些Gap。如果模型的預測目標越貼近業務目標,越能保證模型最佳化的同時業務指標也能夠有相應的提升;反之則會出現模型離線指標提升,但線上關鍵業務指標提升不明顯,甚至出現負向的問題。工業屆大部分深度學習排序採用Pointwise的Log Loss作為損失函式,與搜尋業務指標有較大的Gap。體現在如下兩個方面:

搜尋業務常用的指標有QV_CTR或者SSR(Session Success Rate),更關心的是使用者搜尋的成功率(有沒有發生點選行為);而Pointwise的Log Loss更多是關注單個Item的點選率。

搜尋業務更關心排在頁面頭部結果的好壞,而Pointwise的方法則對於所有位置的樣本一視同仁。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

基於上述理由,我們對於深度學習模型的損失函式進行了最佳化。

4。2 最佳化目標改進-從Log Loss到NDCG

為了讓排序模型的最佳化目標儘量貼近搜尋業務指標,需要按照Query計算損失,且不同位置的樣本具有不同的權重。搜尋系統常用的指標NDCG(Normalized Discounted Cumulative Gain)相較於Log Loss顯然更貼近搜尋業務的要求,NDCG計算公式如下:

大眾點評搜尋基於知識圖譜的深度學習排序實踐

累加部分為DCG(Discounted Cumulative Gain)表示按照位置折損的收益,對於Query下的結果列表l,函式G表示對應Doc的相關度分值,通常取指數函式,即G(lj)=2lj-1(lj表示的是相關度水平,如{0,1,2});函式 η 即位置折損,一般採用 η(j)=1/log(j+1),Doc與Query的相關度越高且位置越靠前則DCG值會越大。另外,通常我們僅關注排序列表頁前k位的效果,Zk 表示 DCG@k 的可能最大值,以此進行歸一化處理後得到的就是NDCG@k。

問題在於NDCG是一個處處非平滑的函式,直接以它為目標函式進行最佳化是不可行的。LambdaRank提供了一種思路:繞過目標函式本身,直接構造一個特殊的梯度,按照梯度的方向修正模型引數,最終能達到擬合NDCG的方法[6]。因此,如果我們能將該梯度透過深度網路進行反向傳播,則能訓練一個最佳化NDCG的深度網路,該梯度我們稱之為Lambda梯度,透過該梯度構造出的深度學習網路稱之為LambdaDNN。

要了解Lambda梯度需要引入LambdaRank。LambdaRank模型是透過Pairwise來構造的,通常將同Query下有點選樣本和無點選樣本構造成一個樣本Pair。模型的基本假設如下式所示,令Pij為同一個Query下Doci相比Docj更相關的機率,其中si和sj分別為Doci和Docj的模型得分:

大眾點評搜尋基於知識圖譜的深度學習排序實踐

使用交叉熵為損失函式,令Sij表示樣本Pair的真實標記,當Doci比Docj更相關時(即Doci有被使用者點選,而Docj沒有被點選),有Sij=1,否則為-1;則損失函式可以表示為:

大眾點評搜尋基於知識圖譜的深度學習排序實踐

在構造樣本Pair時,我們可以始終令i為更相關的文件,此時始終有Sij≡1,代入上式並進行求導,則損失函式的梯度為:

大眾點評搜尋基於知識圖譜的深度學習排序實踐

到目前為止,損失函式的計算過程中並未考慮樣本所在的位置資訊。因此進一步對梯度進行改造,考慮Doci和Docj交換位置時的NDCG值變化,下式即為前述的Lambda梯度。可以證明,透過此種方式構造出來的梯度經過迭代更新,最終可以達到最佳化NDCG的目的。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

Lambda梯度的物理意義如下圖所示。其中藍色表示更相關(使用者點選過)的文件,則Lambda梯度更傾向於位置靠上的Doc得到的提升更大(如紅色箭頭所示)。有了Lambda梯度的計算方法,訓練中我們利用深度網路預測同Query下的Doc得分,根據使用者實際點選Doc的情況計算Lambda梯度並反向傳播回深度網路,則可以得到一個直接預測NDCG的深度網路。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

4。3 LambdaDNN的工程實施

我們利用TensorFlow分散式框架訓練LambdaDNN模型。如前文所述,Lambda梯度需要對同Query下的樣本進行計算,但是正常情況下所有的樣本是隨機Shuffle到各個Worker的。因此我們需要對樣本進行預處理:

透過QueryId進行Shuffle,將同一個Query的樣本聚合在一起,同一個Query的樣本打包進一個TFRecord。

由於每次請求Query召回的Doc數不一樣,對於可變Size的Query樣本在拉取資料進行訓練時需要注意,TF會自動補齊Mini-Batch內每個樣本大小一致,導致輸入資料中存在大量無意義的預設值樣本。這裡我們提供兩點處理方式:MR過程中對Key進行處理,使得多個Query的樣本聚合在一起,然後在訓練的時候進行動態切分。讀取到補齊的樣本,根據設定的補齊標記獲取索引位,去除補齊資料。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

為了提升訓練效率,我們與基礎研發平臺數據平臺中心緊密協同,一起探索並驗證了多項最佳化操作:

將ID類特徵的對映等操作一併在預處理中完成,減少多輪Training過程中的重複計算。

將樣本轉TfRecord,利用RecordDataSet方式讀取資料並計算處理,Worker的計算效能大概提升了10倍。

Concat多個Categorical特徵,組合成Multi-Hot的Tensor進行一次Embedding_Lookup操作,減少Map操作的同時有助於引數做分片儲存計算。

稀疏Tensor在計算梯度以及正則化處理時保留索引值,僅對有數值的部分進行更新操作。

多個PS伺服器間進行分片儲存大規模Tensor變數,減少Worker同步更新的通訊壓力,減少更新阻塞,達到更平滑的梯度更新效果。

整體下來,對於30億左右的樣本量、上億級別的特徵維度,一輪迭代大概在半小時內完成。適當的增加平行計算的資源,可以達到分鐘級的訓練任務。

4。4 進一步改進最佳化目標

NDCG的計算公式中,折損的權重是隨著位置呈指數變化的。然而實際曝光點選率隨位置變化的曲線與NDCG的理論折損值存在著較大的差異。

對於移動端的場景來說,使用者在下拉滑動列表進行瀏覽時,視覺的焦點會隨著滑屏、翻頁而發生變動。例如使用者翻到第二頁時,往往會重新聚焦,因此,會發現第二頁頭部的曝光點選率實際上是高於第一頁尾部位置的。我們嘗試了兩種方案去微調NDCG中的指數位置折損:

根據實際曝光點選率擬合折損曲線

:根據實際統計到的曝光點選率資料,擬合公式替代NDCG中的指數折損公式,繪製的曲線如圖12所示。

計算Position Bias作為位置折損

:Position Bias在業界有較多的討論,其中[7][8]將使用者點選商戶的過程分為觀察和點選兩個步驟:a。使用者需要首先看到該商戶,而看到商戶的機率取決於所在的位置;b。看到商戶後點擊商戶的機率只與商戶的相關性有關。步驟a計算的機率即為Position Bias,這塊內容可以討論的東西很多,這裡不再詳述。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

經過上述對NDCG計算改造訓練出的LambdaDNN模型,相較Base樹模型和Pointwise DNN模型,在業務指標上有了非常顯著的提升。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

4。5 Lambda深度排序框架

Lambda梯度除了與DNN網路相結合外,事實上可以與絕大部分常見的網路結構相結合。為了進一步學習到更多交叉特徵,我們在LambdaDNN的基礎上分別嘗試了LambdaDeepFM和LambdaDCN網路;其中DCN網路是一種加入Cross的並行網路結構,交叉的網路每一層的輸出特徵與第一層的原始輸入特徵進行顯性的兩兩交叉,相當於每一層學習特徵交叉的對映去擬合層之間的殘差。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

離線的對比實驗表明,Lambda梯度與DCN網路結合之後充分發揮了DCN網路的特點,簡潔的多項式交叉設計有效地提升模型的訓練效果。NDCG指標對比效果如下圖所示:

大眾點評搜尋基於知識圖譜的深度學習排序實踐

5。 深度學習排序診斷系統

深度學習排序模型雖然給業務指標帶來了大幅度的提升,但由於深度學習模型的“黑盒屬性”導致了巨大的解釋性成本,也給搜尋業務帶來了一些問題:

日常搜尋Bad Case無法快速響應

:搜尋業務日常需要應對大量來自於使用者、業務和老闆們的“靈魂拷問”,“為何這個排序是這樣的”,“為什麼這家商戶質量跟我差不多,但是會排在我的前面”。剛切換到深度學習排序模型的時候,我們對於這樣的問題顯得手足無措,需要花費大量的時間去定位問題。

無法從Bad Case中學習總結規律持續最佳化

:如果不明白為什麼排序模型會得出一個很壞的排序結果,自然也無法定位模型到底出了什麼問題,也就無法根據Bad Case總結規律,從而確定模型和特徵將來的最佳化方向。

模型和特徵是否充分學習無從得知

:新挖掘一些特徵之後,通常我們會根據離線評測指標是否有提升決定特徵是否上線。但是,即使一個有提升的特徵,我們也無法知道這個特徵是否效能足夠好。例如,模型擬合的距離特徵,會不會在特定的距離段出現距離越遠反而打分越高的情況。

這些問題都會潛在帶來一些使用者無法理解的排序結果。我們需要對深度排序模型清晰地診斷並解釋。

關於機器學習模型的可解釋性研究,業界已經有了一些探索。Lime(Local Interpretable Model-Agnostic Explanations)是其中的一種,如下圖所示:透過對單個樣本的特徵生成擾動產生近鄰樣本,觀察模型的預測行為。根據這些擾動的資料點距離原始資料的距離分配權重,基於它們學習得到一個可解釋的模型和預測結果[5]。舉個例子,如果需要解釋一個情感分類模型是如何預測“我討厭這部電影”為負面情感的,我們透過丟掉部分詞或者亂序構造一些樣本預測情感,最終會發現,決定“我討厭這部電影”為負面情感的是因為“討厭”這個詞。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

基於Lime直譯器的思想,我們開發了一套深度模型直譯器工具——雅典娜系統。目前雅典娜系統支援兩種工作模式,Pairwise和Listwise模式:

Pairwise模式用來解釋同一個列表中兩個結果之間的相對排序。透過對樣本的特徵進行重新賦值或者替換等操作,觀察樣本打分和排序位次的變化趨勢,診斷出當前樣本排序是否符合預期。如下圖所示,透過右側的特徵位次面板可以快速診斷出為什麼“南京大牌檔”的排序比“金時代順風港灣”要更靠前。第一行的特徵位次資訊顯示,若將“金時代順風港灣”的1。3km的距離特徵用“南京大牌檔”的0。2km的距離特徵進行替換,排序位次將上升10位;由此得出,“南京大牌檔”排在前面的決定性因素是因為距離近。

Listwise模式與Lime的工作模式基本類似,透過整個列表的樣本生成擾動樣本,訓練線性分類器模型輸出特徵重要度,從而達到對模型進行解釋的目的。

大眾點評搜尋基於知識圖譜的深度學習排序實踐

6。 總結與展望

2018年下半年,點評搜尋完成了從樹模型到大規模深度學習排序模型的全面升級。團隊在深度學習特徵工程、模型結構、最佳化目標以及工程實踐上都進行了一些探索,在核心指標上取得了較為顯著的收益。當然,未來依然有不少可以探索的點。

在特徵層面,大量知識圖譜提供的標籤資訊尚未充分挖掘。從使用方式上看,簡單以文字標籤的形式接入,損失了知識圖譜的結構資訊,因此,Graph Embedding也是未來需要嘗試的方向。同時團隊也會利用BERT在Query和商戶文字的深層語義表達上做一些工作。

模型結構層面,目前線上依然以全連線的DNN網路結構為主,但DNN網路結構在低秩資料的學習上不如DeepFM和DCN。目前LambdaDeepFM和LambdaDCN在離線上已經取得了收益,未來會在網路結構上做進一步最佳化。

在模型最佳化目標上,Lambda Loss計算損失的時候,只會考慮Query內部有點選和無點選的樣本對,大量無點選的Query被丟棄,同時,同一個使用者短時間內在不同Query下的行為也包含著一些資訊可以利用。因此,目前團隊正在探索綜合考慮Log Loss和Lambda Loss的模型,透過Multi-Task和按照不同維度Shuffle樣本讓模型充分學習,目前我們已經線上下取得了一些收益。

最後,近期Google開源的TF Ranking提出的Groupwise模型也對我們有一些啟發。目前絕大部分的Listwise方法只是體現在模型訓練階段,在打分預測階段依然是Pointwise的,即只會考慮當前商戶相關的特徵,而不會考慮列表上下文的結果,未來我們也會在這個方向上進行一些探索。