搜索排序相關的方法,包括
- Learning to rank 基本方法
- Learning to rank 指標介紹
- LambdaMART 模型原理
- FTRL 模型原理
Learning to rank
排序學習是推薦、搜索、廣告的核心方法。排序結果的好壞很大程度影響用戶體驗、廣告收入等。
排序學習可以理解為機器學習中用戶排序的方法,這里首先推薦一本微軟亞洲研究院劉鐵岩老師關於LTR的著作,Learning to Rank for Information Retrieval,書中對排序學習的各種方法做了很好的闡述和總結。我這里是一個超級精簡版。
排序學習是一個有監督的機器學習過程,對每一個給定的查詢-文檔對,抽取特征,通過日志挖掘或者人工標注的方法獲得真實數據標注。然后通過排序模型,使得輸入能夠和實際的數據相似。
常用的排序學習分為三種類型:PointWise,PairWise和ListWise。
PointWise
單文檔方法的處理對象是單獨的一篇文檔,將文檔轉換為特征向量后,機器學習系統根據從訓練數據中學習到的分類或者回歸函數對文檔打分,打分結果即是搜索結果
PointWise方法很好理解,即使用傳統的機器學習方法對給定查詢下的文檔的相關度進行學習,比如CTR就可以采用PointWise的方法學習,但是有時候排序的先后順序是很重要的,而PointWise方法學習到全局的相關性,並不對先后順序的優劣做懲罰。
PairWise
對於搜索系統來說,系統接收到用戶査詢后,返回相關文檔列表,所以問題的關鍵是確定文檔之間的先后順序關系。單文檔方法完全從單個文檔的分類得分角度計算,沒有考慮文檔之間的順序關系。文檔對方法將排序問題轉化為多個pair的排序問題,比較不同文章的先后順序。
但是文檔對方法也存在如下問題:
-
文檔對方法考慮了兩個文檔對的相對先后順序,卻沒有考慮文檔出現在搜索列表中的位置,排在搜索結果前面的文檔更為重要,如果靠前的文檔出現判斷錯誤,代價明顯高於排在后面的文檔。
-
同時不同的査詢,其相關文檔數量差異很大,所以轉換為文檔對之后, 有的查詢對能有幾百個對應的文檔對,而有的查詢只有十幾個對應的文檔對,這對機器學習系統的效果評價造成困難
常用PairWise實現:
- SVM Rank
- RankNet(2007)
- RankBoost(2003)
ListWise:
單文檔方法將訓練集里每一個文檔當做一個訓練實例,文檔對方法將同一個査詢的搜索結果里任意兩個文檔對作為一個訓練實例,文檔列表方法與上述兩種方法都不同,ListWise方法直接考慮整體序列,針對Ranking評價指標進行優化。比如常用的MAP, NDCG。常用的ListWise方法有:
- LambdaRank
- AdaRank
- SoftRank
- LambdaMART
Learning to rank指標介紹
-
MAP(Mean Average Precision):
假設有兩個主題,主題1有4個相關網頁,主題2有5個相關網頁。某系統對於主題1檢索出4個相關網頁,其rank分別為1, 2, 4, 7;對於主題2檢索出3個相關網頁,其rank分別為1,3,5。對於主題1,平均准確率為(1/1+2/2+3/4+4/7)/4=0.83。對於主題2,平均准確率為(1/1+2/3+3/5+0+0)/5=0.45。則MAP= (0.83+0.45)/2=0.64。 -
NDCG(Normalized Discounted Cumulative Gain):
NDCG把相關度分為r個等級,如果r=5,等級設定分別文2^5-1,2^4-1等等
那么加入現在有一個query為abc, 返回如下圖所示的列表,假設用戶選擇和排序結果無關,則累積增益值如右列所示:
考慮到靠前的位置點擊概率越大,那么靠下的位置需要加上衰減因子
log2/log(1+j),求和就可以得到DCG的值,最后為了使得不同不搜索結果可以比較,用DCG/MaxDCG就可以得到NDCG的值了。
MaxDCG就是當前情況下最佳排序的DCG值。如圖所示MaxDCG就是1、3、4、5、2的排序情況下的DCG的值(rank 2的gain較低,應該排到后面)
NDCG值
- MRR(Mean Reciprocal Rank)
給定查詢q,q在相關文檔的位置是r,那么MRR(q)就是1/R
LambdaMART算法:
LambdaMART是Learning to rank其中的一個算法,在Yahoo! Learning to Rank Challenge比賽中奪冠隊伍用的就是這個模型。
LambdaMART模型從名字上可以拆分成Lambda和MART兩部分,訓練模型采用的是MART也就是GBDT,lambda是MART求解使用的梯度,其物理含義是一個待排序文檔下一次迭代應該排序的方向。
但Lambda最初並不是誕生於LambdaMART,而是在LambdaRank模型中被提出,而LambdaRank模型又是在RankNet模型的基礎上改進而來。所以了解LambdaRank需要從RankNet開始說起。
論文:
From RankNet to LambdaRank to LambdaMART: AnOverview
RankNet
RankNet是一個pairwise模型,上文介紹在pairwise模型中,將排序問題轉化為多個pair的排序問題,比較文檔di排在文檔dj之前的概率。如下圖所示
最終的輸出的sigmoid函數,RankNet采用神經網絡模型優化損失函數,故稱為RankNet。
可是這樣有什么問題呢?排序指標如NDCG、MAP和MRR都不是平滑的函數,RankNet的方法采用優化損失函數來間接優化排序指標。
LambdaRank
如圖所示,藍色表示相關的文檔,灰色表示不相關的文檔。RankNet以pairwise計算cost左邊為13,右圖將第一個文檔下調3個位置,將第二個文檔下調5個位置,cost就降為11。如此以來,雖然RankNet的損失函數得到優化,但是NDCG和ERR等指標卻下降了。
RankNet優化的方向是黑色箭頭,而我們想要的其實是紅色的箭頭。LambdaRank就是基於這個,其中lambda表示紅色箭頭。
LambdaRank不是通過顯示定義損失函數再求梯度的方式對排序問題進行求解,而是分析排序問題需要的梯度的物理意義,直接定義梯度,Lambda梯度由兩部分相乘得到:(1)RankNet中交叉熵概率損失函數的梯度;(2)交換Ui,Uj位置后IR評價指標Z的差值。具體如下:
lambdaMART
我們知道GBDT算法每一次迭代中, 需要學習上一次結果和真實結果的殘差。在lambdaMART中,每次迭代用的並不是殘差,lambda在這里充當替代殘差的計算方法。
- LambdaMART算法流程
- GBDT算法流程
對比lambdaMART和GBDT算法流程,主要框架是相同的,只不過LambdaMART模型用lambda梯度代替了GBDT的殘差。
FTRL算法(Follow the regularized Leader Proximal)
論文: Ad click prediction: a view from the trenches
點擊率預估問題(CTR)是搜索、廣告和推薦中一個非常重要的模塊。在CTR計算的過程中,常常采用LR模型。
FTRL屬於在線算法,和SGD等常用的在線優化方法對比,可以產生較好的稀疏性,非常適合ID特征較多,維度較高的特征。
google的論文中已經給出了很詳細的工程化實現的說明,該方法也已經廣泛的應用。
- 參數優化
第一項:保證參數不偏移歷史參數
第二項:保證w不會變化太大
第三項:代表L1正則,獲得稀疏解
- 算法流程:
感謝答主整理:https://zhuanlan.zhihu.com/p/26539920
xgboost L2R:https://blog.csdn.net/seasongirl/article/details/100178083
很全面的LTR介紹: https://blog.csdn.net/anshuai_aw1/article/details/86018105
RankNet、LambdaRank和LambdaMART 算法細節講解:https://www.cnblogs.com/genyuan/p/9788294.html