Learning To Rank之LambdaMART的前世今生
Learning To Rank之LambdaMART的前世今生
標簽: 機器學習排序模型Learning To RankLambdaMARTRanknet 2014-11-02 17:57 14485人閱讀 評論(4) 收藏 舉報 本文章已收錄于: 分類: Learning To Rank 機器學習(3) 作者同類文章X版權聲明:本文為博主原創文章,未經博主允許不得轉載。
1.?????? 前言
? ? ? ???我們知道排序在很多應用場景中屬于一個非常核心的模塊,最直接的應用就是搜索引擎。當用戶提交一個query,搜索引擎會召回很多文檔,然后根據文檔與query以及用戶的相關程度對文檔進行排序,這些文檔如何排序直接決定了搜索引擎的用戶體驗。其他重要的應用場景還有在線廣告、協同過濾、多媒體檢索等的排序。
? ? ? ???LambdaMART是Learning To Rank的其中一個算法,適用于許多排序場景。它是微軟Chris Burges大神的成果,最近幾年非常火,屢次現身于各種機器學習大賽中,Yahoo! Learning to Rank Challenge比賽中奪冠隊伍用的就是這個模型[1],據說Bing和Facebook使用的也是這個模型。
? ? ? ???本文先簡單介紹LambdaMART模型的組成部分,然后介紹與該模型相關的其他幾個模型:RankNet、LambdaRank,接著重點介紹LambdaMART的原理,然后介紹LambdaMART的開源實現軟件包Ranklib,最后以搜索下拉提示的個性化推薦場景說明LambdaMART的應用。
2.?????? 符號說明
? ? ? ???在展開介紹之前先說明本文用到的符號所代表的含義:
| 符號 | 說明 |
| q | 用戶提交的查詢請求 |
| d | 需要排序的文檔 |
| D | 一次請求召回的待排序文檔集 |
| s | 模型計算得到的文檔得分 |
| (i, j) | 文檔 和 組成的有序pair |
| P | 所有的文檔pair集合 |
| 排在 之前 | |
| 文檔pair下標集合,對每個 ,有 | |
| 排在 之前的預測概率 | |
| 排在 之前的真實概率,實際如果 排在 之前則為1,否則為0 | |
| 與 的真實序關系,取值范圍{0, }:0表示 與 的相關性一樣,誰排在前面沒關系;1表示 比 更相關,排在 前面;-1則相反,表示 排在 后面 |
3.?????? LambdaMART說文解字
? ? ? ???LambdaMART模型從名字上可以拆分成Lambda和MART兩部分,表示底層訓練模型用的是MART(Multiple Additive Regression Tree),如果MART看起來比較陌生,那換成GBDT(GradientBoosting Decision Tree)估計大家都很熟悉了,沒錯,MART就是GBDT。Lambda是MART求解過程使用的梯度,其物理含義是一個待排序的文檔下一次迭代應該排序的方向(向上或者向下)和強度。將MART和Lambda組合起來就是我們要介紹的LambdaMART。
4.?????? 神奇的Lambda
? ? ? ???為什么LambdaMART可以很好的應用于排序場景?這主要受益于Lambda梯度的使用,前面介紹了Lambda的意義在于量化了一個待排序的文檔在下一次迭代時應該調整的方向和強度。
? ? ? ???但Lambda最初并不是誕生于LambdaMART,而是在LambdaRank模型中被提出,而LambdaRank模型又是在RankNet模型的基礎上改進而來。如此可見RankNet、LambdaRank、LambdaMART三個的關系很不一般,是一個神秘的基友群,下面我們逐個分析三個基友之間的關系[2]。
5.?????? RankNet
? ? ? ???RankNet[3]是一個pairwise模型,它把排序問題轉換成比較一個(i, j) pair的排序概率問題,即比較 排在 前的概率。它首先計算每個文檔的得分,然后根據得分計算文檔pair的排序概率:
? ? ? ???可以看到這其實就是邏輯回歸的sigmoid函數[4],由于 影響的是sigmoid函數的形狀,對最終結果影響不大,因此默認使用 =1進行簡化。RankNet證明了如果知道一個待排序文檔的排列中相鄰兩個文檔之間的排序概率,則通過推導可以算出每兩個文檔之間的排序概率。因此對于一個待排序文檔序列,只需計算相鄰文檔之間的排序概率,不需要計算所有pair,減少計算量。
? ? ? ???然后用交叉熵[5]作為損失函數來衡量 對 的擬合程度:
???????? 該損失函數有以下幾個特點:
? ? ? ???1) 當兩個相關性不同的文檔算出來的模型分數相同時,損失函數的值大于0,仍會對這對pair做懲罰,使他們的排序位置區分開
? ? ? ???2) 損失函數是一個類線性函數,可以有效減少異常樣本數據對模型的影響,因此具有魯棒性
? ? ? ???Ranknet最終目標是訓練出一個算分函數s=f(x:w),使得所有pair的排序概率估計的損失最小:
? ? ? ???RankNet采用神經網絡模型優化損失函數,采用梯度下降法[6]求解:
? ? ? ???排序問題的評價指標一般有NDCG[7]、ERR[8]、MAP[9]、MRR[10]等,這些指標的特點是不平滑、不連續,無法求梯度,因此無法直接用梯度下降法求解。RankNet的創新點在于沒有直接對這些指標進行優化,而是間接把優化目標轉換為可以求梯度的基于概率的交叉熵損失函數進行求解。因此任何用梯度下降法優化目標函數的模型都可以采用該方法,RankNet采用的是神經網絡模型,其他類似boosting tree等模型也可以使用該方法求解。
6.?????? LambdaRank
圖1 pairwise error
? ? ? ???如圖 1所示,每個線條表示文檔,藍色表示相關文檔,灰色表示不相關文檔,RankNet以pairwise error的方式計算cost,左圖的cost為13,右圖通過把第一個相關文檔下調3個位置,第二個文檔上條5個位置,將cost降為11,但是像NDCG或者ERR等評價指標只關注top k個結果的排序,在優化過程中下調前面相關文檔的位置不是我們想要得到的結果。圖 1右圖左邊黑色的箭頭表示RankNet下一輪的調序方向和強度,但我們真正需要的是右邊紅色箭頭代表的方向和強度,即更關注靠前位置的相關文檔的排序位置的提升。LambdaRank[11]正是基于這個思想演化而來,其中Lambda指的就是紅色箭頭,代表下一次迭代優化的方向和強度,也就是梯度。
? ? ? ???受LambdaNet的啟發,LambdaRank對 做因式分解,如下:
? ? ? ???其中
? ? ? ???代入上式得
? ? ? ???其中令
? ? ? ???對于 的文檔pair,由于 ,因此 ,所以有
? ? ? ???因此,對每個文檔 ,其Lambda為 ,即每一個文檔下一次調序的方向和強度取決于所有同一query的其他不同label的文檔。
? ? ? ???同時LambdaRank還在Lambda中引入評價指標Z (如NDCG、ERR等),把交換兩個文檔的位置引起的評價指標的變化 作為其中一個因子,實驗表明對模型效果有顯著的提升:
? ? ? ???可以看出,LambdaRank不是通過顯示定義損失函數再求梯度的方式對排序問題進行求解,而是分析排序問題需要的梯度的物理意義,直接定義梯度,可以反向推導出LambdaRank的損失函數為:
? ? ? ???LambdaRank相比RankNet的優勢在于分解因式后訓練速度變快,同時考慮了評價指標,直接對問題求解,效果更明顯。
7.?????? LambdaMART
? ? ? ???LambdaRank重新定義了梯度,賦予了梯度新的物理意義,因此,所有可以使用梯度下降法求解的模型都可以使用這個梯度,MART就是其中一種,將梯度Lambda和MART結合就是大名鼎鼎的LambdaMART[12]。
???????? MART[13][14]的原理是直接在函數空間對函數進行求解,模型結果由許多棵樹組成,每棵樹的擬合目標是損失函數的梯度,在LambdaMART中就是Lambda。LambdaMART的具體算法過程如下:
???????? 可以看出LambdaMART的框架其實就是MART,主要的創新在于中間計算的梯度使用的是Lambda,是pairwise的。MART需要設置的參數包括:樹的數量M、葉子節點數L和學習率v,這3個參數可以通過驗證集調節獲取最優參數。
? ? ? ???MART支持“熱啟動”,即可以在已經訓練好的模型基礎上繼續訓練,在剛開始的時候通過初始化加載進來即可。下面簡單介紹LambdaMART每一步的工作:
? ? ? ???1) ?每棵樹的訓練會先遍歷所有的訓練數據(label不同的文檔pair),計算每個pair互換位置導致的指標變化 以及Lambda,即?,然后計算每個文檔的Lambda:?,再計算每個 的導數wi,用于后面的Newton step求解葉子節點的數值。
? ? ? ???2) ?創建回歸樹擬合第一步生成的 ,劃分樹節點的標準是Mean Square Error,生成一顆葉子節點數為L的回歸樹。
? ? ? ???3) ?對第二步生成的回歸樹,計算每個葉子節點的數值,采用Newton step求解,即對落入該葉子節點的文檔集,用公式?計算該葉子節點的輸出值。
? ? ? ???4) ?更新模型,將當前學習到的回歸樹加入到已有的模型中,用學習率v(也叫shrinkage系數)做regularization。
? ? ? ???LambdaMART具有很多優勢:
? ? ? ???1) ?適用于排序場景:不是傳統的通過分類或者回歸的方法求解排序問題,而是直接求解
? ? ? ???2) ?損失函數可導:通過損失函數的轉換,將類似于NDCG這種無法求導的IR評價指標轉換成可以求導的函數,并且富有了梯度的實際物理意義,數學解釋非常漂亮
? ? ? ???3) ?增量學習:由于每次訓練可以在已有的模型上繼續訓練,因此適合于增量學習
? ? ? ???4) ?組合特征:因為采用樹模型,因此可以學到不同特征組合情況
? ? ? ???5) ?特征選擇:因為是基于MART模型,因此也具有MART的優勢,可以學到每個特征的重要性,可以做特征選擇
? ? ? ???6) ?適用于正負樣本比例失衡的數據:因為模型的訓練對象具有不同label的文檔pair,而不是預測每個文檔的label,因此對正負樣本比例失衡不敏感
8.?????? Ranklib開源工具包
? ? ? ???Ranklib[15]是一個開源的Learning ToRank工具包,里面實現了很多Learning To Rank算法模型,其中包括LambdaMART,其源碼的算法實現流程大致如下:
? ? ? ???該工具包定義的數據格式如下:
label?????????? qid:$id????? $feaid:$feavalue????? $feaid:$feavalue????? …????? #description
? ? ? ???每行代表一個樣本,相同查詢請求的樣本的qid相同,label表示該樣本和該查詢請求的相關程度,description描述該樣本屬于哪個待排序文檔,用于區分不同的文檔。
? ? ? ???該工具包是用Java實現的,在空間使用上感覺有些低效,但整體設計還是挺好的,Ranker的接口設計的很好,值得學習借鑒。
? ? ? ???另外還有很多其他的LambdaMART的開源實現,有興趣的可以參考[16][17][18]
9.??????LambdaMART應用
? ? ? ???最后我們以一個實際場景來介紹LambdaMART的應用。現在很多搜索引擎都有一個下拉提示的功能,學術上叫QAC(Query Auto-Completion,query自動補全),主要作用是在用戶在搜索引擎輸入框輸入query的過程中輸出一系列跟用戶輸入query前綴相匹配的query,供用戶選擇,減少用戶的輸入,讓用戶更加便捷的搜索。
? ? ? ???Milad Shokouhi[19]發現有一些query的熱度有明顯的用戶群傾向,例如,當不同用戶輸入i時,年輕的女性用戶傾向于搜instagram,而男性用戶則傾向于搜imdb,所以可以對query的下拉提示做個性化排序。
? ? ? ???Milad Shokouhi使用LambdaMART模型作為個性化排序模型,使用了用戶的長期歷史、短期歷史、性別、年齡、所處地域、提示query的原始排序位置等特征,最終效果提升了9%,效果非常明顯。
? ? ? ???Milad Shokouhi的工作說明LambdaMART可以應用于個性化排序,且效果非常不錯。
10.?? 總結
? ? ? ???本文在一些相關書籍、paper和開源代碼的基礎上,簡單梳理了LambdaMART的來龍去脈,簡單總結:Lambda在RankNet出爐,在LambdaRank升華,在LambdaMART發揚光大,青出于藍而勝于藍,模型的數學推導和實際效果都非常漂亮,只要涉及到排序的場景都可以適用,是排序場景的“萬金油”。
參考文獻:
[1]??????Learning to Rank Using an Ensemble ofLambda-Gradient Models
[2]??????From RankNet to LambdaRank to LambdaMART: AnOverview
[3]??????Learning to Rank using Gradient Descent
[4]??????Wikipedia-Sigmoid Function
[5]??????Wikipedia-Cross Entropy
[6]??????Wikipedia-Gradient Descent
[7]??????Wikipedia-NDCG
[8]??????Expected Reciprocal Rank for Graded Relevance
[9]??????Wikipedia-MAP
[10]??Wikipedia-MRR
[11]??Learning to Rank with Nonsmooth CostFunctions
[12]??Adapting boosting for information retrievalmeasures
[13]??Greedy function approximation: A gradientboosting machine
[14]??The Elements of Statistical Learning
[15]??RankLib
[16]??jforests
[17]??xgboost
[18]??gbm
[19]??Learning to Personalize QueryAuto-Completion
轉載請注明出處,本文轉自:http://blog.csdn.net/huagong_adu/article/details/40710305
本博客搬遷至:http://ralphadu.com/?
總結
以上是生活随笔為你收集整理的Learning To Rank之LambdaMART的前世今生的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Loss Function view
- 下一篇: Learning to Rank 中Li