colt mrr_Learning To Rank 介绍

LTR简介

LTR(Learning torank)学习排序是一种监督学习(SupervisedLearning)的排序方法。LTR已经被广泛应用到文本挖掘的很多领域,比如IR中排序返回的文档,推荐系统中的候选产品、用户排序,机器翻译中排序候选翻译结果等等。IR领域传统的排序方法一般通过构造相关度函数,然后按照相关度进行排序。影响相关度的因素很多,比如tf,idf,dl等。有很多经典的模型来完成这一任务,比如SVM,Boolean model,概率模型等。对于传统的排序方法,很难融合多种信息,比如向量空间模型以tf*idf作为权重构建相关度函数,就很难利用其他信息了,并且如果模型中参数比较多,也会使得调参非常困难,而且很可能会出现过拟合现象。于是人们很自然的想到了用机器学习(Machine Learning)来解决这一问题,于是就有了Learning to rank。机器学习方法很容易融合多种特征,而且有成熟深厚的理论基础,参数是通过迭代优化出来的,有一套成熟理论解决稀疏、过拟合等问题。

对于标注训练集,选定LTR方法,确定损失函数,以最小化损失函数为目标进行优化即可得到排序模型的相关参数,这就是学习过程。预测过程将待预测结果输入学习得到的排序模型中,即可得到结果的相关得分,利用该得分进行排序即可得到待预测结果的最终顺序。

LTR方法分类

LTR一般说来有三类方法:单文档方法(Pointwise),文档对方法(Pairwise),文档列表方法(Listwise)。在工业界用的比较多的应该还是Pairwise,因为构建训练样本相对方便,并且复杂度也还可以。

单文档方法

Pointwise 将问题转化为多分类或回归问题。如果归结为多分类问题,对于某个 Query,对文档与此 Query 的相关程度打标签,标签分为有限的类别,这样就将问题转为多分类问题;如果归结为回归问题,对于某个 Query,则对文档与此 Query 的相关程度计算相关度 Score,这样就将问题归结为回归问题。应用 Pointwise 模型有 Subset Ranking、OC SVM、McRank、Prank 等。

Pointwise 算法实现简单,易于理解,但它只对给定 Query 单个文档的相关度进行建模,仅仅考虑了单个文档的绝对相关度,Pointwise 只学习到了文档和 Query 的全局相关性,对排序先后顺序有一定的影响。在某一些场景下,排在最前面的几个文档对排序结果的影响非常重要,如搜索引擎的第一页的内容非常重要,而 Pointwise 没有考虑这方面的影响,不对排序的先后顺序优劣做惩罚。

文档对方法

Pointwise 方法只考虑了单个文档和 Query 的绝对相关度,Pairwise 考虑的则是两个文档之间的相对相关度,比较不同文档的先后顺序。Pairwise 方法是目前比较流行的方法,它将整个排序问题转为二元分类问题,即构建的是一个二分类器,对一个文档对 做二分类,一类是 Doc1 排序前于 Doc2,另一类则相反,通过两两比较,模型可以学习到不同文档之间的先后顺序。应用 Pairwise 的模型有 Ranking SVM、RankBoost、RankNet、GBRank、IR SVM 等。

Pairwise 方法通过考虑两两文档之间的相关度来进行排序,有一定进步。但 Pairwise 使用的是两文档之间相关相关度的损失函数,而它和真正衡量排序效果的指标之间存在很大不同,甚至可能是负相关的,如可能出现 Pairwise Loss 越来越低,但 NDCG 分数也越来越低的现象。另外此方法只考虑了两个文档的先后顺序,且没有考虑文档在搜索列表中出现的位置,导致最终排序效果并不理想。

文档列表方法

Listwise 算法相对于 Pointwise 和 Pairwise 方法来说,它不再将排序问题转化为一个分类问题或者回归问题,而是直接针对评价指标对文档的排序结果进行优化,如常用的 MAP、NDCG 等。应用 Listwise 的模型有 ListNet、ListMLE、SVM MAP、AdaRank、SoftRank、LambdaRank、LambdaMART。其中 LambdaMART(对 RankNet 和 LambdaRank 的改进)在 Yahoo Learning to Rank Challenge 表现出最好的性能。

该方法特定Query,文档集合,输出所有文档的打分或者排列顺序。评价指标如 NDCG、MAP 等。由于此种方法是针对评价指标直接进行优化,所以它往往表现出不错的效果。

常用算法

pointwise常用算法ClassificationDiscriminative model for IR (SIGIR 2004)

McRank (NIPS 2007)

RegressionLeast Square Retrieval Function (TOIS 1989)

Regression Tree for Ordinal Class Prediction (Fundamenta Informaticae, 2000)

Subset Ranking using Regression (COLT 2006)

Ordinal ClassificationRanking with Large Margin Principles (NIPS 2002)

Constraint Ordinal Regression (ICML 2005)

Pairwise常用算法:Learning to Retrieve Information (SCC 1995)

Learning to Order Things (NIPS 1998)

Ranking SVM (ICANN 1999)

RankBoost (JMLR 2003)

LDM (SIGIR 2005)

RankNet (ICML 2005)

Frank (SIGIR 2007)

MHR(SIGIR 2007)

GBRank (SIGIR 2007)

QBRank (NIPS 2007)

MPRank (ICML 2007)

IRSVM (SIGIR 2006)

LambdaRank (NIPS 2006)

LambdaMART (inf.retr 2010)

Listwise常用算法:Measure-specific

AdaRank (SIGIR 2007)

SVM-MAP (SIGIR 2007)

SoftRank (LR4IR 2007)

RankGP (LR4IR 2007)

LambdaMART (inf.retr 2010)(也可以做Listwise)

Non-measure specific

ListNet (ICML 2007)

ListMLE (ICML 2008)

BoltzRank (ICML 2009)

训练数据生成

LTR相比点击率预估等,其特征构造上没什么区别,主要不同点在于如何构造标签,以及如果使用文档对儿或者文档列表的方式所需要的训练pair和list。

对于label来讲,通常有人工标注和从日志中获取两种方式,一般工业界大量数据是靠日志获取的,少量是人工标注生成的。

人工标注

这种方法被各大搜索引擎公司广为应用。人工标注即对抽样出来作为training data的query-doc pair人为地进行相关程度的判断和标注。一般标注的相关程度分为5档:perfect,excellent,good,fair,bad。例如,query=“Microsoft”,这时候,Microsoft的官网是perfect;介绍Microsoft的wikipedia则是excellent;一篇将Microsoft作为其主要话题的网页则是good;一篇只是提到了Microsoft这个词的网页则是fair,而一篇跟Microsoft毫不相关的网页则是bad。人工标注的方法可以通过多人同时进行,最后以类似投票表决的方式决定一个query-doc pair的相关程度,这样可以相对减少各个人的观点不同带来的误差。

通过日志获取

日志记录了人们在实际生活中的行为和相应的点击行为,点击行为实际上隐含了query-doc pair的相关性,所以可以被用来作为query-doc pair的相关程度的判断。一种最简单的方法就是利用同一个query下,不同doc的点击数的多少来作为它们相关程度的大小。相应同时出现在一个session的其他数据,或者随机采样的样本就可以做负例,构造pair或者list。

不过这里需要特别注意实际产生的log日志是有偏差的,比如位置偏差等。实际使用需要视情况考虑是否需要减小偏差。一些tricky的方式可以用来减小偏差:当位置靠后的doc的点击数都比位置靠前的doc的点击数要高了,那么靠后的doc的相关性肯定要比靠前的doc的相关性大。

Joachims等人则提出了一系列去除bias的方法,例如 Click > Skip Above, Last Click > Skip Above, Click > Earlier Click, Click > Skip Previous, Click > No Click Next等。

有个很tricky但是效果很不错的方法,之前我们说一个doc的点击数比另一个doc的点击数多,并不一定说明前者比后者更相关。但如果两者的差距大到一定程度了,即使前者比后者位置靠前,但是两者的点击数相差5-10倍,这时候我们还是愿意相信前者更加相关。当然这个差距的大小需要根据每个场景具体的调整。

position bias 存在的原因是,永远无法保证在一次搜索行为中,用户能够看到所有的结果,往往只看到前几位的结果。这时候就到了 Click Model大显身手的时候了,一系列的 Click Model 根据用户的点击信息对用户真正看到的doc进行“筛选”,进而能更准确地看出用户到底看到了哪些doc,没有看到哪些doc,一旦这些信息知道了,那么我们就可以根据相对更准确的 点击数/展示数(即展现CTR)来确定各个doc的相关性大小。

评价指标

L2R 评价指标主要有 NDCG、MAP、WTA、MRR 等,下面分别简单介绍一下。

NDCG

NDCG,全称为 Normalized Discounted Cumulative Gain,是一种综合考虑模型排序结果和真实序列之间的关系的一种指标,也是最常用的衡量排序结果的指标,NDCG 其实是由 DCG 的值计算出来的,分子为模型计算出的 DCG 值,分母则为理想情况下的 DCG 值,而 DCG 的计算公式如下:

NDCG其计算公式如下:

MAP

MAP,全称为 Mean Average Precision,即平均准确率。其定义是求每个相关文档检索出后的准确率的平均值(即Average Precision)的算术平均值(Mean)。这里对准确率求了两次平均,因此称为Mean Average Precision。对于每个真实相关的文档,考虑其在模型排序结果中的位置 P,统计该位置之前的文档集合的分类准确率,取所有这些准确率的平均值。

对于一个 Query,原本有 4 个相关结果,查询时将 4 个结果都查询出来了,其 rank 分别为 1, 2, 4, 7,则 MAP 为 (1/1 + 2/2 + 3/4 + 4/7)/4 = 0.83。对于另一个 Query,原本有 5 个相关结果,查询只有 3 个相关结果,其 rank 分别为 1, 3, 5,则 MAP 为 (1/1 + 2/3 + 3/5 + 0 + 0)/5 = 0.45。则 MAP = (0.83 + 0.45)/2 = 0.64。

WTA

WTA,全称 Winners Take All,对于给定的查询 Query,如果模型返回的结果列表中,第一个文档是相关的,则 WTA =1, 否则为 0。

如对于一个 Query,本来有 5 个相关结果,查询结果中如果第一个结果是相关的,那么 WTA = 1,如果第一个结果是不相关的,则 WTA = 0。

MRR

MRR,全称 Mean Reciprocal Rank,是把相关文档在结果中的排序倒数作为准确度,然后再取平均。

如对于第一个 Query,查询结果将正确结果排名 rank 为 3,则其 Reciprocal Rank 为 1/3,对于第二个 Query,查询结果将正确结果排名 rank 为 2,则其 Reciprocal Rank 为 1/2,对于第三个 Query,查询结果将正确结果排名 rank 为 1,则其 Reciprocal Rank 为 1,则 MRR = (1/3 + 1/2 + 1)/3 = 11/18 = 0.61。

ERR

ERR(Expected Reciprocal Rank)。ERR是受到cascade model的启发,即一个用户从上到下依次浏览doc,直至他找到一个满意的结果,ERR可以定义为:

NDCG和ERR指标的优势在于,它们对doc的相关性划分多个(>2)等级,而MRR和MAP只会对doc的相关性划分2个等级(相关和不相关)。并且,这些指标都包含了doc位置信息(给予靠前位置的doc以较高的权重),这很适合于web search。然而,这些指标的缺点是不平滑、不连续,无法求梯度,如果将这些指标直接作为模型评分的函数的话,是无法直接用梯度下降法进行求解的。

From RankNet to LambdaRank to LambdaMART

LambdaRank是基于RankNet的,而LambdaMart是LambdaRank的决策树版本。使用梯度下降来更新这几个模型是其核心思想。

RankNet

对RankNet来讲,对应的模型可以是任意的输出对模型的参数可导的模型(典型的是神经网络,也有决策树的):训练数据是以query来分割的

在训练的时候,RankNet将输入特征x映射到一个实数f(x)

对每个query,每个url对儿选择不一样的label,Ui和Uj,对应的特征为xi和xj,

上面的每个pair都输入模型,输出对应的得分,si=f(xi)和sj=f(xj)

用Ui>Uj表示Ui应该排在Uj前面,模型的两个输出使用sigmoid函数来映射成一个概率值

使用cross entropy作为损失函数

Sij取{-1,, 0, +1}中的一个,1代表Ui>Uj

RankNet的损失函数可以写成:

注意到当si=sj的时候,损失是log2,因此模型有个边界,对不同标签的文档,但是预估了同一个值得时候,模型仍然在ranking的时候将两者分开。

模型的导数是:

模型使用SGD更新:

Factoring RankNet: Speeding Up RankNet Training

上面的推导引出了factorization,这个重大发现引出了LambdaRank。

对给定的url对儿,Ui和Uj,

其中重复的项可以合并,令I代表pair {i, j}下标的集合,每个对儿只可能在I中出现一次,因此假设Ui>Uj是方便的,进而Sij=1,因为RankNet学习的是pair对序列的概率,因此不需要每个url都被标记,RankNet只需要I集合,也就是只需要pair对儿的偏好。因此:

其中,将lambda_ij组合起来:

我们可以视lambda为小的方向箭头或者是力,每个都绑定在一个url上,其方向代表了我们想让url移动的方向,大小就是我们想让其移动的多少。一个url的对应的lambda是由这个url参与的所有的pair计算的,相当于用了真实的梯度下降方向,对每个url进行累积所有的url对儿之后再更新,相当于mini-batch更新。用这种分解对RankNet来讲有非常大的速度提升。也为LambdaRank打下了基础。

LambdaRank

RankNet可以优化一些光滑的,近似凸的pairwise误差,但是对于其他的信息检索的度量就不适合了。直接写出期望的梯度,而不是从损失函数上推导是提出LambdaRank的重要思想之一。

LambdaRank的重要观察室为了训练模型,我们并不需要损失本身,而是仅仅需要梯度。

实验表明,将公式

乘以一个交换两个位置的Ui和Uj带来的NDCG的改变量,就能得到很好的效果:

虽然信息检索里面的度量是flat或者discontinuous的,LambdaRank的思想以另一种方式:计算两个url根据分值排序后的梯度来回避不可导的问题。其他的信息检索指标的优化类似,只是把上面公式里面 的NDCG换了而已。

LambdaMART

LambdaMART中的MART与之类似,可以参考xgboost或者LIghtGBM等。可以参考提升方法与GBDT以及LightGBM。

参考:

Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart https://www.cnblogs.com/bentuwuying/p/6690836.html

Learning to Rank for Information Retrieval. Tie-yan Liu.

Learning to Rank for Information Retrieval and Natural Language Processing. Hang Li.

A Short Introduction to Learning to Rank. Hang Li.

Optimizing Search Engines using Clickthrough Data. Thorsten Joachims. SIGKDD,2002.

From ranknet to lambdarank to lambdamart: An overview

欢迎关注我的订阅号:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值