Learning to Rank是採用機器學習算法,經過訓練模型來解決排序問題,在Information Retrieval,Natural Language Processing,Data Mining等領域有着不少應用。算法
如圖 Fig.1 所示,在信息檢索中,給定一個query,搜索引擎會召回一系列相關的Documents(經過term匹配,keyword匹配,或者semantic匹配的方法),而後便須要對這些召回的Documents進行排序,最後將Top N的Documents輸出。而排序問題就是使用一個模型 f(q,d)來對該query下的documents進行排序,這個模型能夠是人工設定一些參數的模型,也能夠是用機器學習算法自動訓練出來的模型。如今第二種方法愈來愈流行,尤爲在Web Search領域,由於在Web Search 中,有不少信息能夠用來肯定query-doc pair的相關性,而另外一方面,因爲大量的搜索日誌的存在,能夠將用戶的點擊行爲日誌做爲training data,使得經過機器學習自動獲得排序模型成爲可能。機器學習
須要注意的是,排序問題最關注的是各個Documents之間的相對順序關係,而不是各個Documents的預測分最準確。函數
Learning to Rank是監督學習方法,因此會分爲training階段和testing階段,如圖 Fig.2 所示。學習
對於Learning to Rank,training data是必須的,而feature vector一般都是能夠獲得的,關鍵就在於label的獲取,而這個label實際上反映了query-doc pair的真實相關程度。一般咱們有兩種方式能夠進行label的獲取:優化
第一種方式是人工標註,這種方法被各大搜索引擎公司廣爲應用。人工標註即對抽樣出來做爲training data的query-doc pair人爲地進行相關程度的判斷和標註。通常標註的相關程度分爲5檔:perfect,excellent,good,fair,bad。例如,query=「Microsoft」,這時候,Microsoft的官網是perfect;介紹Microsoft的wikipedia則是excellent;一篇將Microsoft做爲其主要話題的網頁則是good;一篇只是提到了Microsoft這個詞的網頁則是fair,而一篇跟Microsoft絕不相關的網頁則是bad。人工標註的方法能夠經過多人同時進行,最後以相似投票表決的方式決定一個query-doc pair的相關程度,這樣能夠相對減小各我的的觀點不一樣帶來的偏差。搜索引擎
第二種方式是經過搜索日誌獲取。搜索日誌記錄了人們在實際生活中的搜索行爲和相應的點擊行爲,點擊行爲實際上隱含了query-doc pair的相關性,因此能夠被用來做爲query-doc pair的相關程度的判斷。一種最簡單的方法就是利用同一個query下,不一樣doc的點擊數的多少來做爲它們相關程度的大小。lua
不過須要注意的是,這裏存在着一個很大的陷阱,就是用戶的點擊行爲其實是存在「position bias」的,即用戶偏向於點擊位置靠前的doc,即使這個doc並不相關或者相關性不高。有不少 tricky的和 general 的方法能夠用來去除這個「position bias」,例如,spa
1. 當位置靠後的doc的點擊數都比位置靠前的doc的點擊數要高了,那麼靠後的doc的相關性確定要比靠前的doc的相關性大。3d
2. Joachims等人則提出了一系列去除bias的方法,例如 Click > Skip Above, Last Click > Skip Above, Click > Earlier Click, Click > Skip Previous, Click > No Click Next等。日誌
3. 有個很tricky可是效果很不錯的方法,以前咱們說一個doc的點擊數比另外一個doc的點擊數多,並不必定說明前者比後者更相關。但若是二者的差距大到必定程度了,即便前者比後者位置靠前,可是二者的點擊數相差5-10倍,這時候咱們仍是願意相信前者更加相關。固然這個差距的大小須要根據每一個場景具體的調整。
4. position bias 存在的緣由是,永遠沒法保證在一次搜索行爲中,用戶可以看到全部的結果,每每只看到前幾位的結果。這時候就到了 Click Model大顯身手的時候了,一系列的 Click Model 根據用戶的點擊信息對用戶真正看到的doc進行「篩選」,進而能更準確地看出用戶到底看到了哪些doc,沒有看到哪些doc,一旦這些信息知道了,那麼咱們就能夠根據相對更準確的 點擊數/展現數(即展示CTR)來肯定各個doc的相關性大小。
上述講到的兩種label獲取方法各有利弊。人工標註受限於標註的人的觀點,不一樣的人有不一樣的見解,並且畢竟標註的人不是真實搜索該query的用戶,沒法得知其搜索時候的真實意圖;另外一方面人工標註的方法代價較高且很是耗時。而從搜索日誌中獲取的方法則受限於用戶點擊行爲的噪聲,這在長尾query中更是如此,且有用戶點擊的query畢竟只是整體query的一個子集,沒法獲取所有的query下doc的label。
這裏只是簡單介紹下,後續博客會有更纖細的講解。
通常Learning to Rank的模型的feature分爲兩大類:relevance 和 importance(hotness),即query-doc pair 的相關性feature,和doc自己的熱門程度的feature。二者中具備表明性的分別是 BM25 和 PageRank。
怎麼判斷一個排序模型的好壞呢?咱們須要有驗證的方法和指標。方法簡單來講就是,比較模型的輸出結果,和真實結果(ground truth)之間的差別大小。用於Information Retrieval的排序衡量指標一般有:NDCG,MAP等。
NDCG表示了從第1位doc到第k位doc的「歸一化累積折扣信息增益值」。其基本思想是:
1) 每條結果的相關性分等級來衡量
2) 考慮結果所在的位置,位置越靠前的則重要程度越高
3) 等級高(即好結果)的結果位置越靠前則值應該越高,不然給予懲罰
其中G表示了這個doc得信息增益大小,通常與該doc的相關程度正相關:
D則表示了該doc所在排序位置的折扣大小,通常與位置負相關:
而Gmax則表示了歸一化係數,是最理想狀況下排序的「累積折扣信息增益值」。
最後,將每一個query下的NDCG值平均後,即可以獲得排序模型的整體NDCG大小。
其定義是求每一個相關文檔檢索出後的準確率的平均值(即Average Precision)的算術平均值(Mean)。這裏對準確率求了兩次平均,所以稱爲Mean Average Precision。
在MAP中,對query-doc pair的相關性判斷只有兩檔:1和0。
對於一個query,其AP值爲:
yij即每一個doc的label(1和0),而每一個query-doc pair的P值表明了到dij這個doc所在的位置爲止的precision:
其中,是dij在排序中的位置。
用通用的公式來表示Learning to Rank算法,loss function爲,從而risk function(loss function在X,Y聯合分佈下的指望值)爲:
有了training data後,進一步獲得empirical risk function:
因而,學習問題變成了如何最小化這個empirical risk function。而這個優化問題很難解決,由於loss function不連續。因而可使用一個方便求解的surrogate function來替換原始loss function,轉而優化這個替換函數:
替換函數的選擇有不少種,根據Learning to Rank的類型不一樣而有不一樣的選擇:
1)pointwise loss:例如squared loss等。
2)pairwise loss:例如hinge loss,exponential loss,logistic loss等。
3)listwise loss:
Learning to Rank 方法能夠分爲三種類型:pointwise,pairwise,和listwise。
pointwise和pairwise方法將排序問題轉化爲classification,regression,ordinal classification等問題,優勢是能夠直接利用已有的classificatin和regression算法,缺點是group structure實際上是被忽略的,即不會考慮每一個query下全部doc之間的序關係。致使其學習目標和真實的衡量排序的目標並不必定是一致的(不少排序衡量指標,例如NDCG都是衡量每一個query下的總體list的序關係的)。而listwise方法則將一個ranking list做爲一個instance來進行訓練,其實會考慮每一個query下全部doc之間的序關係的。
這三種類型的Learning to Rank方法的具體算法通常有:
針對各個具體的算法介紹,後續的博客會進一步給出,這裏就再也不多加詳述了。
版權聲明:
本文由笨兔勿應全部,發佈於http://www.cnblogs.com/bentuwuying。若是轉載,請註明出處,在未經做者贊成下將本文用於商業用途,將追究其法律責任。