Learning to Rank:X-wise
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->C和B->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相关推荐
- 学习排序 Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点
Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块.本文将对结合机器学习的 ranking 技术--learning2rank--做个系统整理,包括 pointwise.pair ...
- Learning to Rank入门小结 + 漫谈
Learning to Rank入门小结 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 特征抽取 3.1 人工标注 3.2 搜索日志 3.3 公共数据集 5 模型 ...
- Learning to Rank(转)
https://blog.csdn.net/kunlong0909/article/details/16805889 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 ...
- Learning to Rank算法介绍:RankSVM 和 IR SVM
之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...
- Learning to Rank算法介绍:GBRank
之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...
- 搜索系统中的Learning To Rank模型:GBRank
搜索系统中的Learning To Rank模型:GBRank FesianXu 20220326 at Baidu Search Team 前言 Learning To Rank(LTR)模型是对搜 ...
- 【排序算法】Learning to Rank(二):Pairwise之RankSVM 和 IR SVM
之前的文章:[排序算法]Learning to Rank(一):简介 中简单介绍了Learning to Rank的基本原理,也讲到了Learning to Rank的几类常用的方法:pointwis ...
- 用 XGBoost 做 Learning To Rank
说到learning to rank,大家应该都比较熟悉,但是说到用XGB做learning to rank,很少有人实现过.举个例子,比方说赛马,我们可以基于马的个头,体重,历史战绩等信息,建立XG ...
- 论文笔记 DNorm: disease name normalization with pairwise learning to rank
一.动机 疾病词的标准化是一个非常复杂的任务,疾病词通常是由希腊和拉丁的词根和词缀构造的,比如hemochromatosis(血色素沉着病).另一种灵活的疾病词创建方式是疾病分类(disease ca ...
最新文章
- linux resin mysql_Linux下Resin JSP MySQL的安装和配置-2
- 携程数据库高可用架构实践
- 如何将hive与mysql连接_hive连接mysql配置
- sentinel里的双检锁
- android引入开源项目方法,和解决android-support-v4.jar冲突问题
- 如何识别图片中的文字
- PHP网站加功能,如何实现添加分类的功能
- 【原创】Java移位运算
- 源代码分析工具推荐Understand
- Oracle Data Recovery Advisor(DRA) 数据恢复顾问
- java图书管理系统(MySQL)
- 2021年认证杯-数学建模
- 跨实例查询 mysql_SQL语句怎么搞定跨实例查询?
- 数据大屏产品介绍PPT_精品推荐 | 产品介绍、公司宣传、解决方案 | 可编辑PPT(收藏)...
- 小学教育专业语文方向毕业论文怎么选题?
- Attributes as Operators
- xp桌面图标阴影解决方案
- 成都市中小学计算机创客,我校荣获2019四川省中小学电脑制作活动机器人暨创客竞赛团体一等奖...
- Dojo 1.6 官方教程:Dojo中的事件
- EXPDP、IMPDP规范及常用技巧总结
热门文章
- fabricjs 高级篇(自定义类型)
- 静默安装Azure CLI
- CentOS 6.5 升级 PHP 到5.6
- 将数字转化为电话号码(忽略全局属性)
- Javascript 面向对象编程定义接口的一种方法
- Javascript基础回顾 之(一) 类型
- ASP.NET多语言网页设计
- oracle dbms overflow,Oracle DBA课程系列笔记(12_1)
- Ubuntu16.04系统运行VINS-Mono(安装、环境配置)
- 主线程如何等待多线程完成 返回数据_多线程基础体系知识清单