Learning to Rank,即排序学习,简称为 L2R,它是构建排序模型的机器学习方法,在信息检索、自然语言处理、数据挖掘等场景中具有重要的作用。其达到的效果是:给定一组文档,对任意查询请求给出反映文档相关性的文档排序。本文简单介绍一下 L2R 的基本算法及评价指标。

背景

随着互联网的快速发展,L2R 技术也越来越受到关注,这是机器学习常见的任务之一。信息检索时,给定一个查询目标,我们需要算出最符合要求的结果并返回,这里面涉及一些特征计算、匹配等算法,对于海量的数据,如果仅靠人工来干预其中的一些参数来进行排序的话,是远远不能达到要求的,而 L2R 算法就是用来解决这种问题的,L2R 将机器学习的技术很好地应用到了排序中,并提出了一些新的理论和方法,有效解决了排序的问题,而且效率上相比人工干预也有了几个数量级的飞跃。

L2R 算法

L2R 算法主要包括三种类别:Pointwise、Pairwise、Listwise,下面分别进行介绍。

1. Pointwise

Pointwise 将问题转化为多分类或回归问题。如果归结为多分类问题,对于某个 Query,对文档与此 Query 的相关程度打标签,标签分为有限的类别,这样就将问题转为多分类问题;如果归结为回归问题,对于某个 Query,则对文档与此 Query 的相关程度计算相关度 Score,这样就将问题归结为回归问题。

模型

应用 Pointwise 模型有 Subset Ranking、OC SVM、McRank、Prank 等。

输入

特定的 Query,文档的特征向量。

输出

文档与 Query 的标签类别或相关性分数。

损失函数

回归 Loss、分类 Loss、有序回归 Loss。

优缺点

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

2. Pairwise

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

模型

应用 Pairwise 的模型有 Ranking SVM、RankBoost、RankNet、GBRank、IR SVM 等。

输入

特定 Query,文档对 <Doc1, Doc2>。

输出

文档对偏向得分,{-1, 1}。

损失函数

Pairwise 分类 Loss。

优缺点

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

3. Listwise

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 等。

优缺点

由于此种方法是针对评价指标直接进行优化,所以它往往表现出不错的效果。

评价指标

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

1. NDCG

NDCG,全称为 Normalized Discounted Cumulative Gain,是一种综合考虑模型排序结果和真实序列之间的关系的一种指标,也是最常用的衡量排序结果的指标,其计算公式如下:

$$ \mathrm{NDCG@K} = \frac{DCG}{iDCG} $$

NDCG 其实是由 DCG 的值计算出来的,分子为模型计算出的 DCG 值,分母则为理想情况下的 DCG 值,而 DCG 的计算公式如下:

$$ \mathrm{DCG@K} = \sum_{i=1}^{k}{\frac {{2^{r(i)}-1}}{\log_{2}{(i+1)}}} $$

在 DCG 的表达式中,$\sum_{i=1}^{k}$ 是求和累积,${r(i)}$ 表示在模型给出的排序中,排名为 i 的元素的实际分数,这里通过 ${2^{r(i)}-1}$ 运算放大了其分数的差异,$\log_{2}{(i+1)}$ 是每个元素的折价,由于排序靠前的元素被选取的概率更大,所以这里可以使得排名前面的元素影响权重更大。

2. MAP

MAP,全称为 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。

3. WTA

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

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

4. 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。

参考资料

芝麻HTTP: Learning to Rank概述的更多相关文章

  1. Learning to Rank:Point-wise、Pair-wise 和 List-wise区别

    机器学习的 ranking 技术——learning2rank,包括 pointwise.pairwise.listwise 三大类型. [Ref-1]给出的: <Point wise rank ...

  2. Learning to Rank:pointwise, pairwise, listwise 总结

    值得看: 刘铁岩老师的<Learning to Rank for Information Retrieval>和李航老师的<Learning to rank for informat ...

  3. 推荐排序---Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点

    转载:https://blog.csdn.net/lipengcn/article/details/80373744 Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块. 本文将 ...

  4. Learning to rank 介绍

    PS:文章主要转载自CSDN大神hguisu的文章"机器学习排序":          http://blog.csdn.net/hguisu/article/details/79 ...

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

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

  6. learning to rank

    Learning to Rank入门小结 + 漫谈 Learning to Rank入门小结 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 特征抽取 3.1 人工 ...

  7. Learning to Rank 简介

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

  8. 【模式识别】Learning To Rank之RankBoost

    RankBoost的思想比較简单,是二元Learning to rank的常规思路:通过构造目标分类器,使得pair之间的对象存在相对大小关系.通俗点说,把对象组成一对对的pair,比方一组排序r1& ...

  9. Learning To Rank之LambdaMART前世今生

    1.       前言 我们知道排序在非常多应用场景中属于一个非常核心的模块.最直接的应用就是搜索引擎.当用户提交一个query.搜索引擎会召回非常多文档,然后依据文档与query以及用户的相关程度对 ...

随机推荐

  1. 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

    从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了, ...

  2. 一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

    在做RabbitCloud(之前是一个RPC,现在是一个微服务框架)的时候往往避不开客户端代理,之前把这些客户端代理都算作服务框架不可缺少的一部分,随着后期的深入发现这些客户端代理其实可以互通,类似s ...

  3. 关于http与https之间的区别

    年前的时候进行了一家公司的电话面试两轮,视频面试一轮(已拿到offer),过程中遇到了一个关于http与https的问题,当时回答的并不好,今天将其进行了总结和整理,望读者喜欢: 前言 谷歌在2018 ...

  4. Python数据分析学习-re正则表达式模块

    正则表达式 为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式(简称为 regex)是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于 ...

  5. window.location的路径

    1 相对路径 window.location.href='add_affiche.php'; 或 window.location.href='./add_affiche.php'; 2 绝对路径 wi ...

  6. 在tableViewCell的点击事件中处理界面跳转问题

    UIViewController *controller; UIView *view = self.view; while (1) { controller = (UIViewController * ...

  7. ORACLE数据库SQL优化 not in 与not exits

    各个表的数据量: sys_file_convert_queue 65989sys_att_file 73061sys_att_main 84405sys_att_rtf_data 1507 优化前,执 ...

  8. Thinkpad USB 经典键盘使用体验

    先上图,这就是一个键盘,不是笔记本电脑. 优点: 1. 键盘完胜各类巧克力式键盘. 2. 小红点和老thinkpad 上的小红点一样好用. 3. ESC 和Delete 放大后,盲摸很方便. 缺点: ...

  9. Spring 中出现Element : property Bean definitions can have zero or more properties. Property elements correspond to JavaBean setter methods exposed by the bean classes. Spring supports primitives, refer

    在这个ApplicationContext.xml文件中出现 如下报错 Element : property Bean definitions can have zero or more proper ...

  10. CNN 卷积层输入Map大小计算

    对于输出的size计算: out_height=((input_height - filter_height + padding_top+padding_bottom)/stride_height ) ...