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。

1. RankNet

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

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,來衡量的擬合程度:

化簡后,有:

當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,因此對正負樣本比例失衡不敏感

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM