排序一直是信息检索的核心问题之一, 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

Learning to Rank之RankNet算法简介的更多相关文章

  1. 【机器学习】Learning to Rank之Ranking SVM 简介

    Learning to Rank之Ranking SVM 简介 排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning t ...

  2. Learning to Rank之Ranking SVM 简介

    排序一直是信息检索的核心问题之一,Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Learning to Rank简 ...

  3. [Machine Learning] Learning to rank算法简介

    声明:以下内容根据潘的博客和crackcell's dustbin进行整理,尊重原著,向两位作者致谢! 1 现有的排序模型 排序(Ranking)一直是信息检索的核心研究问题,有大量的成熟的方法,主要 ...

  4. [笔记]Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart

    之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...

  5. Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart

    之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...

  6. Learning to Rank 简介

    转自:http://www.cnblogs.com/kemaswill/archive/2013/06/01/3109497.html,感谢分享! 本文将对L2R做一个比较深入的介绍,主要参考了刘铁岩 ...

  7. 【机器学习】Learning to Rank 简介

    Learning to Rank 简介 去年实习时,因为项目需要,接触了一下Learning to Rank(以下简称L2R),感觉很有意思,也有很大的应用价值.L2R将机器学习的技术很好的应用到了排 ...

  8. Learning to Rank简介

    Learning to Rank是采用机器学习算法,通过训练模型来解决排序问题,在Information Retrieval,Natural Language Processing,Data Mini ...

  9. Learning to rank基本算法

    搜索排序相关的方法,包括 Learning to rank 基本方法 Learning to rank 指标介绍 LambdaMART 模型原理 FTRL 模型原理 Learning to rank ...

随机推荐

  1. 【渗透测试学习平台】 web for pentester -4.目录遍历

    Example 1 http://192.168.106.154/dirtrav/example1.php?file=../../../../../../../etc/passwd Example 2 ...

  2. 关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试

    #pragma once #include <stdio.h> //getchar() #include <tchar.h> #include <stdlib.h> ...

  3. 在 CSS 中使用特征查询

    原文地址:Using Feature Queries in CSS 原文作者:Jen Simmons 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:Che ...

  4. Android 7.1 SystemUI--任务管理--场景一:长按某个缩略图,拖动分屏的流程

    TaskView 类的长按事件 onLongClick 方法内发送了 DragStartEvent 事件消息,该 DragStartEvent 事件消息由 RecentsView,TaskStackV ...

  5. struts2的核心和工作原理 <转>

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...

  6. hdu5411 CRB and Puzzle[矩阵优化dp]

    CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  7. ORA-28056 解决方法

    用pl/sql devlper 来连接oracle数据库,遇到 0RA-28056错误,解决的方法是 在 计算机-->管理 -->事件查看器里边清理应用程序日志(问题原因是应用程序的日志满 ...

  8. IE各浏览器HACK

    border:2px solid #00f; /*IE.ff的属性*/ border:2px solid #090\9; /* IE6/7/8的属性 */ border:2px solid #F90\ ...

  9. mysql日期处在某两个时间段之间的between比较

    where SYSDATE() between '2018-08-28 09:21:48' and '2018-08-28 09:25:48' sysdate()等于2018-08-28 09:23: ...

  10. Python - 3.6 学习四

    错误.调试和测试 程序运行中,可能会遇到BUG.用户输入异常数据以及其它环境的异常,这些都需要程序猿进行处理.Python提供了一套内置的异常处理机制,供程序猿使用,同时PDB提供了调试代码的功能,除 ...