排序学习(LTR)经典算法:RankNet、LambdaRank和LambdaMart
?PaperWeekly 原創 ·?作者 |?yancy
單位 |?字節跳動
研究方向 |?推薦系統
背景
在許多場景中我們都需要模型學習到排序的能力,比如網頁搜索場景下我們需要根據搜索詞和文檔的相關度做排序,把更相關的文章排到前面,此時文章的相關度就是要排序的目標。又比如在視頻推薦場景下,粗排的目標往往是學習精排,把精排認為更好的文章送入精排打分,此時視頻的精排打分就是要排序的目標。Learn to Rank(LTR)要做的就是輸入一批候選(上文中的網頁或者視頻),算法能夠給出一種排序,使得這種排序最優秀。本文介紹 LTR 中經典的三種算法:RankNet、LambdaRank、LambdaMart,并介紹他們的關聯。
評價指標
我們如何評價模型給出的順序好還是壞呢?業界最常用的指標為 NDCG,大名鼎鼎的 Softrank、LambdaMart 都是以 NDCG 為準描述論文,在實踐中 NDCG 也是最為常用的指標,下面對其進行介紹。
首先我們那需要先計算 DCG,我們有 T 個需要排序的候選,其中 表示算法給出的第 i 個位置的 label,比如搜索場景中文章相關性分為五個檔次:非常相關、相關、中性、不相關、非常不相關,那對應的 label 分別就是 5,4,3,2,1。對應推薦粗排場景,可以直接使用精排的打分作為 label。分母則對位置做折算,越靠前的位置越重要。這個也比較符合直覺,我們搜索之后得到結果也是會更關注靠前的網頁是否能快速滿足我們的興趣,如果前面幾個結果相關性較差,我們更容易認為算法的表現不盡人意。如果沒有這個分母的位置折算的話,不管算法如何排序,得到的反饋都是一樣的。可以看出如果算法把分數更高的候選排的越靠前,DCG 也就越高。
DCG 計算出來的分數是一個考慮位置折算的累積收益,絕對值大小 的量綱有直接的關系,我們很難通過 DCG 的絕對值來判斷算法的效果,不具備直觀性,因此引出 NDCG:我們按照 label 倒排,得到最優的排序,計算這個排序下的 DCG,這就是我們算法能達到的最優上限 maxDCG,用 DCG/maxDCG 就得到了最終的 NDCG 指標,所以 NDCG 是一個介于 0-1 之間的值,值越大算法效果越好。
RankNet
從上面的計算公式可以看出 NDCG 是不可直接求導的,因為其中涉及到排序這種算子,這個本身就是不連續不可求導的,也就是論文中經常提到的 LTR 任務是 Non-Smooth 的原因。RankNet 解決排序的思路其實是把一個 list 排序的問題轉化成 list 中兩兩比較的問題,舉個例子來說比如你想買房子,給你一堆房源你很可能挑花眼,很難給出正確的排序。但是只給你兩個做比較,你就可以從價格、面積、朝向這些維度進行比較,比較容易得出孰優孰略的結論,如果你具備了兩兩比較的能力,那用這個能力給出整體的排序就水到渠成了。
所以 RankNet 的訓練數據不是輸入一個一個的 list,而是輸入一個一個的 pair,比如文章(i , j)。我們也知道 i 和 j 的 label。
模型對兩個候選給出的打分為 。我們建模的目標是一個概率,即模型認為候選 i 比候選 j 更相關的概率:
這里注意 只是一個超參常數,并不是 sigmoid 函數,論文中使用了這種 notation,本文也進行了保留。其實實踐中基本都是設置為 1。既然是要最大化概率,那用我們在二分類領域最熟悉的交叉熵損失:
其中 的意義為如果 i 的 label 比 j 大(i 比 j 更相關)則為 1,認為是正例。如果 i 的 label 比 j 小為 -1,認為是負例。如果打平則為 0。這里的 或者 就是模型輸出的 logit,可以是神經網絡不過 sigmoid 輸出的最后一層 logit,也可以是簡單的 LR 的輸出,沒有任何模型上的限制。RankNet 只是在 loss 層做了修改,可以適配 pointwise 中的所有模型結構。模型通過上述方式訓練完成后,只需要在預測的時候得到每個文檔的 logit ,按照這個得分倒排即可。
這里既然提到了 pointwise,可以稍微拓展講一下 pointwise 算法。繼續拿上文提到的網頁搜索舉例子,pointwise 的思路就是不需要標注一次搜索后網頁的相關性,而是根據用戶的行為決定正負例。如果一個網頁曝光后點擊就是正例,否則為負例。一般模型特征會加入 query 類和網頁類以及 context 特征。
最后模型輸出的是一個網頁會不會被點擊的概率,評價指標往往是 auc、F1 這種不考慮 list 順序的指標。按照這個概率倒排作為排序的標準。從這里可以看出 pointwise 模型并不會考慮一次搜索結果后各網頁之間的關系,并不是從全局的排序關系來考慮問題的,因此得到的排序結果也可能不是最優的。而 pair-wise 和 list-wise 算法則會建模 list 各元素的相關關系。
RankNet的加速
看到這里很多讀者已經發現了 rankNet 的復雜度極其高,比如需要排序的 list 有 3 個候選的時候,我們就需要兩兩拆分成 6 個 pair 來訓練。但其實我們可以做優化,首先我們可以利用 pair loss 的對稱性減少一半的計算量。觀察我們的 loss:
這里就是簡單的推導和合并同類項,詳細的過程參考附錄。對于一個 pair(i,j),我們假設 i 的相關性比 j 更強,也就是 ,這時候產生的 loss:。
如果我們把這個 pair 反過來,也就是(j,i),這時 。產生的 loss:
所以 pair 調換順序產生的 loss 是完全一樣的,因此我們只需要考慮 i 比 j 更相關的 pair 即可,接下來我們對模型參數求導:
首先基于公式(1)求導:
觀察上述兩個公式,易得:
假設模型內部用到的參數為 w,則利用鏈式法則和公式(2)(3)得到:
我們把
402 Payment Required
這一項定義為 ,則有再結合上面提到的 pair loss 對稱性,我們定義一個 pair 集合:I:{i,j},其中 ,我們只需要計算 I 集合的 loss,則:
其中 這里 的數學表達比較繞,其實說白了就是針對一個文檔 i,找出所有 label 比 i 小的文章 j,然后把這些 全部加起來。然后找到所有 label 比 i 大的文章 j,然后把這些 也全部加起來,兩部分和一減變得到了 。你可能覺得這個推導非常難,其實舉個只有三個文檔的例子你就懂了:
加入三篇文章 1,2,3 的 label 依次減少。記得我們前面提到的 pair loss 對稱性,我們只需要關注 i 比 j ?label 更高的 pair 即可。則 I = {(1,2),(1,3),(2,3)},帶入公式(5)有:
這里文章 1 得分最高,所以碰到誰都可以欺負,因此 都是正的。文章 2 能欺負文章 3,但是欺負不了 1,因此 符號是正的, 符號是負的。文章 3 最弱,碰到誰都是負號。
寫到這里可能有同學會問,我們大費周折得到這樣的合并有什么好處的,我來告訴你好處大大的,因為合并之后每個 都只要計算一次,如果不合并的話 是不是要 bp 兩次,但是現在只需要 bp 一次,和 point-wise 的復雜度是一模一樣的。多出來的計算量只是在 fp 的時候計算 。
LambdaRank
基于公式(4)并利用 pair loss 對稱性,我們對 w 的梯度做一定的變形:
這里可以看出來 和 肯定是異號的,當優化器想讓 C 減少的時候, 肯定是增加的,同時 是同等程度的減少,并且增加或者減少的幅度和 相關,如果 越小, 增加的更多。 越小表示模型認為候選 i 比 j 差的概率更高,注意我們約定 pair 是 i 肯定是比 j 更相關的,那說明模型錯誤的更多,這個時候把 i 和 j 分的更開是很符合我們的直覺的。
這里我們看出 表明了模型把 ij 分開的動力有多大,因為 rankNet 僅考慮 pair 的順序,并不考慮 i 或者 j 處在的位置,比如針對 NDCG 指標,校準第一二位置的亂序以及倒數一二位置的亂序得到的 NDCG gain 是完全不同的,但是 RankNet 無法感知到這兩個 pair 重要性的不同。所以 LambdaRank 對 加入了一個啟發式的權重:
表示交換 ij 位置之后對于 NDCG 的影響,表示的是當把 j 換到 i 之后 NDCG 能增加多少。 即 DCG 的分子部分:。 即 DCG 的分母部分:。如果 越大表示這個 pair 校準后對 NDCG 的影響越大,因此增加梯度,更加拉開 ij 的差距。Paper 也證明了這樣的權重是可以直接優化 NDCG 的。如果你用的是其他指標,也直接把對應指標的變化放在這里就可以直接對指標進行優化。
最后再提一句:LambdaMart 其實就是 lambdaRank 的 gbdt 樹版本。至此 RankNet 和 LambdaRank 已經介紹完畢,可以看出這里還是用 pairwise 的思路來解決 listwise 的問題。歡迎對這兩個算法感興趣的同學在文章下面留言,大家一起進行討論。后續我會繼續分享 softRank,直接使用概率論的思路把排序變成一個可求導的問題,思路非常巧妙。如果大家對一些算法特別感興趣也可以留言,我抽時間進行研讀后來和大家進行討論。如果本文對您有幫助,希望能不吝點贊、評論和分享,這是對我的最大幫助!
附錄
損失函數的推導:
參考文獻
[1]Burges, Christopher JC. "From ranknet to lambdarank to lambdamart: An overview." Learning 11, no. 23-581 (2010): 81.
[2]C.J.C. Burges, R. Ragno and Q.V. Le. Learning to Rank with Non-Smooth Cost Functions.?Advances in Neural Information Processing Systems, 2006.
特別鳴謝
感謝 TCCI 天橋腦科學研究院對于 PaperWeekly 的支持。TCCI 關注大腦探知、大腦功能和大腦健康。
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學術熱點剖析、科研心得或競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。
📝?稿件基本要求:
? 文章確系個人原創作品,未曾在公開渠道發表,如為其他平臺已發表或待發表的文章,請明確標注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發送,要求圖片清晰,無版權問題
? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創首發稿件,提供業內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
🔍
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
·
總結
以上是生活随笔為你收集整理的排序学习(LTR)经典算法:RankNet、LambdaRank和LambdaMart的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在电脑上怎么看u盘 电脑如何查看U盘文件
- 下一篇: win10系统开机不了系统怎么办 Win