Learning to rank(簡寫 LTR、L2R) 也叫排序?qū)W習(xí),指的是機(jī)器學(xué)習(xí)中任何用于排序的技術(shù)。
為什么要用LTR
傳統(tǒng)的檢索模型靠人工擬合排序公式,并通過不斷的實(shí)驗(yàn)確定最佳的參數(shù)組合,以此來形成相關(guān)性打分。這種方式非常簡單高效,應(yīng)該范圍也很廣,比如簡單的博客排序、論壇的QA
排序等.但是也同時(shí)存在較大的問題:
- 手動(dòng)調(diào)參工作量太大
- 可能會(huì)過擬合
- 如果模型參數(shù)很多,手動(dòng)調(diào)參的可用性就很低了~
LTR與此思路不同,最合理的排序公式由機(jī)器學(xué)習(xí)算法來確定,而人則需要給機(jī)器學(xué)習(xí)提供訓(xùn)練數(shù)據(jù),他的優(yōu)勢有:
- 可以自動(dòng)調(diào)節(jié)參數(shù)
- 可以融合多方面觀點(diǎn)的(evidences)的數(shù)據(jù)
- 避免過擬合(通過正則項(xiàng))
LTR基本框架
LTR
的核心還是機(jī)器學(xué)習(xí),只是目標(biāo)不僅僅是簡單的分類或者回歸了,最主要的是產(chǎn)出文檔的排序結(jié)果,它通常的工作框架如下:
所描述的步驟為:訓(xùn)練數(shù)據(jù)獲取->特征提取->模型訓(xùn)練->測試數(shù)據(jù)預(yù)測->效果評(píng)估
訓(xùn)練數(shù)據(jù)的獲取
人工標(biāo)注
人工標(biāo)注的數(shù)據(jù)主要有以下幾大類型:
-
單點(diǎn)標(biāo)注
對(duì)于每個(gè)查詢文檔打上絕對(duì)標(biāo)簽
二元標(biāo)注:相關(guān) vs 不相關(guān)
-
五級(jí)標(biāo)注:完美(Perfect),出色(Excellent),好(Good),一般(Fair),差(Bad) ,一般后面兩檔屬于不相關(guān)
好處:標(biāo)注的量少O(n)
壞處:難標(biāo)。。。不好統(tǒng)一
-
兩兩標(biāo)注
-
對(duì)于一個(gè)查詢
Query
,要標(biāo)注文檔d1比文檔d2是否更加相關(guān) (q,d1)?(q,d2)?好處:標(biāo)注起來比較方便
壞處:標(biāo)注量大 估計(jì)得有O(n^2)
-
-
列表標(biāo)注
-
對(duì)于一個(gè)查詢
Query
,將人工理想的排序整個(gè)兒標(biāo)好好處: 相對(duì)于上面兩種,標(biāo)的效果會(huì)很好
壞處: 這個(gè)工作量也太大了…-_-||
-
日志抽取
當(dāng)搜索引擎搭建起來之后用戶的點(diǎn)擊數(shù)據(jù)就變得非常好使。
比如,結(jié)果ABC分別位于123位,B比A位置低,但卻得到了更多的點(diǎn)擊,那么B的相關(guān)性可能好于A.
這種點(diǎn)擊數(shù)據(jù)隱含了Query
到文檔的相關(guān)性好壞。所以一般會(huì)使用點(diǎn)擊倒置的高低位
結(jié)果作為訓(xùn)練數(shù)據(jù).
但是他也是存在問題的:
- 用戶總是習(xí)慣于從上到下瀏覽搜索結(jié)果
- 用戶點(diǎn)擊有比較大的噪聲
- 一般頭查詢(
head query
)才存在用戶點(diǎn)擊
這里的日志提取可以參考Learning to rank在淘寶的應(yīng)用,干貨!!!
特征提取
檢索系統(tǒng)會(huì)使用一系列特征來表示一次查詢,通過模型之后最終決定文檔的排序順序,這里用q來表示查詢,d表示查詢的文檔,occur?term共現(xiàn)的詞,則提取的特征主要有以下三大類:
- occur?term特征
- 共現(xiàn)在查詢中的出現(xiàn)次數(shù)、比率等
- occur?term的特征
- 共現(xiàn)在文檔中的出現(xiàn)次數(shù)、比率等
- 共現(xiàn)詞與文檔的相關(guān)性特征:
BM25系列
- 自身特征
-
PageRank
值 -
Spam
信息 -
Quality
質(zhì)量分 - 行為分,
ctr
,停留時(shí)間
,二跳率
等..
-
模型訓(xùn)練
LTR
的模型主要有單文檔方法(Pointwise Approach
)、文檔對(duì)方法(Pairwise Approach
)和列表方法(Listwise Approach
)三大類,下面是實(shí)現(xiàn)他們的各種算法:
Pointwise Approach
Pointwise的處理對(duì)象是單獨(dú)的一篇文檔,將文檔轉(zhuǎn)換為特征向量之后,機(jī)器學(xué)習(xí)模型根據(jù)從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)到的分類或者回歸函數(shù)對(duì)文檔打分,打分的結(jié)果就是搜索的結(jié)果.
其實(shí)就是將文檔排序轉(zhuǎn)為了文檔的回歸、分類和有序分類問題,其函數(shù)的框架為:
L(F(X),y)=∑i=1nl(f(xi)?yi)
輸入:
- 單個(gè)文檔查詢對(duì):(xi,yi)
- 完全忽略上下文的關(guān)系
- 將標(biāo)注轉(zhuǎn)為數(shù)字,比如
Perfect->5, Excellent->4, Good->3, Fair->2, Bad->1
輸出:
- 排序函數(shù),對(duì)于給定查詢文檔對(duì),能夠計(jì)算出得分(score)
關(guān)于Pointwise
下的三個(gè)分支,這張圖解釋的很好:
其主要區(qū)別就是loss function
不同,也就是最后的結(jié)果目標(biāo)不一樣:
-
Classification
:輸入的是5檔類別(作為離散),最后通過分類模型輸測試數(shù)據(jù)的各個(gè)檔位檔位的概率,然后進(jìn)行加權(quán)成一個(gè)實(shí)數(shù)值 -
Regression
:輸入的是5檔或者2檔(作為連續(xù)),最后通過回歸模型輸出測試數(shù)據(jù)的一個(gè)相關(guān)性實(shí)數(shù)(就是回歸) -
Ordinal Classification
:輸入的檔位是有序的,比如像上面一樣輸入5檔,但是他們的權(quán)重不一樣,可能權(quán)重最高檔位的分類(二分類),再進(jìn)行次高檔位的分詞,依次下去(McRank
的paper有講)
實(shí)現(xiàn)Pointwise
方法的主要算法有:
- Classification
- Discriminative model for IR (SIGIR 2004)
- McRank (NIPS 2007)
- Regression
- Least Square Retrieval Function (TOIS 1989)
- Regression Tree for Ordinal Class Prediction (Fundamenta Informaticae, 2000)
- Subset Ranking using Regression (COLT 2006)
- Ordinal Classification
- Pranking (NIPS 2002)
- OAP-BPM (EMCL 2003)
- Ranking with Large Margin Principles (NIPS 2002)
- Constraint Ordinal Regression (ICML 2005)
優(yōu)點(diǎn):
- 速度快,復(fù)雜度低.
缺點(diǎn):
- 效果一般
- 沒有考慮到文檔之間的相對(duì)關(guān)系
- 忽略了文檔相關(guān)度與查詢的關(guān)聯(lián),比如
Top Query
排在后面的相關(guān)性比Tial Query
排在前面的都要高,導(dǎo)致訓(xùn)練樣本不一致
Pairwise Approach
對(duì)于搜索任務(wù)來說,系統(tǒng)接收到用戶查詢后,返回相關(guān)文檔列表,所以問題的關(guān)鍵是確定文檔之間的先后相對(duì)順序關(guān)系,
而Pairwise則將重點(diǎn)轉(zhuǎn)向?qū)ξ臋n關(guān)系是否合理的判斷.
Pairwise
主要是講排序問題轉(zhuǎn)為了文檔對(duì)順序的判斷
以下圖為例:
對(duì)于查詢
Q1
進(jìn)行人工標(biāo)注之后,Doc2=5
的分?jǐn)?shù)最高,其次是Doc3
為4分,最差的是Doc1
為3分,將此轉(zhuǎn)為相對(duì)關(guān)系之后有:Doc2>Doc1、Doc2>Doc3、Doc3>Doc1
,而根據(jù)這個(gè)順序關(guān)系逆向也可以得到相關(guān)性的排序順序,所以排序問題可以很自然的轉(zhuǎn)為任意兩個(gè)文檔關(guān)系的判斷,而任意兩個(gè)文檔順序的判斷就稱為了一個(gè)很熟悉的分類問題.Pairwise
的函數(shù)框架為:
L(F(x),y)=∑i=1n?1∑j=i+1n(sign(yi?yj),f(xi)?f(xj))
輸入:
- 同一查詢的一對(duì)文檔(xi,xj,sign(yi?yj))
- 標(biāo)注兩個(gè)文檔的相對(duì)關(guān)系,如果文檔xi比xj更加相關(guān),則sign(yi?yj))=1
- 分布保留同一查詢下的文檔間關(guān)系
輸出:
- 排序函數(shù)給出文檔對(duì)的計(jì)算得分
關(guān)于Pairwise
最終的算分,其實(shí)分類和回歸都可以實(shí)現(xiàn):
實(shí)現(xiàn)Pairwise Approach
方法的主要算法有:
- Learning to Retrieve Information (SCC 1995)
- Learning to Order Things (NIPS 1998)
- Ranking SVM (ICANN 1999)
- RankBoost (JMLR 2003)
- LDM (SIGIR 2005)
- RankNet (ICML 2005)
- Frank (SIGIR 2007)
- MHR(SIGIR 2007)
- GBRank (SIGIR 2007)
- QBRank (NIPS 2007)
- MPRank (ICML 2007)
- IRSVM (SIGIR 2006)
- LambdaRank (NIPS 2006)
雖然Pairwise
方法對(duì)Pointwise
方法做了改進(jìn),但是也明顯存在兩個(gè)問題:
- 只考慮了兩個(gè)文檔的先后順序,沒有考慮文檔出現(xiàn)在搜索列表中的位置
- 不同的查詢,其相關(guān)文檔數(shù)量差異很大,轉(zhuǎn)換為文檔對(duì)之后,有的查詢可能有幾百對(duì)文檔,有的可能只有幾十個(gè),最終對(duì)機(jī)器學(xué)習(xí)的效果評(píng)價(jià)造成困難
Listwise Approach
與Pointwise和Pairwise不同,Listwise是將一個(gè)查詢對(duì)應(yīng)的所有搜索結(jié)果列表作為一個(gè)訓(xùn)練實(shí)例,因此也稱為文檔列方法.
文檔列方法根據(jù)K個(gè)訓(xùn)練實(shí)例訓(xùn)練得到最優(yōu)的評(píng)分函數(shù),對(duì)于一個(gè)新的查詢,函數(shù)F對(duì)每一個(gè)文檔進(jìn)行打分,之后按照得分順序高低排序,就是對(duì)應(yīng)的搜索結(jié)果.
Listwise
主要有兩類:
-
Measure specific
:損失函數(shù)與評(píng)估指標(biāo)相關(guān),比如:L(F(x),y)=exp(?NDCG) -
Non-measure specific
:損失函數(shù)與評(píng)估指標(biāo)不是顯示相關(guān),考慮了信息檢索中的一些獨(dú)特性質(zhì)
實(shí)現(xiàn)Listwise
的算法主要有:
- Measure-specific
- AdaRank (SIGIR 2007)
- SVM-MAP (SIGIR 2007)
- SoftRank (LR4IR 2007)
- RankGP (LR4IR 2007)
- LambdaMART (inf.retr 2010)
- Non-measure specific
- ListNet (ICML 2007)
- ListMLE (ICML 2008)
- BoltzRank (ICML 2009)
實(shí)驗(yàn)表明 一般
Listwise
要好于前兩種排序算法,但是其復(fù)雜度是在太高了
方法對(duì)比
pointwise | pairwise | listwise | |
---|---|---|---|
輸入信息的完整度 | 不完全 | 部分完全 | 完全 |
輸入 | (x,y) | (x1,x2,y) | (x1,x2…xn,π) |
輸出 | f(x) | f(x) | f(x) |
樣本復(fù)雜度 | O(n) | O(n^2) | O(n!) |
表現(xiàn) | 差 | 中 | 好 |
評(píng)估指標(biāo)
MAP
MAP
(Mean Average Precision
)表示文檔在排序中的平均精度均值,是用于衡量個(gè)query查詢見過的平均精度值AP
,
系統(tǒng)檢索出來的相關(guān)文檔越靠前(rank 越高),MAP就可能越高。如果系統(tǒng)沒有返回相關(guān)文檔,則準(zhǔn)確率默認(rèn)為0。
所以對(duì)于計(jì)算AP
的值就是關(guān)鍵了,MAP
對(duì)文檔只分為兩檔:相關(guān)與不相關(guān),則AP
表示為
AP=∑ni:relvancePi/Rin
其中Pi表示所有召回文檔中相關(guān)文檔的相對(duì)次序,Ri表示所有被召回的相關(guān)文檔中在所有文檔中的次序
則他的相對(duì)順序的表格為:
O | X | O | O | O | O | X | X | X | O | |
---|---|---|---|---|---|---|---|---|---|---|
相關(guān)文檔次序 | 1 | 2 | 3 | 4 | 5 | 6 | ||||
所有召回文檔次序 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Precision | 1/1 | 2/3 | 3/4 | 4/5 | 5/6 | 6/10 |
最終計(jì)算的AP=(1/1+2/3+3/4+4/5+5/6+6/10)/6=0.78
NDCG
NDCG
表示表示歸一化折損累積增益,主要是衡量實(shí)際相關(guān)性越高的文檔排在越前面,它的全稱是Normalized Discounted Cumulative Gain
,也正好代表了4個(gè)部分的含義:
-
Gain
:表示增益,一般相關(guān)性越高,增益值也是越大
Gi=2yi?1
> 其中yi表示文檔相關(guān)性檔位,一般檔位越高,相關(guān)性越大
-
Discounted
:一般認(rèn)為排序位置 帶來的權(quán)重不同,所以會(huì)有一個(gè)折損因子
DGi=2yi?1log(1+i)
> 其中i為文檔的排序位置,從1開始
-
Cumulative
:表示在一次query
查詢中所有的增益累加
DCG=∑i=1n2yi?1log(1+i)
-
Normalized
:為歸一化,因?yàn)樵诓煌牟樵冎锌赡?code>DCG的值波動(dòng)較大,這里計(jì)算各個(gè)query最理想的排序的DCG
值作為歸一化因子,也稱為IDCG
NDCG=1IDCG?∑i=1n2yi?1log(1+i)
NDCG
的可使用性更加廣泛了,但是還是存在以下三點(diǎn)限制:
-
NDCG
并沒有對(duì)不相關(guān)文檔進(jìn)行懲罰 -
NDCG
對(duì)一些缺失的完成結(jié)果也沒有進(jìn)行懲罰 -
NDCG
也不是用檔位大家都相等的情況(比如每頁里面的doc相關(guān)性都是差不多的)
公開數(shù)據(jù)集
- http://research.microsoft.com/en-us/um/beijing/projects/letor/
- http://research.microsoft.com/en-us/projects/mslr/
- http://webscope.sandbox.yahoo.com/
總結(jié)
在玩搜索引擎時(shí)敲定特征分的權(quán)重是非常疼的一件事兒,而LTR
正好幫你定分,LTR
的三種實(shí)現(xiàn)方法其實(shí)各有優(yōu)劣:
- 難點(diǎn)主要在訓(xùn)練樣本的構(gòu)建(人工或者挖日志),另外就是訓(xùn)練復(fù)雜
- 雖說
Listwise
效果最好,但是天下武功唯快不破,看看這篇文章http://www.cnblogs.com/zjgtan/p/3652689.html體驗(yàn)下 - 在工業(yè)界用的比較多的應(yīng)該還是
Pairwise
,因?yàn)樗麡?gòu)建訓(xùn)練樣本相對(duì)方便,并且復(fù)雜度也還可以,所以Rank SVM
就很火啊_