以前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中簡單介紹了Learning to Rank的基本原理,也講到了Learning to Rank的幾類經常使用的方法:pointwise,pairwise,listwise。這篇博客就不少公司在實際中一般使用的pairwise的方法進行介紹,首先咱們介紹相對簡單的 RankSVM 和 IR SVM。html
RankSVM的基本思想是,將排序問題轉化爲pairwise的分類問題,而後使用SVM分類模型進行學習並求解。函數
對於一個query-doc pair,咱們能夠將其用一個feature vector表示:x。而排序函數爲f(x),咱們根據f(x)的大小來決定哪一個doc排在前面,哪一個doc排在後面。即若是f(xi) > f(xj),則xi應該排在xj的前面,反之亦然。能夠用下面的公式表示:學習
理論上,f(x)能夠是任意函數,爲了簡單起見,咱們假設其爲線性函數:。優化
若是這個排序函數f(x)是一個線性函數,那麼咱們即可以將一個排序問題轉化爲一個二元分類問題。理由以下:lua
首先,對於任意兩個feature vector xi和 xj,在f(x)是線性函數的前提下,下面的關係都是存在的:spa
而後,即可以對xi和 xj的差值向量考慮二元分類問題。特別地,咱們能夠對其賦值一個label:3d
將排序問題轉化爲分類問題以後,咱們即可以使用經常使用的分類模型來進行學習,這裏咱們選擇了Linear SVM,一樣的,能夠經過核函數的方法擴展到 Nonlinear SVM。orm
以下面左圖所示,是一個排序問題的例子,其中有兩組query及其相應的召回documents,其中documents的相關程度等級分爲三檔。而weight vector w對應了排序函數,能夠對query-doc pair進行打分和排序。htm
而下面右圖則展現瞭如何將排序問題轉化爲分類問題。在同一個組內(同一個query下)的不一樣相關度等級的doc的feature vector能夠進行組合,造成新的feature vector:x1-x2,x1-x3,x2-x3。一樣的,label也會被從新賦值,例如x1-x2,x1-x3,x2-x3這幾個feature vector的label被賦值成分類問題中的positive label。進一步,爲了造成一個標準的分類問題,咱們還須要有negative samples,這裏咱們就使用前述的幾個新的positive feature vector的反方向向量做爲相應的negative samples:x2-x1,x3-x1,x3-x2。另外,須要注意的是,咱們在組合造成新的feature vector的時候,不能使用在原始排序問題中處於相同類似度等級的兩個feature vector,也不能使用處於不一樣query下的兩個feature vector。blog
轉化爲了分類問題後,咱們即可以使用SVM的通用方式進行求解。首先咱們能夠獲得下面的優化問題:
經過將約束條件帶入進原始優化問題的鬆弛變量中,能夠進一步轉化爲非約束的優化問題:
加和的第一項表明了hinge loss,第二項表明了正則項。primal QP problem較難求解,若是使用通用的QP解決方式則費時費力,咱們能夠將其轉化爲dual problem,獲得一個易於求解的形式:
而最終求解獲得相應的參數後,排序函數能夠表示爲:
因而,RankSVM方法求解排序問題的步驟總結起來,以下圖所示:
上面介紹的RankSVM的基本思想是,將排序問題轉化爲pairwise的分類問題,而後使用SVM分類模型進行學習並求解。因此其在學習過程當中,是使用了0-1分類損失函數(雖然其實是用的替換損失函數hinge loss)。而這個損失函數的優化目標跟Information Retrieval的Evaluation經常使用指標(不只要求各個doc之間的相對序關係正確,並且尤爲重視Top的doc之間的序關係)仍是存在gap的。因此有研究人員對此進行了研究,經過對RankSVM中的loss function進行改造從而使得優化目標更好地與Information Retrieval問題的經常使用評價指標相一致。
首先,咱們經過一些例子來講明RankSVM在應用到文本排序的時候遇到的一些問題,以下圖所示。
第一個問題就是,直接使用RankSVM的話,會將不一樣類似度等級的doc同等看待,不會加以區分。這在具體的問題中又會有兩種形式:
1)Example 1中,3 vs 2 和 3 vs 1的兩個pair,在0-1 loss function中是同等看待的,即它們其中任一對的次序的顛倒對loss function的增長大小是同樣的。而這顯然是不合理的,由於3 vs 1的次序顛倒顯然要比 3 vs 2的次序的顛倒要更加嚴重,須要給予不一樣的權重來區分。
2)Example 2中,ranking-1是position 1 vs position 2的兩個doc的位置顛倒了,ranking-2是position 3 vs position 4的兩個doc的位置顛倒了,這兩種狀況在0-1 loss function中也是同等看待的。這顯然也是不合理的,因爲IR問題中對於Top doc尤爲重視,ranking-1的問題要比ranking-2的問題更加嚴重,也是須要給予不一樣的權重加以區分。
第二個問題是,RankSVM對於不一樣query下的doc pair同等看待,不會加以區分。而不一樣query下的doc的數目是很不同的。如Example 3所示,query-4的doc書目要更多,因此在訓練過程當中,query-4下的各個doc pair的訓練數據對於模型的影響顯然要比query-3下的各個doc pair的影響更大,因此最終結果的模型會有bias。
IR SVM針對以上兩個問題進行了解決,它使用了cost sensitive classification,而不是0-1 classification,即對一般的hinge loss進行了改造。具體來講,它對來自不一樣等級的doc pair,或者來自不一樣query的doc pair,賦予了不一樣的loss weight:
1)對於Top doc,即類似度等級較高的doc所在的pair,賦予較大的loss weight。
2)對於doc數目較少的query,對其下面的doc pair賦予較大的loss weight。
IR SVM的優化問題能夠表示以下:
其中,表明了隸屬於第k檔grade pair的instance的loss weight值。這個值的肯定有一個經驗式的方法:對隸屬於這一檔grade pair的兩個doc,隨機交換它們的排序位置,看對於NDCG@1的減小值,將全部的減小值求平均就獲得了這個loss weight。能夠想象,這個loss weight值越大,說明這個pair的doc對於總體評價指標的影響較大,因此訓練時候的重要程度也相應較大,這種狀況通常對應着Top doc,這樣作就是使得訓練結果尤爲重視Top doc的排序位置問題。反之亦然。
而這個參數則對應了query的歸一化係數。能夠表示爲,即該query下的doc數目的倒數,這個很好理解,若是這個query下的doc數目較少,則RankSVM訓練過程當中相對重視程度會較低,這時候經過增長這個權重參數,能夠適當提升這個query下的doc pair的重要程度,使得模型訓練中可以對不一樣的query下的doc pair重視程度至關。
IR SVM的優化問題以下:
一樣地,也須要將其轉化爲dual problem進行求解:
而最終求解獲得相應的參數後,排序函數能夠表示爲:
因而,IR SVM方法求解排序問題的步驟總結起來,以下圖所示:
版權聲明:
本文由笨兔勿應全部,發佈於http://www.cnblogs.com/bentuwuying。若是轉載,請註明出處,在未經做者贊成下將本文用於商業用途,將追究其法律責任。