Learning to Rank简介
机器学习有三大问题,分类、回归和排序。分类和回归之前了解了很多的算法,但排序还没有深入的了解过。
Learning to Rank
有很多种典型的应用。包括:
- document retrieval
- expert search
- definition search
- collaborative filtering
- question answering
- keyphrase extraction
- document summarization
- machine translation
这一长串下来,想必重要性不言而喻。话不多说,开始正题。
基本定义
了解一个算法,要从它的目标和数据开始。Ranking的基本流程如下:
给定一个query,得到一批文档。优化的目标自然就是相关性越高的文档排在前面越好。那么如何量化这个指标呢?有三种函数可以量化这个指标:
- DCG(Discount Cumulative Gain)
- NDCG(Normalized Discount Cumulaive Gain)
- MAP (Mean Average Precision)
先从DCG开始说,对于查询到的每一个样本来说,标注好的数据中它都会有一个评分,该评分也相当于类别,这个评分越高,表明这个样本越相关。DCG的基本思想就是排名越高的结果越相关那么DCG值就会越大。
DCG的公式表示,对于每次查询得到的结果排列,对于前k个结果中的每一个样本,计算一个总评分,该评分由两项相乘得到,G(j)与相关性有关,相关性越大,G(j)越大,而且是以指数级增长;D(pi(j))则和位置有关,位置越靠前,就越重要,以对数的倒数形式衰减。
NDCG是归一化后的DCG,它表示的是,对DCG进行归一化,使得相关性排序正好从高到低时,值为1。所以在此不赘述了
下面说说MAP,如下:
需要注意的是,MAP中,结果只有相关和不相关两种,即1和0。
P(j)表示,到位置j时,前j个结果中有多少相关的结果的比率。而AP的定义则表示,所有相关结果位置上的准确率的平均。而MAP则是,所有样本上AP值的平均。
在具体的算法中,上述的指标是无法直接优化的,只能采用各种各样的妥协,比如:
这三种都是1-NDCG的upper bound函数(这里我还没明白)。但这三种则代表了不同类型的妥协,第一种是pointwise的,因为在单个样本上计算损失。第二种是pairwise的,在成对的样本上计算损失。第三种是listwise的,因为直接在list上计算损失。
Pointwise方法
Pointwise方法包括:
- Subset Ranking
- McRank
- Prank
- OC SVM
以OC SVM为例,她是传统SVM的变形,通过增多偏移量的方式,实现多个分类面,从而达到分类的目的。
以最简单的线性分类器来看,传统的SVM计算分类面的方式是w·x+b,而OC SVM则是有多个b,从而构造了多个平行的分类面,如下所示:
反映在目标函数上就是:
Pairwise方法
pairwise方法包括:
- Ranking SVM
- RankBoost
- RankNet
- GBRank
- IR SVM
- Lambda Rank
- LambdaMART
Ranking SVM
通过把问题简化,变成判断两个样本先后的二分类问题:
反映在目标函数上就是:
IR SVM
Ranking SVM的简化方法导致该算法具有两个缺点:
- 没有区分不同相关性文档的重要程度
- 没有区分不同query间pair对的重要程度
为了解决这两个问题,对Hinge Loss做出了改进,对不同类型的pair进行加权。
反映在目标函数上就是:
加权的两个函数一个用来衡量不同相关性的样例,一个用来衡量不同query的样例。而加权的方法是采用先验方法来做。对于不同相关性的文档,要根据其相关性值来确定函数,对于不同query,根据该query产生的pair对的数目的倒数来加权。
Listwise方法
Listwise方法包括:
- ListNet
- ListMLE
- AdaRank
- SVM MAP
- SoftRank
以SVM MAP为例,对于一个query,查询到的样本会形成一个排列,该排列的得分可以用如下函数衡量:
而真正要优化的额函数,如下:
其中,E可以是NDCG或MAP。
对上面的函数进行转化,取它的upper bound。如下:
这里是upper_bound的原因是因为后面那个被乘项要么是负,要么是零。由此,本来该求最小值,也变成了求最大值。
然后还是不能继续优化,所以还得再做两个变换。
- 将0-1(不等号)函数转化:
- 因为
从而,问题就转化成了如下:
这样就变为了可以优化的问题。
未来的研究方向
- training data creation
- semi-supervised learning and active learning
- feature learning
- scalable and efficient training
- domain adaption and multi-task learning
- ranking by ensembel learning
- global ranking
- ranking of nodes in a graph
参考文献
[1]. Hang L I. A short introduction to learning to rank[J]. IEICE TRANSACTIONS on Information and Systems, 2011, 94(10): 1854-1862.
from: http://blog.csdn.net/stdcoutzyx/article/details/50879219
Learning to Rank简介相关推荐
- 【机器学习】Learning to Rank 简介
Learning to Rank 简介 去年实习时,因为项目需要,接触了一下Learning to Rank(以下简称L2R),感觉很有意思,也有很大的应用价值.L2R将机器学习的技术很好的应用到了排 ...
- Learning to Rank 简介
非常好的一篇总结Learning to Rank的总结文章! 转载自:http://www.cnblogs.com/kemaswill/archive/2013/06/01/3109497.html ...
- Learning to Rank 简介(转载)
Learning to rank(简写 LTR.L2R) 也叫排序学习,指的是机器学习中任何用于排序的技术. 目录 一.LTR引言 1.1 LTR的出现背景 1.2 LTR基本框架 二.训练数据的获取 ...
- lightGBM用于排序(Learning to Rank )
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx Learning to Rank 简介 去年实习时,因为项目需要,接触了一下Learning ...
- Learning to rank 小结
1.现有排序模型 排序(Ranking)一直是信息检索的核心研究问题,有大量的成熟的方法,主要可以分为以下两类:相关度排序模型和重要性排序模型. 1.1 相关度排序模型(Relevance Ranki ...
- Learning to Rank(LTR)
Learning to Rank(LTR) 声明: 本文主要参考Learning to Rank 简介.Learning to Rank小结文章. 另参考李航老师A short introductio ...
- Learning to Rank(LTR)(转)
Learning to RankLTR 声明 摘要 背景 排序学习系统框架 排序学习特征选择2 训练数据的获取3 人工标注 搜索日志 公共数据集 训练方法23 单文档方法Pointwise 文档对方法 ...
- 利用lightgbm做learning to rank 排序,解析模型中特征重要度
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 去年实习时,因为项目需要,接触了一下Learning to Rank(以下简称L2R),感觉很 ...
- Learning to Rank基于pairwise的算法(一)——Ranking SVM、MHR、IRSVM
1.概述 对于搜索任务来说,系统接收到用户查询之后,返回相关文档列表.所以问题的关键是确定文档之间的先后顺序,而pairwise则将重点转向对文档关系是否合理的判断. 在pairwise中,排序算法通 ...
最新文章
- 北方工业大学计算机科学与技术复试分数线,北方工业大学复试分数线
- JSON 序列化和反序列化——JavaScriptSerializer实现
- Yunyang tensorflow-yolov3 voc_train.txt以及voc_test.txt引用的路径位置
- 统计学习方法第四章课后习题(转载+重新排版+自己解读)
- python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法...
- mysqlfor循环中出错继续_Python学习笔记(循环)
- ug添加imachining变量_UG用的不够快?是不是还没建标准库
- python求组合数_求组合数的算法_Cppowboy's Blog - SegmentFault 思否
- (44)System Verilog 类中变量随机激励约束
- skimage io.imread
- java学生管理系统(简单版)
- 求解幂集问题(c语言+蛮力法)
- springboot整合J2cache简单使用
- Android编译预制过高版本app导致编译错误解决
- 跑步减肥的正确姿势与方法 不再担心女生跑步腿会变粗
- Gurub linux windows,windows10安装ubuntu双系统教程(绝对史上最详细)
- 帝国 loginjs.php,帝国CMS页面JS调用登录状态loginjs.php中获取会员头像的方法
- wps转换成word如何实现?不妨试试这两个小技巧
- 亚马逊账号关联的后果是什么
- android 尺寸转换工具,Android APP界面标注、尺寸换算和APP标注工具
热门文章
- RuoYi后台系统权限管理解析
- MAP(Mean Average Precision):
- 2015年你必须学习的编程语言和前端框架
- 实现主成分分析和白化
- 稀疏自编码器符号一览表
- Spring-AOP基础知识
- Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
- 学习笔记Spark(一)—— Spark入门
- gdb 版本和gcc版本的对应关系_GNU发布GDB新版本 10.1和 mtools 4.0.25
- 删除机器人 异星工厂_10个视频,它们是国内智能工厂的标杆