Learning to Rank
https://www.cnblogs.com/wentingtu/archive/2012/03/13/2393993.html
Table of Contents
- 1 前言
- 2 LTR流程
- 3 訓練數據的獲取4 特征抽取
- 3.1 人工標註
- 3.2 搜索日誌
- 3.3 公共數據集
- 5 模型訓練
- 5.1 訓練方法
- 5.1.1 Pointwise
- 5.1.2 Pairwise
- 5.1.3 Listwise
- 5.1 訓練方法
- 6 效果評估7 參考
- 6.1 NDCG(Normalized Discounted Cumulative Gain)
- 6.1.1 定義
- 6.1.2 描述
- 6.2 MAP(Mean Average Precision)
- 6.2.1 定義
- 6.2.2 描述
- 6.1 NDCG(Normalized Discounted Cumulative Gain)
1 前言
Web Search 的歷史經歷了
傳統的 “text retrieval” 到 “基於link analysis的搜索引擎”,目前,由於機器學習和數據挖掘
的技術不斷成熟,利用統計模型來解決rank問題已經成為一個hot topic: Learning to Rank
2 LTR的流程
- Collect Training Data (Queries and their labeled documents)
- Feature Extraction for Query-document Pairs
- Learning the Ranking Model by Minimizing a Loss Function on the Training Data
- Use the Model to Answer Online Queries
3 訓練數據的獲取
有2種獲取訓練數據的來源:1)人工標註;2)搜索日誌。
3.1 人工標註
從搜索日誌中隨機選取一部分Query,讓受過專業訓練的數據評估員對”Query-Url對”給出
相關性判斷。常見的是5檔的評分:差、一般、好、優秀、完美。以此作為訓練數據。人工標
註是標註者的主觀判斷,會受標註者背景知識等因素的影響。
3.2 搜索日誌
使用點擊日誌的偏多。比如,結果ABC分別位於123位,B比A位置低,但卻得到了更多的點擊,
那麽B的相關性可能好於A。點擊數據隱式反映了同Query下搜索結果之間相關性的相對好壞。
在搜索結果中,高位置的結果被點擊的概率會大於低位置的結果,這叫做”點擊偏見”(Click Bias)。
但采取以上的方式,就繞過了這個問題。因為我們只記錄發生了”點擊倒置”的高低位結果,使用這
樣的”偏好對”作為訓練數據。關於點擊數據的使用,後續再單獨開帖記錄,這裏不展開。
在實際應用中,除了點擊數據,往往還會使用更多的數據。比如通過session日誌,挖掘諸如頁面停
留時間等維度。在實際場景中,搜索日誌往往含有很多噪音。且只有Top Query(被搜索次數較多
的Query)才能產生足夠數量能說明問題的搜索日誌。
3.3 公共數據集
現存一批公開的數據集可以使用
- LETOR, http://research.microsoft.com/en-us/um/beijing/projects/letor/
- Microsoft Learning to Rank Dataset, http://research.microsoft.com/en-us/projects/mslr/
- Yahoo Learning to Rank Challenge, http://webscope.sandbox.yahoo.com/
4 特征抽取
搜索引擎會使用一系列特征來決定結果的排序。一個特征稱之為一個“feature”。按照我的理解,
feature可以分為3大類:
- Doc本身的特征:Pagerank、內容豐富度、是否是spam等
- Query-Doc的特征:文本相關性、Query term在文檔中出現的次數等
此階段就是要抽取出所有的特征,供後續訓練使用。
5 模型訓練
5.1 訓練方法
LTR的學習方法分為Pointwise、Pairwise和Listwise三類。Pointwise和Pairwise把排序問題轉換成
回歸 、 分類 或 有序分類 問題。Lisewise把Query下整個搜索結果作為一個訓練的實例。3種方法
的區別主要體現在損失函數(Loss Function)上:
- Regression: treat relevance degree as real values
- Classification: treat relevance degree as categories
- Pairwise classification: reduce ranking to classifying the order between each pair of documents.
5.1.1 Pointwise
Pointwis方法的主要思想是將排序問題轉化為多類分類問題或者回歸問題。以多類分類為例
進行說明:假設對於查詢query,與其相關的文檔集合為:{d1, d2, …, dn}。那麽首先對這n個pair:
(query, di)抽取特征並表示成特征向量。
- Regression-based:
將query與di之間的相關度作為value,利用regression model來得到一個query與document之間相關
度的預測。
- Classification-based:
將query與di之間的相關度的程度作為label,一般的label等級劃分方式為:{Perfect, Excellent,
Good, Fair, Bad},一共五個類別。於是,對於一個查詢及其文檔集,可以形成n個訓練實例。有了
訓練實例,我們可以使用任一種多類分類器進行學習,比如最大熵,SVM。下面是一個例子:
5.1.2 Pairwise
Pairwise方法是目前比較流行的方法,效果也非常不錯。它的主要思想是將Ranking問題形式化為二元
分類問題。
下面這張圖很直觀地表達了pairwise方法的思想,同時也給出了構造訓練實例的方法。
對於同一條query,在它的所有相關文檔集裏,對任兩個不同label的文檔,都可以得到一個訓練實例
(pair),比如圖中的()分別對應label為5和3,那麽對於這個pair實例,給它賦予類別+1(5>3),
反之則賦予類別-1。於是,按照這種方式,我們就得到了二元分類器訓練所需的樣本了。預測時,只需要對
所有pair進行分類,便可以得到文檔集的一個偏序關系,從而實現排序。
Pairwise方法有很多的實現,比如SVM Rank(開源), 還有RankNet(C. Burges, et al. ICML 2005), FRank
(M.Tsai, T.Liu, et al. SIGIR 2007),RankBoost(Y. Freund, et al. JMLR 2003)等等。下面是SVM Rank的例子:
相比於Pointwise方法,Pairwise方法不再對相關度作獨立假設,因為它只對同一個query裏的文檔集生成
訓練樣本。然而,Pairwise模型也有一些缺點:1.它對不同級別之間的區分度是一致對待的。在信息檢索領域,
尤其對於搜索引擎而言,人們更傾向於只點擊搜索引擎返回的前幾頁結果,甚至只是前幾條。所以我們對相關
度高(Perfect)的文檔應該作更好的區分。2.相關文檔集大小帶來的模型偏置。假設query1對應的相關文檔
集大小為5,query2的相關文檔集大小為1000,那麽從後者構造的訓練樣本數遠遠大於前者,從而使得分類器
對相關文檔集小的query所產生的訓練實例區分不好,甚至視若無睹。
還有一個重要的因素也會影響Pairwise方法的排序性能。以Ranking SVM為例,它優化的目標是使得正負
樣本之間的Margin最大,而並非以排序性能為優化目標。就像BP神經網絡以訓練誤差為目標優化函數,從而使
得它很容易過擬合。優化目標本身的差異將導致模型本身的功能偏置。於是,基於這個特性,人們提出了Listwise
的方法。
5.1.3 Listwise
Listwise方法相比於前兩種(Pointwise,Pairwise)而言,不再將Ranking問題直接形式化為一個分類或者
回歸問題,而是直接對文檔的排序結果(list)進行優化。目前主要有兩種優化方法:
- 直接針對Ranking評價指標進行優化。比如常用的MAP, NDCG(下面介紹)。這個想法非常自然,但是往往
難以實現,因為NDCG這樣的評價指標通常是非平滑(連續)的,而通用的目標函數優化方法針對的都是連續函數。
- 優化損失函數
損失函數的構造有很多種方式。RankCosine(T. Qin, T. Liu, et al. IP&M 2007)使用正確排序與預測排序的分值向量
之間的Cosine相似度(夾角)來表示損失函數。 ListNet(Z. Cao, T. Qin, T. Liu, et al. ICML 2007)使用正確排序與預測排
序的排列概率分布之間的KL距離(交叉熵)作為損失函數,等等。
以ListNet為例,其損失函數如下:
和分別表示正確的排序以及預測的排序。其中,概率分布由以下公式定義:
其中為第j個特征向量的Score。當然這個概率分布需要滿足一些性質,比如,對於更佳排序,其概率值應該更高。
那麽,最終損失函數就可以表示為以下形式:
從式中可以看出,ListNet對特征向量進行簡單的線性加權來對Score進行預測。此時,任務轉化為對權矢量w的學習。
這顯然是一個老生常談的問題,梯度下降是最常用的方法。這裏就不再贅述了。
我覺得Listwise的方法是最優美的,因為它專註於自己的目標和任務。相比之下,Pairwise有點兒歪門邪道的感覺:)
當然,這種方法也並非完美,還是有一些缺點的。比如Score()如何構造?能直接使用Label麽?事實上,這也是制約性能
的一大原因。還有,求解KL距離時,需要對所有排列計算其概率,算法復雜度趨於。針對這幾個問題,都有相應的
Solution。
對於ListNet,據我目前所知,有兩個開源的Java版本實現,一是Minorthird,這是CMU的教授William W. Cohen帶領他的
學生們做的,類似於Weka,是一個實現了大量機器學習、數據挖掘算法的開源工具,它在Sorceforge上的主頁在這兒。另一個
是羅磊同學近期做的,使用的是單層神經網絡模型來調整權值。目前已經在Google code上開源,地址在這兒。歡迎大家使用並給
出意見。
6 效果評估
對於搜索結果,有多種量化搜索得分的計算方法,這裏介紹NDCG和MAP。
6.1 NDCG(Normalized Discounted Cumulative Gain)
6.1.1 定義
- 計算前k條結果的相關性得分
- i:第i次搜索
- j:第j條結果
- yi,j:第j條結果的相關性標註得分,5檔制
- πi(j):這條結果在排序中的位置
6.1.2 描述
- 顧名思義,NDCG的公式由 N、D、C、G 4部分組成。將公式改寫成
- 先看G部分。G是增益函數(Gain),表示第j條結果在被給予評分yi,j之後所貢獻的分值增益。定義如下
- 再看D部分。D是位置折算函數(Discounted)。因為不同位置的增益應該是不同的,D函數給結果按照位置賦予一個權重。定於如下C部分就是累加(Cumulative),將k條結果的得分加在一起。
- N是歸一化因子(Normalized),取值是該位置上G函數理論上取得的最大值的倒數。目的是縮放不同位置上的得分到統一區間。
6.2 MAP(Mean Average Precision)
6.2.1 定義
- MAP中,相關性評分yi,j只有2檔:0和1
6.2.2 描述
- P表示結果j的權重,從位置j開始,相關(標記為1)的結果所在的比例
- AP表示單query下,相關的結果的平均的加權得分
- AP中,只有標記為相關的結果才會參與加權的累加
- AP是單query下的得分,多query的平均AP,就成了MAP
7 參考
信息檢索初學者‘s Learning to Rank 小結:http://blog.crackcell.com/2011/12/17/learning-to-rank_intro_note/
jiangfeng‘s 漫談Learning to Rank:http://www.jiangfeng.me/blog/123
1: Adapting Ranking SVM to Document Retrieval. (Liu Tie Yan. et al. MSRA) 【PDF】
2: Learning to rank for Information Retrieval– tutorial. (Liu Tie Yan. et al. MSRA) 【PDF】
3: Learning to rank: From Pairwise Approach to Listwise Approace. (Liu Tie Yan. et al. MSRA)【PDF】
4: Learning to rank for Information Retrieval - book. (Liu Tie Yan. MSRA)【PDF】
5:Learning to Rank Report @ CIIR 2011 【PDF】
Learning to Rank