Learning to Rank算法介紹:RankNet,LambdaRank,LambdaMart

以前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中簡單介紹了Learning to Rank的基本原理,也講到了Learning to Rank的幾類經常使用的方法:pointwise,pairwise,listwise。前面已經介紹了pairwise方法中的 RankSVM,IR SVM,和GBRank。這篇博客主要是介紹另外三種相互之間有聯繫的pairwise的方法:RankNet,LambdaRank,和LambdaMart。html

1. RankNet

RankNet是2005年微軟提出的一種pairwise的Learning to Rank算法,它從機率的角度來解決排序問題。RankNet的核心是提出了一種機率損失函數來學習Ranking Function,並應用Ranking Function對文檔進行排序。這裏的Ranking Function能夠是任意對參數可微的模型,也就是說,該機率損失函數並不依賴於特定的機器學習模型,在論文中,RankNet是基於神經網絡實現的。除此以外,GDBT等模型也能夠應用於該框架。web

1.1 相關性機率

咱們先定義兩個機率:預測相關性機率、真實相關性機率。算法

(1)預測相關性機率

對於任意一個doc對(Ui,Uj),模型輸出的score分別爲sisj,那麼根據模型的預測,UiUj與Query更相關的機率爲:網絡

因爲RankNet使用的模型通常爲神經網絡,根據經驗sigmoid函數能提供一個比較好的機率評估。參數σ決定sigmoid函數的形狀,對最終結果影響不大。框架

RankNet證實了若是知道一個待排序文檔的排列中相鄰兩個文檔之間的排序機率,則經過推導能夠算出每兩個文檔之間的排序機率。所以對於一個待排序文檔序列,只需計算相鄰文檔之間的排序機率,不須要計算全部pair,減小計算量。機器學習

(2)真實相關性機率 

對於訓練數據中的UiUj,它們都包含有一個與Query相關性的真實label,好比Ui與Query的相關性label爲good,Uj與Query的相關性label爲bad,那麼顯然UiUj更相關。咱們定義UiUj更相關的真實機率爲:函數

若是UiUj更相關,那麼Sij=1;若是Ui不如Uj相關,那麼Sij=1;若是UiUj與Query的相關程度相同,那麼Sij=0。一般,兩個doc的relative relevance judgment可由人工標註或者從搜索日誌中獲取獲得(見http://www.cnblogs.com/bentuwuying/p/6681943.html)。學習

1.2 損失函數

對於一個排序,RankNet從各個doc的相對關係來評價排序結果的好壞,排序的效果越好,那麼有錯誤相對關係的pair就越少。所謂錯誤的相對關係即若是根據模型輸出Ui排在Uj前面,但真實label爲Ui的相關性小於Uj,那麼就記一個錯誤pair,RankNet本質上就是以錯誤的pair最少爲優化目標。而在抽象成cost function時,RankNet其實是引入了機率的思想:不是直接判斷Ui排在Uj前面,而是說Ui以必定的機率P排在Uj前面,便是以預測機率與真實機率的差距最小做爲優化目標。最後,RankNet使用Cross Entropy做爲cost function,來衡量的擬合程度:優化

化簡後,有:atom

當Sij=1,有:

當Sij=-1,有:

下面展現了當Sij分別取1,0,-1的時候cost function以si-sj爲變量的示意圖:

能夠看到當Sij=1時,模型預測的sisj越大,其代價越小;Sij=1時,sisj越小,代價越小;Sij=0時,代價的最小值在sisj相等處取得。

該損失函數有如下幾個特色:

1) 當兩個相關性不一樣的文檔算出來的模型分數相同時,損失函數的值大於0,仍會對這對pair作懲罰,使他們的排序位置區分開。

2) 損失函數是一個類線性函數,能夠有效減小異常樣本數據對模型的影響,所以具備魯棒性。

總代價爲:

其中,I表示全部在同一query下,且具備不一樣relevance judgment的doc pair,每一個pair有且僅有一次。

1.3 合併機率

上述的模型Pij須要保持一致性,即若是Ui的相關性高於Uj,Uj的相關性高於Uk,則Ui的相關性也必定要高於Uk。不然,若是不能保持一致性,那麼上面的理論就很差使了。

咱們使用Ui vs Uj的真實機率 和 Uj vs Uk 的真實機率,計算Ui vs Uk的真實機率:

,則有下圖所示:

1.4 Gradient Descent

咱們得到了一個可微的代價函數,下面咱們就能夠用隨機梯度降低法來迭代更新模型參數wk了,即

η爲步長,代價C沿負梯度方向變化。

這代表沿負梯度方向更新參數確實能夠下降總代價。

而使用了隨機梯度降低法時,有:

其中,

1.5 加速RankNet訓練過程

上面的是對於每一對pair都會進行一次權重的更新,實際上是能夠對同一個query下的全部文檔pair所有帶入神經網絡進行前向預測,而後計算總差分並進行偏差後向反饋,這樣將大大減小偏差反向傳播的次數。

即,咱們能夠轉而利用批處理的梯度降低法:

其中,

咱們令:

有:

下面咱們來看看這個λi是什麼。前面講過集合I中只包含label不一樣的doc的集合,且每一個pair僅包含一次,即(Ui,Uj)與(Uj,Ui)等價。爲方便起見,咱們假設I中只包含(Ui,Uj)表示Ui相關性大於Uj的pair,即I中的pair均知足Sij=1,那麼

這個寫法是Burges的paper上的寫法。下面咱們用一個實際的例子來看:有三個doc,其真實相關性知足U1>U2>U3I{(1,2), (1,3), (2,3)}共三個pair 

顯然λ1=λ12+λ13λ2=λ23λ12λ3=λ13λ23,所以我所理解的λi應爲

λi決定着第i個doc在迭代中的移動方向和幅度,真實的排在Ui前面的doc越少,排在Ui後面的doc越多,那麼文檔Ui向前移動的幅度就越大(實際λi負的越多越向前移動)。這代表每一個f下次調序的方向和強度取決於同一Query下能夠與其組成relative relevance judgment的「pair對」的其餘不一樣label的文檔。

同時,這樣的改造至關因而mini-batch learning。能夠加速RankNet的學習過程。

原先使用神經網絡模型,經過Stochastic gradient descent計算的時候,是對每個pair對都會進行一次權重的更新。而經過因式分解從新改造後,如今的mini-batch learning的方式,是對同一個query下的全部doc進行一次權重的更新。時間消耗從O(n2)降到了O(n)。這對訓練過程的影響是很大的,由於使用的是神經網絡模型,每次權重的更新迭代都須要先進行前向預測,再進行偏差的後向反饋。

 

2. Information Retrieval的評價指標

Information Retrieval的評價指標包括:MRR,MAP,ERR,NDCG等。以前的博客中有詳細介紹過NDCG和MAP:http://www.cnblogs.com/bentuwuying/p/6681943.html,這裏就再也不重複介紹了。NDCG和ERR指標的優點在於,它們對doc的相關性劃分多個(>2)等級,而MRR和MAP只會對doc的相關性劃分2個等級(相關和不相關)。而且,這些指標都包含了doc位置信息(給予靠前位置的doc以較高的權重),這很適合於web search。然而,這些指標的缺點是不平滑、不連續,沒法求梯度,若是將這些指標直接做爲模型評分的函數的話,是沒法直接用梯度降低法進行求解的。

這裏簡單介紹下ERR(Expected Reciprocal Rank)。ERR是受到cascade model的啓發,即一個用戶從上到下依次瀏覽doc,直至他找到一個滿意的結果,ERR能夠定義爲:

其中,表示第i位的doc的相關性機率:

其中,lm表示相關性評分最高的一檔。

 

3. LambdaRank

上面咱們介紹了以錯誤pair最少爲優化目標的RankNet算法,然而許多時候僅以錯誤pair數來評價排序的好壞是不夠的,像NDCG或者ERR等評價指標就只關注top k個結果的排序,當咱們採用RankNet算法時,每每沒法以這些指標爲優化目標進行迭代,因此RankNet的優化目標和IR評價指標之間仍是存在gap的。如下圖爲例:

如上圖所示,每一個線條表示文檔,藍色表示相關文檔,灰色表示不相關文檔,RankNet以pairwise error的方式計算cost,左圖的cost爲13,右圖經過把第一個相關文檔下調3個位置,第二個文檔上條5個位置,將cost降爲11,可是像NDCG或者ERR等評價指標只關注top k個結果的排序,在優化過程當中下調前面相關文檔的位置不是咱們想要獲得的結果。圖 1右圖左邊黑色的箭頭表示RankNet下一輪的調序方向和強度,但咱們真正須要的是右邊紅色箭頭表明的方向和強度,即更關注靠前位置的相關文檔的排序位置的提高。LambdaRank正是基於這個思想演化而來,其中Lambda指的就是紅色箭頭,表明下一次迭代優化的方向和強度,也就是梯度。

LambdaRank是一個經驗算法,它不是經過顯示定義損失函數再求梯度的方式對排序問題進行求解,而是分析排序問題須要的梯度的物理意義,直接定義梯度,即Lambda梯度。

LambdaRank在RankNet的加速算法形式(,Sij=1)的基礎上引入評價指標Z (如NDCG、ERR等),把交換兩個文檔的位置引發的評價指標的變化做爲其中一個因子,實驗代表對模型效果有顯著的提高:

損失函數的梯度表明了文檔下一次迭代優化的方向和強度,因爲引入了IR評價指標,Lambda梯度更關注位置靠前的優質文檔的排序位置的提高。有效的避免了下調位置靠前優質文檔的位置這種狀況的發生。LambdaRank相比RankNet的優點在於分解因式後訓練速度變快,同時考慮了評價指標,直接對問題求解,效果更明顯。

 

3. LambdaMart

1)Mart定義了一個框架,缺乏一個梯度。

2)LambdaRank從新定義了梯度,賦予了梯度新的物理意義。

所以,全部可使用梯度降低法求解的模型均可以使用這個梯度,MART就是其中一種,將梯度Lambda和MART結合就是大名鼎鼎的LambdaMART。

         MART的原理是直接在函數空間對函數進行求解,模型結果由許多棵樹組成,每棵樹的擬合目標是損失函數的梯度,在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,所以對正負樣本比例失衡不敏感

相關文章
相關標籤/搜索