面試的時候,雖然做過醫療文獻搜索,也應用過L2R的相關模型,但涉及到其中的一些技術細節,都會成為我拿不下offer永遠的痛。也嘗試過去理解去背下一些知識點,終究沒有力透紙背,隨著時間又開始變得模糊,下面對相關問題進行一個總結。
一、PointWise、PairWise和ListWise
這個并不是特定的算法,而是排序模型的設計思路,主要體現在損失函數(Loss Function)以及相應的標簽標注方式和優化方法的不同。
PointWise
可以訓練一個二分類網絡:,其中
。訓練的目標是最小化數據集中所有問題和候選句子對的交叉熵。
缺陷是雖然預測分數,但損失函數只考慮正負樣本,并不要求精確打分,正樣本內的先后關系并不在考慮范圍。
Pointwise常見算法有SVM等
PairWise
損失函數為合頁損失函數:
這里m為邊界閾值,即正樣本的得分不僅要比負樣本的高,而且還要高出一定閾值范圍,。
缺陷是對噪音更加敏感,比如一個樣本標注錯誤,會引起多個pair對錯誤,僅考慮了pair對的相對位置信息,并沒有考慮到絕對位置信息。
Pairwise常見算法有Ranking SVM、RankNet、RankBoost等。
ListWise
在訓練過程中給定提問和它的一系列候選句子
和標簽?
,歸一化的得分向量
通過如下公式計算:
標簽歸一化為,
訓練的目標可以為最小化和
的KL散度。
Listwise常見算法有AdaRank,SoftRank,LambdaMART等
二、RankNet、LambdaRank和LambdaMart
RankNet
RankNet的訓練數據是一個個的pair對,比如文章(i,j),然后模型對兩個候選進行打分,我們建模的目標是一個概率,即模型認為候選i比候選j更相關的概率:
,
LambdaRank
首先對RankNet的損失函數進行分解,得到其中的梯度,
可以表示梯度的強度,進一步簡化,假設對于文檔對(i,j),都有文檔i在文檔j前面,即
,則
LambdaRank主要創新點在于不直接定義模型的損失函數再求梯度,而是通過分析RankNet排序損失函數的梯度再直接對梯度lambda進行修改。
現在將NDCG,ERR等指標引入lambda中,論文中的做法是交換兩個文檔i,j的位置,然后計算評估指標的變化情況,把
作為lambda的因子,Z可以是NDCG等評價指標
通過梯度lambda也可以反推出LambdaRank的損失函數,如下,
三、LambdaMart的實現原理
MART: Multiple Additive Regression Tree
GBDT:?Gradient Boosting Decision Tree
- 基于多個決策樹來預測結果;
- 決策樹之間通過加法模型疊加結果;
- 每棵決策樹都是針對之前決策樹的不足進行改進。
?綜上的偽代碼可知,lambdaMart的計算經歷這樣幾個步驟
- ?利用訓練數據每個query的pair對情況,計算
,
?
同時,計算的,還有權重參數,用于牛頓迭代法,但實際代碼中感覺沒有用到這一塊。
? ? ? ? 2. 以每個樣本特征為,以
為擬合目標
,構建決策樹,
? ? ? ? 3. 然后用訓練的決策樹去預測的分數,將得到分數加入
中,
? ? ? ? 4、然后重復上面3個步驟,訓練多棵決策樹。
說到決策樹的訓練:lambdaMART采用最樸素的最小二乘法,也就是最小化平方誤差和來分裂節點:即對于某個選定的feature,選定一個值val,所有<=val的樣本分到左子節點,>val的分到右子節點。然后分別對左右兩個節點計算平方誤差和,并加在一起作為這次分裂的代價。遍歷所有feature以及所有可能的分裂點val(每個feature按值排序,每個不同的值都是可能的分裂點),在這些分裂中找到代價最小的。
五、評價指標
NDCG
這里計算的時候,會可能會采取兩種策略,需要注意下:
? ? ? ? 1、預測結果的分數不要,只要文檔的順序,而具體分數用文檔真實的分數,也就是分子分母計算的用的是同一套,只不過由于預測文檔的先后順序出現變動,最大分數未必會出現在第一位;
? ? ? ? 2、分子用預測分數,分母用真實分數。
另外需要注意的一點是分子分母計算面對可能并非完全一樣的樣本集。
六、參考文獻
-
排序學習(LTR)經典算法:RankNet、LambdaRank和LambdaMart
- LambdaMART簡介-基于Ranklib源碼(Regression Tree訓練)
- LambdaMART簡介-基于Ranklib源碼(lambda計算)