Pairwise ranking methods: RankNet与LambdaRank
转自:http://blog.csdn.net/u014374284/article/details/49385065, 感谢分享!
LamdaMart 介绍见博客http://blog.csdn.net/huagong_adu/article/details/40710305,感谢分享!
在使用搜索引擎的过程中,对于某一Query(或关键字),搜索引擎会找出许多与Query相关的URL,然后根据每个URL的特征向量对该URL与主题的相关性进行打分并决定最终URL的排序,其流程如下:
排序的好坏完全取决于模型的输出,而模型又由其参数决定,因而问题转换成了如何利用带label的训练数据去获得最优的模型参数w。Ranknet提供了一种基于Pairwise的训练方法,它最早由微软研究院的Chris Burges等人在2005年ICML上的一篇论文Learning to Rank Using Gradient Descent中提出,并被应用在微软的搜索引擎Bing当中。
相关性概率
Cost function是RankNet算法的核心,在介绍Cost function前,我们先定义两个概率:预测相关性概率、真实相关性概率。
预测相关性概率
对于任意一个URL对(Ui,Uj
),模型输出的score分别为si
和sj
,那么根据模型的预测,Ui
比Uj
与Query更相关的概率为:
Pij=P(Ui>Uj)=11+e−σ(si−sj)由于RankNet使用的模型一般为神经网络,根据经验sigmoid函数能提供一个比较好的概率评估。参数σ
决定sigmoid函数的形状,对最终结果影响不大。
真实相关性概率
对于训练数据中的Ui和Uj
,它们都包含有一个与Query相关性的真实label,比如Ui
与Query的相关性label为good,Uj
与Query的相关性label为bad,那么显然Ui
比Uj
更相关。我们定义p¯ij
为Ui
比Uj
更相关的真实概率,有
p¯ij=12(1+Sij)如果Ui
比Uj
更相关,那么Sij=1
;如果Ui
不如Uj
相关,那么Sij=−1
;如果Ui
、Uj
与Query的相关程度相同,那么Sij=0
。
代价函数
对于一个排序,RankNet从各个URL的相对关系来评价排序结果的好坏,排序的效果越好,那么有错误相对关系的pair就越少。所谓错误的相对关系即如果根据模型输出Ui
排在Uj
前面,但真实label为Ui
的相关性小于Uj
,那么就记一个错误pair,RankNet就是以错误的pair最少为优化目标。对于每一个pair,我们使用交叉熵来度量其预测代价,即:
化简
下图展示了Cij
随P¯¯¯ij
、Pij
的变化情况:
图中t表示si−sj
,可以看到当Sij=1
时,模型预测的si
比sj
越大,其代价越小;Sij=−1
时,si
比sj
越小,代价越小;Sij=0
时,代价的最小值在si
与sj
相等处取得。该代价函数有以下特点:
- 当两个相关性不同的文档算出来的模型分数相同时,损失函数的值大于0,仍会对这对pair做惩罚,使他们的排序位置区分开
- 损失函数是一个类线性函数,可以有效减少异常样本数据对模型的影响,因此具有鲁棒性
总代价
I表示所有URL pari的集合,且每个pair仅包含一次。
梯度下降迭代
我们获得了一个可微的代价函数,下面我们就可以用梯度下降法来迭代更新模型参数wk
了,即
η
为步长,代价C
沿负梯度方向变化:
这表明沿负梯度方向更新参数确实可以降低总代价。我们对∂C∂wk
继续分解
其中
我们令λij=∂Cij∂si=σ(12(1−Sij)−11+eσ(si−sj))
,有
下面我们来看看这个λi
是什么。前面讲过集合I中只包含label不同的URL的集合,且每个pair仅包含一次,即(Ui
,Uj
)与(Uj
,Ui
)等价。为方便起见,我们假设I中只包含(Ui
,Uj
)表示Ui
相关性大于Uj
的pair,即I中的pair均满足Sij=1
,那么
这个写法是Burges的paper上的写法,我对此好久都没有理清,下面我们用一个实际的例子来看:有三个URL,其真实相关性满足U1>U2>U3,那么集合I中就包含
{(1,2), (1,3), (2,3)}共三个pair
显然λ1=λ12+λ13,λ2=λ23−λ12,λ3=−λ13−λ23
,因此我所理解的λi
应为
λi
决定着第i个URL在迭代中的移动方向和幅度,真实的排在Ui
前面的URL越少,排在Ui
后面的URL越多,那么文档Ui
向前移动的幅度就越大(实际λi
负的越多越向前移动)。这表明每个URL下次调序的方向和强度取决于所有同一Query的其他不同label的文档。
LambdaRank
上面我们介绍了以错误pair最少为优化目标的RankNet算法,然而许多时候仅以错误pair数来评价排序的好坏是不够的,像NDCG或者ERR等评价指标就只关注top k个结果的排序,当我们采用RankNet算法时,往往无法以这些指标为优化目标进行迭代,以下图为例:
图中每个线条表示一个URL,蓝色表示与Query相关的URL,灰色表示不相关的URL。下面我们用Error pair和NDCG分别来评估左右两个排序的好坏:
Error pair指标
对于排序1,排序错误的pair共13对,故cost=13
,分别为:
(2,15)、(3,15)、(4,15)、(5,15)、(6,15)、(7,15)、(8,15)、
(9,15)、(10,15)、(11,15)、(12,15)、(13,15)、(14,15)对于排序2,排序错误的pair共11对,故cost=11
,分别为:
(1,4)、(2,4)、(3,4)
(1,10)、(2,10)、(3,10)、(5,10)、(6,10)、(7,10)、(8,10)、(9,10)所以,从Error pair角度考虑,排序2要优于排序1
NDCG指标
排序1与排序2具有相同的maxDCG@16
,
maxDCG@16=21−1log(1+1)+21−1log(1+2)=1.63对排序1,有
DCG@16=21−1log(1+1)+21−1log(1+15)=1.25NDCG@16=DCG@16maxDCG@16=1.251.63=0.767对排序2,有
DCG@16=21−1log(1+4)+21−1log(1+10)=0.72NDCG@16=DCG@16maxDCG@16=0.721.63=0.442所以,从NDCG指标来看,排序1要优于排序2。
那么我们是否能以RankNet的思路来优化像NDCG、ERR等不连续、不平滑的指标呢?答案是肯定,我们只需稍微改动一下RankNet的λij
的定义即可
式中ΔZij
表示,将Ui
和Uj
交换位置后,待优化指标的变化,如ΔNDCG
就表是将Ui
和Uj
进行交换,交换后排序的NDCG
与交换前排序的NDCG
的差值,我们把改进后的算法称之为LambdaRank。
排序2中以箭头展示了RankNet和LambdaRank的下一轮迭代的调序方向和强度(箭头长度),黑色箭头表示RankNet算法下U4和U10
的调序方向和强度,红色箭头表示以NDCG为优化目标的LambdaRank算法下的调序方向和强度。
以上就是我对RankNet和LambdaRank的理解,如有不对之处还请指正。
参考:
From RankNet to LambdaRank to LambdaMART: An Overview
http://blog.csdn.net/huagong_adu/article/details/40710305
http://www.cnblogs.com/kemaswill/p/kemaswill.html
http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/random-forest-and-gbdt.html
Pairwise ranking methods: RankNet与LambdaRank的更多相关文章
- [笔记]Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart
之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...
- Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart
之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...
- 机器学习排序算法:RankNet to LambdaRank to LambdaMART
使用机器学习排序算法LambdaMART有一段时间了,但一直没有真正弄清楚算法中的所有细节. 学习过程中细读了两篇不错的博文,推荐给大家: 梯度提升树(GBDT)原理小结 徐博From RankNet ...
- Learning to Rank:Point-wise、Pair-wise 和 List-wise区别
机器学习的 ranking 技术——learning2rank,包括 pointwise.pairwise.listwise 三大类型. [Ref-1]给出的: <Point wise rank ...
- Learning to Rank之RankNet算法简介
排序一直是信息检索的核心问题之一, Learning to Rank(简称LTR)用机器学习的思想来解决排序问题(关于Learning to Rank的简介请见我的博文Learning to Rank ...
- 排序学习(learning to rank)中的ranknet pytorch简单实现
一.理论部分 理论部分网上有许多,自己也简单的整理了一份,这几天会贴在这里,先把代码贴出,后续会优化一些写法,这里将训练数据写成dataset,dataloader样式. 排序学习所需的训练样本格式如 ...
- Preference Learning——Object Ranking
Basics About Orders Object Ranking应用: 量化的受訪者的感觉或印象(quantification of respondents' sensations or impr ...
- 【机器学习Machine Learning】资料大全
昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...
- [Machine Learning] Learning to rank算法简介
声明:以下内容根据潘的博客和crackcell's dustbin进行整理,尊重原著,向两位作者致谢! 1 现有的排序模型 排序(Ranking)一直是信息检索的核心研究问题,有大量的成熟的方法,主要 ...
随机推荐
- google 浏览器的Debug 调试工具使用
一个写后台的人 有一天要自己找前台页面的错误 于是乎就得会前台debug 于是乎我不会 就在网上找了一些资料看 不就是几个按钮 嘛 有啥难的 上图片 1.Google 浏览器 F12 就可以看到 ...
- JavaWeb学习笔记(十二)—— JDBC的基本使用
一.JDBC概述 1.1 数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道 ...
- plsql11破解注册码
plsql11.0.6.1796-64bit的可以用注册码: Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number: passwo ...
- MySQL 安装 linux ,window 傻瓜版
现在作为服务器操作系统的一般有三种,Windows Server,Linux,Unix,在这里我们只介绍在windows下和linux下安装mysql,Unix下安装应该和linux差不多. Wind ...
- ZOJ - 2401 水DP
最近会多做点巩固基础的题目 #include<iostream> #include<algorithm> #include<cstdio> #include< ...
- ACM 计算几何向量
向量 简介注意事项基本计算 加减法 ~ 示例代码 长度 ~ 示例代码 数乘 ~ 示例代码 点积 应用 ~ 示例代码 叉积 ~ 示例代码 性质与应用 经典题目 向量旋转 操作目的 模板代码 简介 向量, ...
- Python BeautifulSoup库的用法
BeautifulSoup是一个可以从HTML或者XML文件中提取数据的Python库,它通过解析器把文档解析为利于人们理解的文档导航模式,有利于查找和修改文档. BeautifulSoup3目前已经 ...
- PIE SDK矢量数据的投影转换
1. 功能简介 目前在地理信息领域中数据包括矢量和栅格两种数据组织形式 ,每一种数据都可以对投影进行转换,目前PIE SDK支持矢量和栅格数据的投影转换功能,下面对矢量数据的投影转换功能进行介绍. 2 ...
- SpringMVC 源码阅读
- 02-使用注解配置spring
1 准备工作 1.导包 4+2+spring-aop[新版本需要导入 spring-aop 包] 2.为主配置文件引入新的命名空间(约束) [context] 3.开启使用注解代理配置文件 4.在类中 ...