LTR(Learning to Rank)学习排序已经被广泛应用到文本挖掘、搜索推荐系统的很多领域,比如IR中排序返回的相似文档,推荐系统中的候选产品召回、用户排序等,机器翻译中排序候选翻译结果等等。

排序学习是搜索推荐系统、计算广告领域的核心方法。同时排序结果的好坏,在搜索推荐任务中很大程度直接影响用户点击、转化、用户体验和收入等。

在《推荐系统技术演进趋势:重排篇》一文中,作者张俊林介绍了在重排环节,推荐系统里Learning to Rank做排序,我们知道常见的有三种优化目标:Point Wise、Pair Wise和List Wise。最简单的损失函数定义是Point-wise,就是输入用户特征和单个物品特征,对这个物品进行打分,物品之间的排序,就是谁应该在谁前面,不用考虑。而Pair-wise损失在训练模型时,直接用两个物品的顺序关系来训练模型,就是说优化目标是物品A排序要高于物品B,类似这种优化目标。 List-wise的Loss更关注整个列表中物品顺序关系,会从列表整体中物品顺序的角度考虑,来优化模型。

上面我们对Point-wise、Pair-wise、List-wise这三种方式,做了一个简单的介绍。但Permutation-wise是什么呢?其实,十方同学在《排序(rank)后重排(re-rank)》一文中,为我们介绍了Permutation-wise的文章,文章中给出了一个真实的案例,如下图。

这个图给了个真实的案例,一个User,给他展示了A、B、C就不会买任何item,给他展示了B、A、C就后购买A。

论文《Revisit Recommender System in the Permutation Prospective》给了个例子,如果把贵的商品B放前面,用户就会觉得A便宜,值得购买。好像很有道理,所以我们看到,如果是list-wise的模型给排好序的的B->A->C分别预估一个分(0.38, 0.40, 0.36),然后按照这个分重排序,就会得到A->B->C,用户就不会购买了。

如果我们提供多个候选排列队列: A->B->CB->A->C,然后把list-wise的分加起来,得到不同排列的分,那就会得到最优解,B->A->C。但是一般情况下,需要重排序的item可能有上百个,上百个item做排列,再过list-wise模型预估,这是不现实的,于是论文提出了两阶段的重排序框架PRS(Permutation Retrieve System),分别是PMatch阶段和PRank阶段,整体架构如下图所示:

关于具体PMatch和PRank的细节,感兴趣的可以直接阅读《排序(rank)后重排(re-rank)》一文。

Pair-wise的方法是将同一个查询中两个不同的Item作为一个样本,主要思想是把rank问题转换为二值分类问题。对于同一Query的相关文档集中,对任何两个不同label的文档,都可以得到一个训练实例(di,dj),如果di>dj则赋值+1,反之-1,于是我们就得到了二元分类器训练所需的训练样本了。

常用Pair-wise实现有SVMRank、RankBoost、RankNet等。

  • 输出空间中样本是 pairwise preference;
  • 假设空间中样本是二变量函数;
  • 输入空间中样本是同一 query 对应的两个 doc和对应 query构成的两个特征向量;
  • 损失函数评估 doc pair 的预测 preference 和真实 preference 之间差异;
  • 只考虑了两篇文档的相对顺序,没有考虑他们出现在搜索结果列表中的位置;即:Pair-wise方法仅考虑了doc-pair的相对位置,损失函数还是没有模型到预测排序中的位置信息;
  • 对于不同的查询相关文档集的数量差异很大,转换为文档对后,有的查询可能只有十几个文档对,而有的查询可能会有数百个对应的文档对,这对学习系统的效果评价带来了偏置;
  • Pair-wise对噪声标注更敏感,即一个错误标注会引起多个doc-pair标注错误;

Point-wise排序是将训练集中的每个Item看作一个样本获取rank函数,主要解决方法是把分类问题转换为单个item的分类或回归问题。就是输入用户特征和单个Item特征,对这个物品进行打分,物品之间的排序,就是谁应该在谁前面,不用考虑。Point-wise方法很好理解,即使用传统的机器学习方法对给定查询下的文档的相关度进行学习,比如CTR就可以采用PointWise的方法学习,但是有时候排序的先后顺序是很重要的,而Point-wise方法学习到全局的相关性,并不对先后顺序的优劣做惩罚。

明显这种方式无论是训练还是在线推理,都非常简单直接效率高,但是它的缺点是没有考虑物品直接的关联,而这在排序中其实是有用的。

常用Point-wise实现基于回归的算法、基于分类的算法、基于有序回归的算法等。

  • 使用传统的机器学习方法对给定查询下的文档的相关度进行学习;
  • 输入空间中样本是单个document和对应query构成的特征向量;
  • 输出空间中样本是单个documen和对应query的相关度;
  • 假设空间中样本是打分函数,损失函数评估单个 doc 的预测得分和真实得分之间差异。
  • Point-wise类方法并没有考虑同一个query对应的documents间的内部依赖性,完全从单文档的分类角度计算,没有考虑文档之间的相对顺序;
  • 和Pair-wise类似,损失函数也没有模型到预测排序中的Position位置信息;

List-wise排序是将整个item序列看作一个样本,通过直接优化信息检索的评价方法和定义损失函数两种方法来实现。它是直接基于评价指标的算法非直接基于评价指标的算法。在推荐中,List-wise损失函数因为训练数据的制作难,训练速度慢,在线推理速度慢等多种原因,尽管用的还比较少,但是因为更注重排序结果整体的最优性,所以也是目前很多推荐系统正在做的事情。

和其他X-wise方法比较,List-wise方法往往更加直接,它专注于自己的目标和任务,直接对文档排序结果进行优化,因此往往效果也是最好的。Listwise常用方法有AdaRank、SoftRank、LambdaMART、LambdaRank等。

  • 输入空间中样本是同一query对应的所有documents构成的多个特征向量;
  • 输出空间中样本是这些documents和对应query的相关度排序列表或者排列;
  • 假设空间中样本是多变量函数,对于documents得到其排列,实践中,通常是一个打分函数,根据打分函数对所有documents的打分进行排序得到documents相关度的排列;
  • listwise 类相较 pointwise、pairwise 对 ranking 的 model 更自然,解决了 ranking 应该基于 query 和 position 问题。
  • 一些ranking算法需要基于排列来计算 loss,从而使得训练复杂度较高,如 ListNet和 BoltzRank。
  • 位置信息并没有在loss中得到充分利用,可以考虑在ListNet和ListMLE loss中引入位置折扣因子。

Learning to Rank:X-wise

更多干货,请关注公众号:炼丹笔记

Learning to Rank:X-wise相关推荐

  1. 学习排序 Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点

    Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块.本文将对结合机器学习的 ranking 技术--learning2rank--做个系统整理,包括 pointwise.pair ...

  2. Learning to Rank入门小结 + 漫谈

    Learning to Rank入门小结 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 特征抽取 3.1 人工标注 3.2 搜索日志 3.3 公共数据集 5 模型 ...

  3. Learning to Rank(转)

    https://blog.csdn.net/kunlong0909/article/details/16805889 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 ...

  4. Learning to Rank算法介绍:RankSVM 和 IR SVM

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

  5. Learning to Rank算法介绍:GBRank

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

  6. 搜索系统中的Learning To Rank模型:GBRank

    搜索系统中的Learning To Rank模型:GBRank FesianXu 20220326 at Baidu Search Team 前言 Learning To Rank(LTR)模型是对搜 ...

  7. 【排序算法】Learning to Rank(二):Pairwise之RankSVM 和 IR SVM

    之前的文章:[排序算法]Learning to Rank(一):简介 中简单介绍了Learning to Rank的基本原理,也讲到了Learning to Rank的几类常用的方法:pointwis ...

  8. 用 XGBoost 做 Learning To Rank

    说到learning to rank,大家应该都比较熟悉,但是说到用XGB做learning to rank,很少有人实现过.举个例子,比方说赛马,我们可以基于马的个头,体重,历史战绩等信息,建立XG ...

  9. 论文笔记 DNorm: disease name normalization with pairwise learning to rank

    一.动机 疾病词的标准化是一个非常复杂的任务,疾病词通常是由希腊和拉丁的词根和词缀构造的,比如hemochromatosis(血色素沉着病).另一种灵活的疾病词创建方式是疾病分类(disease ca ...

最新文章

  1. linux resin mysql_Linux下Resin JSP MySQL的安装和配置-2
  2. 携程数据库高可用架构实践
  3. 如何将hive与mysql连接_hive连接mysql配置
  4. sentinel里的双检锁
  5. android引入开源项目方法,和解决android-support-v4.jar冲突问题
  6. 如何识别图片中的文字
  7. PHP网站加功能,如何实现添加分类的功能
  8. 【原创】Java移位运算
  9. 源代码分析工具推荐Understand
  10. Oracle Data Recovery Advisor(DRA) 数据恢复顾问
  11. java图书管理系统(MySQL)
  12. 2021年认证杯-数学建模
  13. 跨实例查询 mysql_SQL语句怎么搞定跨实例查询?
  14. 数据大屏产品介绍PPT_精品推荐 | 产品介绍、公司宣传、解决方案 | 可编辑PPT(收藏)...
  15. 小学教育专业语文方向毕业论文怎么选题?
  16. Attributes as Operators
  17. xp桌面图标阴影解决方案
  18. 成都市中小学计算机创客,我校荣获2019四川省中小学电脑制作活动机器人暨创客竞赛团体一等奖...
  19. Dojo 1.6 官方教程:Dojo中的事件
  20. EXPDP、IMPDP规范及常用技巧总结

热门文章

  1. fabricjs 高级篇(自定义类型)
  2. 静默安装Azure CLI
  3. CentOS 6.5 升级 PHP 到5.6
  4. 将数字转化为电话号码(忽略全局属性)
  5. Javascript 面向对象编程定义接口的一种方法
  6. Javascript基础回顾 之(一) 类型
  7. ASP.NET多语言网页设计
  8. oracle dbms overflow,Oracle DBA课程系列笔记(12_1)
  9. Ubuntu16.04系统运行VINS-Mono(安装、环境配置)
  10. 主线程如何等待多线程完成 返回数据_多线程基础体系知识清单