1. 程式人生 > >機器學習排序之Learning to Rank簡單介紹

機器學習排序之Learning to Rank簡單介紹

PS:文章主要轉載自CSDN大神hguisu的文章"機器學習排序":           http://blog.csdn.net/hguisu/article/details/7989489       最近需要完成課程作業——分散式排序學習系統.它是在M/R、Storm或Spark架構上搭建分散式系統,並使用學習排序Pointwise、Pairwise和Listwise三大類演算法實現對微軟資料集(Microsoft Learning to Rank Datasets)進行學習排序,這篇文章是對其入門介紹.感覺很難啊~       推薦&參考資料:     《Learning to Rank for Information Retrieval By:Tie-Yan Liu》     《這就是搜尋引擎 核心技術詳解 著:張俊林》       論文《Learning to rank From Pairwise Approach to Listwise Approace》       論文《Adapting Ranking SVM to Document Retrieval By:Tie-Yan Liu》       維基百科介紹 

Learning to rank       開源軟體 Rank SVM Support Vector Machine for Ranking        開源軟體 RankLib包括RankNet RankBoost AdaRank       部落格園文章 Learning to Rank入門小結

       從使用的資料型別,以及相關的機器學習技術的觀點來看,網際網路搜尋經歷了三代的發展歷程。        第一代技術,將網際網路網頁看作文字,主要採用傳統資訊檢索的方法。        第二代技術,利用網際網路的超文字結構,有效地計算網頁的相關度與重要度,代表的演算法有 PageRank 等。        第三代技術,有效利用日誌資料與統計學習方法,使網頁相關度與重要度計算的精度有了進一步的提升,代表的方法包括排序學習

、網頁重要度學習、匹配學習、話題模型學習、查詢語句轉化學習。        這裡主要介紹機器學習排序。

1. 機器學習排序(Learning to Rank)

       利用機器學習技術來對搜尋結果進行排序,這是最近幾年非常熱門的研究領域。資訊檢索領域已經發展了幾十年,為何將機器學習技術和資訊檢索技術相互結合出現較晚?主要有兩方面的原因。

       一方面是因為:在前面幾節所述的基本檢索模型可以看出,用來對査詢和文件的相關性進行排序,所考慮的因素並不多,主要是利用詞頻、逆文件頻率和文件長度這幾個因子來人工擬合排序公式。因為考慮因素不多,由人工進行公式擬合是完全可行的,此時機器學習並不能派上很大用場,因為機器學習更適合採用很多特徵來進行公式擬合,此時若指望人工將幾十種考慮因素擬合出排序公式是不太現實的,而機器學習做這種型別的工作則非常合適。隨著搜尋引擎的發展,對於某個網頁進行排序需要考慮的因素越來越多,比如網頁的pageRank值、查詢和文件匹配的單詞個數、網頁URL連結地址長度等都對網頁排名產生影響,Google目前的網頁排序公式考慮200多種因子,此時機器學習的作用即可發揮出來,這是原因之一。       另外一個原因是:對於有監督機器學習來說,首先需要大量的訓練資料,在此基礎上才可能自動學習排序模型,單靠人工標註大量的訓練資料不太現實。對於搜尋引擎來說, 儘管無法靠人工來標註大量訓練資料,但是使用者點選記錄是可以當做機器學習方法訓練資料的一個替代品,比如使用者發出一個查詢,搜尋引擎返回搜尋結果,使用者會點選其中某些網頁,可以假設使用者點選的網頁是和使用者查詢更加相關的頁面。儘管這種假設很多時候並 不成立,但是實際經驗表明使用這種點選資料來訓練機器學習系統確實是可行的。       PS:簡言之,上面兩個原因論述了為什麼會出現學習排序?       傳統的排序方法是通過構造一個排序函式實現,在Information Retrieval領域一般按照相關度進行排序。比較典型的是搜尋引擎中一條查詢query,將返回一個相關的文件document,然後根據(query,document)之間的相關度進行排序,再返回給使用者。而隨著影響相關度的因素變多,使用傳統排序方法變得困難,人們就想到通過機器學習來解決這一問題,這就導致了LRT的誕生。

2. 機器學習的基本思路

      傳統的檢索模型靠人工擬合排序公式,並通過不斷的實驗確定最佳的引數組合,以此來形成相關性打分函式。機器學習排序與此思路不同,最合理的排序公式由機器自動學習獲得,而人則需要給機器學習提供訓練資料。

      圖1是利用機器學習進行排序的基本原理圖。 機器學習排序系統由4個步驟組成:人工標註訓練資料、文件特徵抽取、學習分類函式、在實際搜尋系統中採用機器學習模型。

      

  圖1  機器學習排序原理

       首先,由人工標註訓練資料。也就是說,對於某個查詢Q,人工標出哪些文件是和這個査詢相關的,同時標出相關程度,相關程度有時候可以用數值序列來表示,比如從1分到5分為3個檔次,1代表微弱相關,5代表最相關,其他數值代表相關性在兩者之間。對於某個查詢,可能相關文件眾多,同時使用者査詢也五花八門,所以全部靠人工標註有時候 不太可能。此時,可以利用使用者點選記錄來模擬這種人工打分機制。       對於機器學習來說,輸入是使用者查詢和一系列標註好的文件,機器學習系統需要學習打分函式,然後按照打分函式輸出搜尋結果,但是在其內部,每個文件由若干特徵構成的,即每個文件進入機器學習系統之前,首先需要將其轉換我餓滴特徵向量,比較常用的特徵包括:       ·查詢詞在文件中的詞頻資訊        ·查詢詞的IDF資訊       ·文件長度       ·網頁的入鏈數量       ·網頁的出鏈數量       ·網頁的pageRank值       ·網頁的URL鬆度       ·査詢詞的Proximity值:即在文件中多大的視窗內可以出現所有査詢詞。

       以上所列只是影響排序的一部分特徵,實際上還有很多類似的特徵可以作為特徵向量中的一維加入。在確定了特徵數量後,即可將文件轉換為特徵向量X,前面說過每個文件會人工標出其相關性得分y。這樣每個文件會轉換為<X,Y>的形式,即特徵向量及其對應的相關性得分,這樣就形成了一個具體的訓練例項。

       通過多個調練例項,就可以採用機器學習技術來對系統進行訓練,訓練的結果往在是一個分類函式或者回歸函式,在之後的使用者搜尋中,就可以用這個分類函式對文件進行打分,形成搜尋結果。

       從目前的研究方法來說,可以將機器學習排序方法分為以下3種:單文件方法(Pointwise)、文件對方法(Pairwise)和文件列表方法(Listwise)。        PS:Ranking學習作為機器學習研究的一個新方向,在資訊檢索、協同濾波、專家發現等領域廣泛應用。Ranking學習是指通過使用機器學習技術和有標籤的資料來產生一個ranking模型,它是一種新的學習,一種介於分類和迴歸之間的學習。        Pointwise和Pairwise把排序問題轉換成 迴歸 、分類或有序分類問題。Listwise把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.

       下面是兩張圖,第一張表示學習排序的過程,第二章是基本的實現演算法。

3. 單文件方法(PointWise Approach)

       單文件方法的處理物件是單獨的一篇文件,將文件轉換為特徵向量後,機器學習系統根據從訓練資料中學習到的分類或者回歸函式對文件打分,打分結果即是搜尋結果。下面我們用一個簡單的例子說明這種方法。         圖2是人工標註的訓練集合,在這個例子中,我們對於每個文件採用了3個特徵: 査詢與文件的Cosme相似性分值、査詢詞的Proximity值及頁面的PageRank數值,而相關性判斷是二元的,即要麼相關要麼不相關,當然,這裡的相關性判斷完全可以按照相關程度擴充套件為多元的,本例為了方便說明做了簡化。

 

  圖2 訓練資料

        例子中提供了5個訓練例項,每個訓練例項分別標出來其對應的查詢,3個特徵的得分情況及相關性判斷。對於機器學習系統來說,根據訓練資料,需要如下的線性打分函式:         Score(Q, D)=a x CS+b x PM+cx PR+d          這個公式中,cs代表Cosine相似度變徽,PM代表Proximity值變數,PR代表pageRank, 而a、b、c、d則是變數對應的引數。

        如果得分大於設定閥值,則叫以認為是相關的, 如果小於設定閩值則可以認為不相關。通過訓練例項,可以獲得最優的a、b、c、d引數組合,當這些引數確定後,機器學習系統就算學習完畢,之後即可利用這個打分函式進行相關性判斷。對於某個新的查詢Q和文件D,系統首先獲得其文件D對應的3個特 I特徵值,之後利用學習到的引數組合計算兩者得分,當得分大於設定的閩值,即可判斷文件是相關文件,否則判斷為不相關文件。         PS:而微軟給定的資料如下           =============================================================                                       0 qid:1 1:3 2:0 3:2 4:2 ... 135:0 136:0                                        2 qid:1 1:3 2:3 3:0 4:0 ... 135:0 136:0            =============================================================         其資料格式: label qid:id  feaid:feavalue  feaid:feavalue ...         每行表示一個樣本,相同的查詢請求的樣本qid相同,上面就是兩個對qid為“1”的查詢;label表示該樣本和該查詢請求的相關程度,該label等級劃分方式為 {Perfect, Excellent,Good, Fair, Bad} 共五個類別。

4. 文件對方法(PairWise Approach)

        對於搜尋系統來說,系統接收到使用者査詢後,返回相關文件列表,所以問題的關鍵是確定文件之間的先後順序關係。單文件方法完全從單個文件的分類得分角度計算,沒有考慮文件之間的順序關係。文件對方法則將重點轉向量對文件順序關係是否合理進行判斷。

        之所以被稱為文件對方法,是因為這種機器學習方法的訓練過程和訓練目標,是判斷任意兩個文件組成的文件對<D0C1,D0C2>是否滿足順序關係,即判斷是否D0C1應該排在DOC2的前面。圖3展示了一個訓練例項:査詢Q1對應的搜尋結果列表如何轉換為文件對的形式,因為從人工標註的相關性得分可以看出,D0C2得分最高,D0C3次之,D0C1得分最低,於是我們可以按照得分大小順序關係得到3個如圖3所示的文件對,將每個文件對的文件轉換為特徵向量後,就形成了一個具體的訓練例項。

    

圖3  文件對的方法訓練例項

       根據轉換後的訓練例項,就可以利用機器學習方法進行分類函式的學習,具體的學習方法有很多,比如SVM. Boosts、神經網路等都可以作為具體的學習方法,但是不論具體方法是什麼,其學習目標都是一致的,即輸入- 個査詢和文件對<Docl,DOC2>, 機器學習排序能夠判斷這種順序關係是否成立,如果成立,那麼在搜尋結果中D0C1應該排在D0C2 前面,否則Doe2應該摔在Docl前面,通過這種方式,就完成搜尋結果的排序任務。         儘管文件對方法相對單文件方法做出了改進,但是這種方法也存在兩個明顯的問題:

       一個問題是:文件對方法只考慮了兩個文件對的相對先後順序,卻沒有考慮文件出現在搜尋列表中的位置,排在搜尋站果前列的文件更為重要,如果前列文件出現判斷錯誤,代價明顯高於排在後面的文件。針對這個問題的改進思路是引入代價敏感因素,即每個文件對根據其在列表中的順序具有不同的權重,越是排在前列的權重越大,即在搜尋列表前列如 果排錯順序的話其付出的代價更高?         另外一個問題是:不同的査詢,其相關文件數量差異很大,所以轉換為文件對之後, 有的查詢對能有幾百個對應的文件對,而有的查詢只有十幾個對應的文件對,這對機器學習系統的效果評價造成困難 ?我們設想有兩個查詢,査詢Q1對應500個文文件對,查詢Q2 對應10個文件對,假設學習系統對於査詢Ql的文件對能夠判斷正確480個,對於査詢 Q2的義格對能夠判新正確2個,如果從總的文件對數量來看,這個學習系統的準確率是 (480+2)/(500+10)=0.95.即95%的準確率,但是從査詢的角度,兩個査詢對應的準確率 分別為:96%和20%,兩者平均為58%,與純粹從文件對判斷的準確率相差甚遠,這對如何繼續調優機器學習系統會帶來困擾。

       PS: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)等等。         你通常會看到微軟資料集每個Fold資料夾下有train.txt test.txt vail.text三個檔案,它們分別的作用是什麼呢?         訓練集--用於學習引數,比如可以訓練10個不同階的線性模型,這裡得到每個特徵值的權值;驗證集--用來選擇模型,主要考慮的準則是在新的資料上的泛化能力,比如根據各個模型在驗證集上的權值,選擇了3階的模型;測試集--測試模型,測試這個被選中的3階模型的表現。

4. 文件列表方法(ListWise Approach)

          單文件方法將訓練集裡每一個文件當做一個訓練例項,文件對方法將同一個査詢的搜尋結果裡任意兩個文件對作為一個訓練例項,文件列表方法與上述兩種表示方式不同,是將每一個查詢對應的所有搜尋結果列表整體作為一個訓練例項,這也是為何稱之為文件列表方法的原因。         文件列表方法根據K個訓練例項(一個査詢及其對應的所有搜尋結果評分作為一個實 例)訓練得到最優評分函式F, 對於一個新的使用者査詢,函式F 對每一個文件打分,之後按照得分順序由高到低排序,就是對應的搜尋結果。 所以關鍵問題是:拿到訓練資料,如何才能訓練得到最優的打分函式?

        這裡介紹一種訓練方法,它是基於搜尋結果排列組合的概率分佈情況來訓練的,圖4是這種方式訓練過程的圖解示意。

      

圖4 不同評分函式的KL距離

        首先解釋下什麼是搜尋結果排列組合的概率分佈,我們知道,對於搜尋 引擎來說,使用者輸入査詢Q, 搜尋引擎返回搜尋結果,我們假設搜尋結果集合包含A. B 和C 3個文件,搜尋引擎要對搜尋結果排序,而這3個文件的順序共有6種排列組合方式:

        ABC, ACB, BAG, BCA, CAB和CBA,

        而每種排列組合都是一種可能的搜尋結果排序方法。

        對於某個評分函式F來說,對3個搜尋結果文件的相關性打分,得到3個不同的相關度得分F(A)、 F(B)和F(C), 根據這3個得分就可以計算6種排列組合情況各自的概率值。 不同的評分函式,其6種搜尋結果排列組合的概率分佈是不一樣的。       瞭解了什麼是搜尋結果排列組合的概率分佈,我們介紹如何根據訓練例項找到最優的 評分函式。圖4展示了一個具體的訓練例項,即査詢Q1及其對應的3個文件的得分情況,這個得分是由人工打上去的,所以可以看做是標準答案。可以設想存在一個最優的評分函式g,對查詢Q1來說,其打分結果是:A文件得6分,B文件得4分,C文件得3分, 因為得分是人工打的,所以具體這個函式g是怎樣的我們不清楚,我們的任務就是找到一 個函式,使得函式對Ql的搜尋結果打分順序和人工打分順序儘可能相同。既然人工打分 (虛擬的函式g) 已知,那麼我們可以計算函式g對應的搜尋結果排列組合概率分佈,其具體分佈情況如圖4中間的概率分佈所示。假設存在兩個其他函式h和f,它們的計算方法已知,對應的對3個搜尋結果的打分在圖上可以看到,由打分結果也可以推出每個函式對應的搜尋結果排列組合概率分佈,那麼h與f哪個與虛擬的最優評分函式g更接近呢?一般可以用兩個分佈概率之間的距離遠近來度量相似性,KL距離就是一種衡量概率分佈差異大小的計算工具,通過分別計算h與g的差異大小及f與g的差異大小,可以看出f比h更接近的最優函式g,那麼在這個函式中,我們應該優先選f作為將來搜尋可用的評分函式,訓練過程就是在可能的函式中尋找最接近虛擬最優函式g的那個函式作為訓練結果,將來作為在搜尋時的評分函式。

       上述例子只是描述了對於單個訓練例項如何通過訓練找到最優函式,事實上我們有K 個訓練例項,雖然如此,其訓練過程與上述說明是類似的,可以認為存在一個虛擬的最優 評分函式g (實際上是人工打分),訓練過程就是在所有訓練例項基礎上,探尋所有可能的 候選函式,從中選擇那個KL距離最接近於函式g的,以此作為實際使用的評分函式。 經驗結果表明,基於文件列表方法的機器學習排序效果要好於前述兩種方法。

       宣告:本部落格摘自《這就是搜尋引擎:核心技術詳解》 第五章關於機器學習排序的內容。轉載請說明摘自出處。        最後希望文章對大家有所幫助吧!雖然是我轉載的一篇文章,但是它真心很好,是對Learning to Rank的基礎入門介紹文章,從為什麼引入學習排序,到介紹三種方法。