Learning to Rank系列之概述
背景
排序问题是信息检索、新闻推荐、自然语言处理等领域中一个非常热门的研究问题。以google搜索为例,比如你在搜索框内输入“machine learning”,回车之后google就会返回这样一个结果列表
简单介绍一下这个过程,我(用户)从google首页的搜索框输入“machine learning”(query),搜索引擎通过后台的算法,从一个非常大的网页候选集里召回了和这个query相关的网页,并且通过某些算法把召回的网页根据和query的相关度排好序,返回给我(用户)。如果一个query相关的网页只有非常少的几个,那么对于返回的结果排序的效果好坏甚至是否有排序其实影响并不大,但是当一个query相关的候选结果集非常大的时候,我们希望越相关的网页(文档)出现的位置越靠前,相关度低的网页(文档)出现在结果列表靠后的位置。
可以看到,和“machine learning”这个query相关的网页有639,000,000条,数量非常庞大,如果不对这些相关网页进行一个相关度的排序,那么我们获取相要的结果就会非常麻烦。于是Learning to Rank应运而生。
Learning to Rank(以下简称L2R)是一个有监督的学习方法,它将机器学习技术应用到排序问题中,通过有标注的样本来训练模型,最终解决排序问题。L2R方法主要分为三类:
- pointwise
- pairwise
- listwise
pointwise方法
pointwise方法是将排序问题转化为分类或者回归问题,如果是分类问题,可以用query和相关文档的特征,类别结果作为训练样本来得到模型参数;如果是回归问题,可以用文档和query的相关度得分作为样本来训练模型。为简单起见,我们以分类问题为例。
对于一个query,我们通过人工标注或者其它方法,得到与其相关的文档的一个类别(label),一般分为五类 { perfact,excellect,good,fair,bad },用5,4,3,2,1代表对应的类别,数值越大相关度越高。
- 输入: query以及每个文档的特征向量
- 输出: 每个文档的分类结果
- 损失函数: mse或者logloss
- 常见模型: Subset Ranking,PRank
pointwise方法通过优化损失函数求解最优的参数,可以看到pointwise方法非常简单,工程上也易实现,但是它只考虑单个文档同query的相关性,没有考虑文档间的关系,另外通过分类只是把不同的文档做了一个简单的区分,同一个类别里的文档则无法深入区别。还有,很多时候,排序结果的top k条的顺序重要性远比剩下全部顺序重要性要高,对于位置考前但是排序错误的文档应该加大惩罚。
pairwise方法
pairwise方法是当前比较流行的排序方法,它考虑两个文档的相对顺序,对于query召回的候选集里的文档,构造文档对样本 ⟨⟨\langle doc1, doc2 ⟩⟩ \rangle,如果doc1排在doc2之前,则记为一个正样本,label为1,反之为负样本,label为-1,通过两两比较之后对文档进行排序。在构造训练样本时,我们设想能有一个函数 fff ,对于文档对 ⟨" role="presentation" style="position: relative;">⟨⟨\langle doc1, doc2 ⟩⟩ \rangle,如果doc1在doc2前面,那么关于两个文档的特征向量 x1,x2x1,x2x_1,x_2,满足 f(x1)>f(x2)⟹f(x1)−f(x2)>0f(x1)>f(x2)⟹f(x1)−f(x2)>0f(x_1)\gt f(x_2)\Longrightarrow f(x_1)-f(x_2)\gt 0,反之 f(x1)−f(x2)<0f(x1)−f(x2)<0f(x_1)-f(x_2)\lt 0。
因此我们可以根据这一假设来构造模型,首先想到的自然是最简单的线性模型,f(x)=ωT⋅x+bf(x)=ωT⋅x+bf(x) = \omega^{T}\cdot x +b,比较两个文档的顺序我们可以利用线性模型来判断,
f(x_1)-f(x_2) = \omega^{T}\cdot x_1 +b - \omega^{T}\cdot x_2 -b = \omega ^{T} \cdot (x_1-x_2)
上式可转化为:
f(x_1-x_2)=\omega^{T}\cdot (x_1-x_2) + b
我们用 {+1,−1}{+1,−1}\{+1,-1\} 表示模型输出结果
- 输入: query和文档对特征向量 ⟨x1,x2⟩⟨x1,x2⟩\langle x_1,x_2\rangle
- 输出: 文档对相对顺序判断结果 {+1,−1}{+1,−1}\{+1,-1\}
- 损失函数: 分类loss
- 常见模型: Ranking SVM、RankBoost、RankNet、GBRank、IR SVM
Pairwise 方法通过考虑两两文档之间的相关对顺序来进行排序,相比pointwise方法有明显改善。但 Pairwise 方法仍有如下问题:
- 使用的是两文档之间相关度的损失函数,而它和真正衡量排序效果的指标之间存在很大不同,甚至可能是负相关的,如可能出现 Pairwise Loss 越来越低,但 NDCG 分数也越来越低的现象。
- 只考虑了两个文档的先后顺序,且没有考虑文档在搜索列表中出现的位置,导致最终排序效果并不理想。
- 不同的查询,其相关文档数量差异很大,转换为文档对之后,有的查询可能有几百对文档,有的可能只有几十个,模型会优先考虑文档对数量多的查询,减少这些查询的loss,最终对机器学习的效果评价造成困难。
Listwise方法
Listwise 算法相对于 Pointwise 和 Pairwise 方法来说,它不再将排序问题转化为一个分类问题或者回归问题,而是直接针对评价指标对文档的排序结果进行优化,如常用的 MAP、NDCG 等。
- 输入: query和整个文档列表的特征
- 输出: 所有文档的打分或者排列顺序
- 损失函数: 评价指标如 NDCG、MAP
- 常见模型: ListNet、ListMLE、SVM MAP、AdaRank、SoftRank、LambdaRank、LambdaMART
评价指标
L2R 的评价指标主要有 MAP、NDCG、WTA、MRR 等,这里逐个介绍一下
1、MAP
MAP(Mean Average Precision):单个主题的平均准确率是同主题内每篇相关文档检索出后的准确率的平均值。主集合的平均准确率(MAP)是每个主题的平均准确率的平均值。MAP 是反映系统在全部相关文档上性能的单值指标。系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高。如果系统没有返回相关文档,则准确率默认为0。
例如:假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7;对于主题2检索出3个相关网页,其rank分别为1,3,5。对于主题1,平均准确率为(1/1+2/2+3/4+4/7)/4=0.83。对于主题2,平均准确率为(1/1+2/3+3/5+0+0)/5=0.45。则MAP= (0.83+0.45)/2=0.64
2、NDCG
NDCG(Normalized Discounted Cumulative Gain):计算相对复杂。对于排在结位置n处的NDCG的计算公式如下图所示:
在MAP中,四个文档和query要么相关,要么不相关,也就是相关度非0即1,。而NDCG中对此有了一些优化,相关度从0到r共r+1个等级,当r=4时,如下图。
Relevance Rating | Value(Gain) |
---|---|
Perfect | 15=24−115=24−115=2^4-1 |
Excellent | 7=23−17=23−17=2^3-1 |
Good | 3=22−13=22−13=2^2-1 |
Fair | 1=21−11=21−11=2^1-1 |
Bad | 0=20−10=20−10=2^0-1 |
假设现在有一个query={ abc },返回下图左列的Ranked List(URL),当假设用户的选择与排序结果无关(即每一级都等概率被选中),则生成的累计增益值如下图最右列所示
Id | URL | Gain | Cumulative Gain |
---|---|---|---|
1 | http://abc.go.com/ | 15 | 15 |
2 | http://www.abcteach.com/ | 3 | 18=15+3 |
3 | http://abcnews.go.com/section/scitech/ | 7 | 25=15+3+7 |
4 | http://www.abc.net.au/ | 7 | 32=15+3+7+7 |
5 | http://abcnews.go.com/ | 7 | 39=15+3+7+7+7 |
6 | … | … | … |
但是现实中,用户往往会优先点击排序考前的搜索结果,所以我们引入一个折算因子(discounting factor),log(2)/log(1+rank),加上折算因子后如下
Id | URL | Gain | Discounted Cumulative Gain |
---|---|---|---|
1 | http://abc.go.com/ | 15 | 15 |
2 | http://www.abcteach.com/ | 3 | 16.89=15+3*log(2)/log(1+2) |
3 | http://abcnews.go.com/section/scitech/ | 7 | 20.39=16.89+7*log(2)/log(1+3) |
4 | http://www.abc.net.au/ | 7 | 23.4=20.39+7*log(2)/log(1+5) |
5 | http://abcnews.go.com/ | 7 | 26.13=23.4+7*log(2)/log(1+5) |
6 | … | … | … |
为了使不同等级上的搜索结果的得分值容易比较,需要将DCG值归一化的到NDCG值。操作如下图所示,首先计算理想返回结果List的DCG值:
Id | URL | Gain | Max DCG |
---|---|---|---|
1 | http://abc.go.com/ | 15 | 15 |
2 | http://abcnews.go.com/section/scitech/ | 7 | 19.41=15+7*log(2)/log(1+2) |
3 | http://www.abc.net.au/ | 7 | 22.91=19.41+7*log(2)/log(1+3) |
4 | http://abcnews.go.com/ | 7 | 25.92=22.91+7*log(2)/log(1+4) |
5 | http://www.abcteach.com/ | 3 | 27.09=25.92+3*log(2)/log(1+5) |
6 | … | … | … |
然后用DCG/MaxDCG就得到NDCG值,如下图所示:
Id | URL | Gain | DCG | Max DCG | NDCG |
---|---|---|---|---|---|
1 | http://abc.go.com/ | 15 | 15 | 15 | 1=15/15 |
2 | http://www.abcteach.com/ | 3 | 16.89 | 19.41 | 0.87=16.89/19.41 |
3 | http://abcnews.go.com/section/scitech/ | 7 | 20.39 | 22.91 | 0.89=20.39/22.91 |
4 | http://www.abc.net.au/ | 7 | 23.4 | 25.92 | 0.9=23.4/25.92 |
5 | http://abcnews.go.com/ | 7 | 26.13 | 27.09 | 0.96=26.13/27.09 |
6 | … | … | … |
3、MRR
MRR(Mean Reciprocal Rank):是把标准答案在被评价系统给出结果中的排序取倒数作为它的准确度,再对所有的问题取平均。相对简单,举个例子:有3个query如下图所示:
Query | Results | Correct response | Rank | Reciprocal Rank |
---|---|---|---|---|
cat | catten, cati, cats | cats | 3 | 1/3 |
torus | torii, tori, toruses | tori | 2 | 1/2 |
virus | viruses, virii, viri | viruses | 1 | 1/1 |
故这个系统的MRR值为:(1/3+1/2+1/1)/3=11/18
4、WTA
WTA,全称 Winners Take All,对于给定的查询 Query,如果模型返回的结果列表中,第一个文档是相关的,则 WTA =1, 否则为 0。
如对于一个 Query,本来有 5 个相关结果,查询结果中如果第一个结果是相关的,那么 WTA = 1,如果第一个结果是不相关的,则 WTA = 0。
参考资料:
1、http://kubicode.me/2016/02/15/Machine%20Learning/Learning-To-Rank-Base-Knowledge/
2、https://www.cnblogs.com/eyeszjwang/articles/2368087.html
3、https://blog.csdn.net/yuhushangwei/article/details/48547151
Learning to Rank系列之概述相关推荐
- Learning to Rank系列之Pointwise方法
上一篇综述文章 里我们简单介绍了L2R三种方法的一个概要,接下来将对这三种方法做详细介绍.本篇文章介绍第一种L2R方法–pointwise方法 1.原理 pointwise方法非常简单,考虑的是文档 ...
- 利用lightgbm做learning to rank 排序,解析模型中特征重要度
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 去年实习时,因为项目需要,接触了一下Learning to Rank(以下简称L2R),感觉很 ...
- lightGBM用于排序(Learning to Rank )
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx Learning to Rank 简介 去年实习时,因为项目需要,接触了一下Learning ...
- 学习排序 Learning to Rank:从 pointwise 和 pairwise 到 listwise,经典模型与优缺点
Ranking 是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块.本文将对结合机器学习的 ranking 技术--learning2rank--做个系统整理,包括 pointwise.pair ...
- Learning to Rank基于pairwise的算法(一)——Ranking SVM、MHR、IRSVM
1.概述 对于搜索任务来说,系统接收到用户查询之后,返回相关文档列表.所以问题的关键是确定文档之间的先后顺序,而pairwise则将重点转向对文档关系是否合理的判断. 在pairwise中,排序算法通 ...
- Learning to Rank 的实践
1 背景介绍 排序问题(Ranking)是信息检索领域的核心问题,如文档索引,协同过滤等.Learning to rank(LTR) 也叫 Machine-learned ranking,指的就是用机 ...
- Learning to Rank : ListNet与ListMLE
目录 前言 ListNet Methodology Probability Construction ListMLE Methodology Probability Construction 前言 在 ...
- 排序学习(Learning to rank)综述
本文收录在推荐系统专栏,专栏系统化的整理推荐系统相关的算法和框架,并记录了相关实践经验,所有代码都已整理至推荐算法实战集合(hub-recsys). 一:背景介绍 在互联网搜索诞生之初,检索模型所依赖 ...
- 论文笔记 DNorm: disease name normalization with pairwise learning to rank
一.动机 疾病词的标准化是一个非常复杂的任务,疾病词通常是由希腊和拉丁的词根和词缀构造的,比如hemochromatosis(血色素沉着病).另一种灵活的疾病词创建方式是疾病分类(disease ca ...
最新文章
- ASimpleCache 轻量级缓存
- oauth2 增加token 返回参数_一张图搞定OAuth2.0
- matlab 高斯一阶导,将Matlab高斯导数转换为Opencv
- 开源纯C#工控网关+组态软件(六)图元组件
- sharepoint 2013基于AD的Form表单登录(三)——选择用户时,屏蔽掉AD。
- SAP License:MR22借贷物料一步设置可以把差异带走
- Python之对字符串切片
- 西安电子科技大学计算机科学与技术就业,西安电子科技大学:除了计算机和通信工程,这些专业高考也很热门,毕业照样拿高薪...
- 学术论文的英文文献,国内外有哪些网站可以找得到?
- 安卓手机重启日志_一加手机CM12安卓5.0版非官方尝鲜版刷机方法介绍【教程】...
- 佳文分享:CAP定理
- 文件监控脚本 -- Linux bash
- Android 选择商品属性sku
- 《程序员脱发指南》--饮食篇
- 全地形爆破赛小车的制作分享
- TCP和UDP的区别有哪些
- 【学习笔记】stm32+ESP8266+阿里云+云智能APP
- Java 海康SDK透明通道建立(485透传)
- #1文献学习总结---移动边缘计算
- 达内 Java 全套教程 NPM、PYPI、DockerHub 备
热门文章
- 常见的前端大厂ui库
- python做词典_真·0基础自学python(字典)
- 小数点化分数的过程_《分数和小数的互化》的教案
- 运用project 2007来管理项目
- Win10 svchost进程一直下载的解决方法
- Android Studio翻译strings.xml为多国语言
- ffmpeg php 抠像_利用 Avisynth 2.5.8 的 ColorKeyMask 功能实现视频抠像
- Android 12适配安全组件导出设置`android:exported` 指定显式值”
- 【自监督论文阅读笔记】Efficient Visual Pretraining with Contrastive Detection
- 软件测试培训分享:软件测试就业前景怎么样