LambdaMART是一種state-of-art的Learning to rank算法,由微軟在2010年提出[1]。在工業界,它也被大量運用在各類ranking場景中。LambdaMART可以看做GDBT版本的LambdaRank,而后者又是基于RankNet發展而來的。RankNet最重要的貢獻是提出了一種pairwise的用于排序的概率損失函數,而LambdaRank又在損失函數中巧妙的引入了NDCG等ranking metrics來優化排序效果。LambdaMART則是集大成者,它結合了上述兩篇文章中提出的Lambda函數以及GDBT這個效果經過實踐證明的ensemble算法,在各種排序問題中均能取得不錯的效果。下面是目前的一些開源實現:
RankNet
RankNet是2005年微軟提出的一種pairwise的Learning to rank算法,它從概率的角度來解決排序問題。RankNet提出了一種pairwise的概率損失函數,并可以應用于任意對參數可導的學習算法。在論文中,RankNet基于神經網絡實現,除此之外,GDBT等模型也可以應用該損失函數。
RankNet是一個pairwise的算法,它首先將訓練數據中同一Query下的doc兩兩組成pair,用{Ui,Uj}表示。模型的學習目標是得到一個打分函數f(x),它的輸入是某個doc的特征向量x,輸出是一個實數,值越高代表該doc的排序位置應該越靠前。也就是說,當f(xi)>f(xj)時,Ui的排序位置應該在Uj之前,用Ui ? Uj表示。基于此,我們定義Ui比Uj排序位置更靠前的概率如下,其中,s=f(x).
我們的目標概率(理想情況,預測概率應該盡可能擬合的概率)如下:
為了方便計算,我們令:
這樣,根據Ui和Uj的標注得分,就可以計算P‘ij。
有了目標概率和模型預測概率,使用交叉熵損失函數(cross entropy loss function)作為概率損失函數,它衡量了預測概率和目標概率在概率分布上的擬合程度:
求上式關于si的偏導,由于對稱性可以得到如下結論:
計算C關于模型參數wk的偏導,并應用gradient descent求解:
總的來說,RankNet從概率角度定義了排序問題的loss function,并通過梯度下降法求解。所以RankNet依賴的模型必須是平滑的,保證梯度是可以計算的。在paper中,作者選擇一個兩層的神經網絡作為排序模型。除此之外,選擇GBDT也可以取得不錯的效果。
交叉熵
設隨機變量X服從的概率分布為p(x),往往p(x)是未知的,我們通過統計方法得到X的近似分布q(x),則隨機變量X的交叉熵為:它衡量了q(x)和p(x)的擬合程度
加速學習算法
在上述的學習過程中,每一對樣本{Ui,Uj}都會更新一次參數w,如果采用BP神經網絡模型,每一次更新都需要先前向預測,再誤差后向反饋,訓練過程非常慢。因此,有了下面的加速算法;
對于給定的樣本對Ui,Uj,我們有如下推導:
![][07]
這里我們定義:
![][08]
梯度下降量的求解如下:
![][09]
其中,為了計算簡便,我們令{i,j}滿足Ui>Uj,所以有
![][10]
上兩式合并有:
![][12]
其中:
![][11]
這樣,我們將每更新一次w,計算一個樣本對{Ui,Uj}
改為了計算Ui所能組成的所有樣本對。加速算法可以看成是一種mini-batch的梯度下降算法。
LambdaRank
在RankNet中,我們使用了交叉熵概率損失函數,并作為最優化的目標。但對于IR問題,通常選擇NDCG、ERR作為評價指標,這兩者間存在一定的mismatch。另一方面,NDCG、ERR是非平滑、不連續的,無法求梯度,不能直接運用梯度下降法求解,將其直接作為優化目標是比較困難的。因此,LambdaRank選擇了直接定義cost function的梯度來解決上述問題。
LambdaRank是一個經驗算法,它直接定義的了損失函數的梯度λ,也就是Lambda梯度。Lambda梯度由兩部分相乘得到:(1)RankNet中交叉熵概率損失函數的梯度;(2)交換Ui,Uj位置后IR評價指標Z的差值。具體如下:
![][15]
Z可以是NDCG、ERR、MRR、MAP等IR評價指標
損失函數的梯度代表了文檔下一次迭代優化的方向和強度,由于引入了IR評價指標,Lambda梯度更關注位置靠前的優質文檔的排序位置的提升。有效的避免了下調位置靠前優質文檔的位置這種情況的發生。
LambdaRank相比RankNet的優勢在于考慮了評價指標,直接對問題求解,所以效果更好。
LambdaMART
LambdaRank中重新定義了損失函數的梯度,而這個Lambda梯度可以應用于任何使用梯度下降法求解的模型。自然,我們想到了將Lambda梯度和MART結合,這就是LambdaMART。