Learning to rank基本演算法小結
最近工作中需要調研一下搜尋排序相關的方法,這裡寫一篇水文,總結一下幾天下來的調研成果。包括
- 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,等級設定分別文25-1,24-1等等
那麼加入現在有一個query為abc, 返回如下圖所示的列表,假設使用者選擇和排序結果無關,則累積增益值如右列所示:
考慮到靠前的位置點選概率越大,那麼靠下的位置需要加上衰減因子
log(1+j),求和就可以得到DCG的值,最後為了使得不同不搜尋結果可以比較,用DCG/MaxDCG就可以得到NDCG的值了。
MaxDCG就是當前情況下最佳排序的DCG值。如圖所示
- 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模型用lambda梯度代替了GBDT的殘差。
FTRL演算法(Follow the regularized Leader Proximal)
點選率預估問題(CTR)是搜尋、廣告和推薦中一個非常重要的模組。在CTR計算的過程中,常常採用LR模型。
FTRL屬於線上演算法,和SGD等常用的線上優化方法對比,可以產生較好的稀疏性,非常適合ID特徵較多,維度較高的特徵。
google的論文中已經給出了很詳細的工程化實現的說明,該方法也已經廣泛的應用。
- 引數優化:
第一項:保證引數不偏移歷史引數
第二項:保證w不會變化太大
第三項:代表L1正則,獲得稀疏解
- 演算法流程:
相關文章
- RANK函式小結函式
- [原創] 小議rank(),dense_rank(),row_number()使用與區別
- MySQL基本操作語句小結MySql
- 基本資料結構演算法資料結構演算法
- rank() 與dense_rank()分析
- C基本資料型別小結資料型別
- rank
- Machine Learning:PageRank演算法Mac演算法
- 分析函式DENSE_RANK 和 RANK函式
- XGBoost演算法原理小結演算法
- 常見排序演算法小結排序演算法
- shell指令碼基本概念和命令小結指令碼
- Deep Learning模型中常見的optimizer優化器演算法總結模型優化演算法
- rank,dense_rank,row_number 分析函式函式
- Oracle:Rank,Dense_Rank,Row_Number比較Oracle
- javascript資料結構與演算法--基本排序演算法分析JavaScript資料結構演算法排序
- 加密演算法小結(網文整理)加密演算法
- Netty 基本元件小結–Channel、EventLoop、Bootstrap等Netty元件OOPboot
- Netty 基本元件小結--Channel、EventLoop、Bootstrap等Netty元件OOPboot
- PaddleSeg2.8訓練驗證時報錯[Hint: Expected axis >= -rank && axis < rank == true, but received axis >= -rank && axis < rank:0 != true:1.]
- 【SQL 學習】分析函式之RANK() DENSE_RANK ()SQL函式
- oracle分析函式Rank, Dense_rank, row_numberOracle函式
- 【演算法】連結串列的基本操作和高頻演算法題演算法
- 淺談演算法和資料結構(2):基本排序演算法演算法資料結構排序
- Machine Learning(1)-分類演算法Mac演算法
- JVM調優總結(三)-基本垃圾回收演算法JVM演算法
- Spark2 Dataset分析函式--排名函式row_number,rank,dense_rank,percent_rankSpark函式
- Hive中row_number()、dense_rank()、rank()的區別Hive
- 分析函式——排序排列(rank、dense_rank、row_number)函式排序
- oracle 分析函式之(rank()/dense_rank()/row_number())Oracle函式
- 異常點檢測演算法小結演算法
- 八大預測演算法小結演算法
- 淺談網頁基本效能優化規則小結網頁優化
- row_number() over,rank() over,dense_rank() over的區別
- Oracle 中分析函式用法之--rank(),dense_rank(),partition,over()Oracle函式
- SQL語句中的rank () over , row_number() over ,rank_dense ()SQL
- SQL SERVER 排序函式ROW_NUMBER、RANK、DENSE_RANK、NTILESQLServer排序函式
- oracle中聚合函式RANK和dense_rank的使用(轉)Oracle函式