Learning to Rank之RankNet算法簡介


  排序一直是信息檢索的核心問題之一, Learning to Rank(簡稱LTR)用機器學習的思想來解決排序問題(關於Learning to Rank的簡介請見我的博文Learning to Rank簡介)。LTR有三種主要的方法:PointWise,PairWise,ListWise. RankNet是一種Pairwise方法, 由微軟研究院的Chris Burges等人在2005年ICML上的一篇論文Learning to Rank Using Gradient Descent中提出,並被應用在微軟的搜索引擎Bing當中。

1. 損失函數

  損失函數一直是各種Learning to Rank算法的核心, RankNet亦然.

  RankNet是一種Pairwise方法, 定義了文檔對<A, B>的概率(假設文檔A, B的特征分別為xi,xj):

     

  其中oij=oi-oj, oi=f(xi), RankNet使用神經網絡來訓練模型, 所以f(xi)是神經網絡的輸出。

  如果文檔A比文檔B和查詢q更加相關, 則目標概率:=1, 如果文檔B比文檔A更相關, 目標函數=0, 如果A和B同樣相關, 則=0.5.

  有了模型輸出的概率Pij和目標概率, 我們使用交叉熵來作為訓練的損失函數:

  

  在三種不同的目標概率下, 損失函數和oij之間的關系如下圖所示:

  

  可以看到, 在=1時, oij越大損失函數越小, =0時, 越小損失函數越小, =0.5時, =0.5時損失函數最小。

  本身也有一些非常好的特性, 給定, 得到:

  

  令==P, 得到P和的關系如下圖所示:

    

  可以看到, 當P>0.5時, 亦即i>j, j>k時, 有>0.5, 亦即i>k, 這說明概率P具有一致性(consistency).

2. RankNet算法

  RankNet使用神經網絡來訓練模型, 使用梯度下降來優化損失函數。特別的, Chris Burges等人在論文中證明, 對於m個文檔{d1,d2,...,dm}, 需要且只需要知道相鄰文檔之間的概率Pij,就可以算出任意兩個文檔之間的后驗概率. 可以實現對m個文檔做任意排列, 然后以排列后的相鄰文檔之間的概率Pij作為訓練數據, 然后訓練模型, 時間復雜度為O(N), 優於Ranking SVM的O(N2)。

  在使用神經網絡進行訓練時, 將排好序的文檔逐個的放入神經網絡進行訓練, 然后通過前后兩個文檔之間的oij=oi-oj來訓練模型, 每一次迭代, 前向傳播m次, 后向反饋m-1次。

  RankLib中有RankNet等Learning to Rank算法的開源Java實現。

 

參考文獻:

  [1]. Chris Burges, et al. Learning to Rank using Gradient Descent, ICML, 2005.

  [2]. Tie-yan Liu. Learning to Rank for Information Retrieval.

  [3]. Learning to Rank簡介

  [4]. RankLib

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM