Learning to Rank(轉)


https://blog.csdn.net/kunlong0909/article/details/16805889

Table of Contents

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 公共數據集

現存一批公開的數據集可以使用

  1. LETOR, http://research.microsoft.com/en-us/um/beijing/projects/letor/
  2. Microsoft Learning to Rank Dataset, http://research.microsoft.com/en-us/projects/mslr/
  3. Yahoo Learning to Rank Challenge, http://webscope.sandbox.yahoo.com/

4 特征抽取

搜索引擎會使用一系列特征來決定結果的排序。一個特征稱之為一個“feature”。按照我的理解,

feature可以分為3大類:

  1. Doc本身的特征:Pagerank、內容豐富度、是否是spam等
  2. 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),比如圖中的({d_{1}}^i, {d_{2}}^i)分別對應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為例,其損失函數如下:

        yz分別表示正確的排序以及預測的排序。其中,概率分布由以下公式定義:

        其中s_{j}為第j個特征向量的Score。當然這個概率分布需要滿足一些性質,比如,對於更佳排序,其概率值應該更高。

那么,最終損失函數就可以表示為以下形式:

        從式中可以看出,ListNet對特征向量進行簡單的線性加權來對Score進行預測。此時,任務轉化為對權矢量w的學習。

這顯然是一個老生常談的問題,梯度下降是最常用的方法。這里就不再贅述了。

        我覺得Listwise的方法是最優美的,因為它專注於自己的目標和任務。相比之下,Pairwise有點兒歪門邪道的感覺:)

當然,這種方法也並非完美,還是有一些缺點的。比如Score(s_{j})如何構造?能直接使用Label么?事實上,這也是制約性能

的一大原因。還有,求解KL距離時,需要對所有排列計算其概率,算法復雜度趨於O(n*n!)。針對這幾個問題,都有相應的

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM