Listwise是對query下的整個文檔集合進行排序。Listwise的算法大致可以分為兩種,一種是直接想辦法去優(yōu)化NDCG、MAP這些評價指標,另一種是去自定義優(yōu)化損失函數(shù)。NDCG與MAP這些基于排序位置來計算的指標是不連續(xù)、不可微的。第一種方法是想辦法將這些評價指標轉(zhuǎn)化為連續(xù)可微的近似指標,然后去優(yōu)化。在這里我們介紹第二種方法中的ListNet算法。ListNet的損失函數(shù)是用這種排列下的概率分布來定義的。使用的概率分布是Plackett–Luce model。
假設(shè)一共有m篇文檔,π代表一種排列方式,s代表一種打分函數(shù)。則有該排列方式出現(xiàn)的概率為


代表文檔被排在第j位置的分數(shù),是一種轉(zhuǎn)換函數(shù),可以為線性指數(shù)或者sigmoid形式。

觀察后面的式子,含義可以看作,一個文檔有可能排在1-m各個位次,該式是這個文檔排在第j位的概率。將所有位置的文檔排列在該位置的概率乘起來,就是這個排列出現(xiàn)的概率。
書中指到,plackett-luce模型在一定條件下具有尺度不變性和平移不變性。例如,當我們使用指數(shù)函數(shù)作為轉(zhuǎn)換函數(shù)時,在將相同的常數(shù)添加到所有排名分數(shù)之后,plackett–luce模型定義的排列概率分布將不會改變。當我們使用線性函數(shù)作為轉(zhuǎn)換函數(shù)時,所有的排名分數(shù)乘以相同的常數(shù)后,排列概率分布不會改變。這些特性與我們的對排名的直覺相近。
在這個概率定義以后,用KL散度或者交叉熵來衡量某排列與ground truth的差異。

書中提到,這樣計算出的損失函數(shù)與真實的NDCG損失是相關(guān)性很強的,可以看作是一種不錯的替代。由于排列組合的多樣性,該算法在完整排列上應(yīng)用起來計算量很大,所以一般只計算TOP-K的出現(xiàn)概率。
簡書怎么老是吞字,服了。。。
Pointwise的不足之處:
Pointwise使用傳統(tǒng)的分類,回歸或者OrdinalRegression來對給定query下的單個文檔的相關(guān)度進行建模,沒有文檔位置對排序結(jié)果的影響,而回歸和分類的損失函數(shù)會盡量擬合所有的數(shù)據(jù),算法為了整體損失最小,有可能把排在前面的文檔的損失變得更大,或者把排在后面的文檔的損失變得更小,從而導(dǎo)致排序難以取得良好的效果。
Pairwise的不足:
文檔較多時,pair的數(shù)目是平方級增長的,計算量太大;Pair對不同級別之間的區(qū)分度一致對待,沒有對排在前面的結(jié)果作更好的區(qū)分。對于搜索引擎而言,用戶更傾向于點擊前幾頁的結(jié)果;相關(guān)文檔集大小帶來模型的偏置。如果一個query下文檔遠多于另一query,支持向量就會向該query偏置,導(dǎo)致分類器對后者區(qū)分不好。
個人感覺ListNet由于計算量以及數(shù)據(jù)準備困難的問題,線上應(yīng)該比較難實現(xiàn).lambdaMART考慮到了排序位置的因素,某種意義上也算是一種Listwise算法,而且可以直接調(diào)包,應(yīng)該是線上最常見的一種排序算法。