Ranking是信息检索领域的基本问题,也是搜索引擎背后的重要组成模块。本文将对结合机器学习的ranking技术——learning2rank——做个系统整理,包括pointwise、pairwise、listwise三大类型,它们的经典模型,解决了什么问题,仍存在什么缺陷。关于一些扩展话题和具体应用,可能会在下一篇文章介绍,包括在QA领域的实践情况。
本文主要参考刘铁岩老师的<Learning to Rank for Information Retrieval>和李航老师的<Learning to rank for information retrieval and natural language processiing>
1、概述
1.1 Ranking
Ranking模型可以粗略分为基于相关度和基于重要性进行排序的两大类。
早期基于相关度的模型,通常利用query和doc之间的词共现特性(如布尔模型)、VSM(如TFIDF、LSI等)、概率排序思想(BM25、LMIR)等方式
基于重要性的模型,利用的是doc本身的重要性,如PageRank、TrustRank等
相关度的标注
1.最流行也相对好实现的一样方式时,人工标注MOS,即相关度等级。
2.其次是,人工标注pairwise preference, 即一个doc是否相对另一个doc与该query更相关
3.最costly的方式是,人工标注docs与query的整体相关度排序。
评估指标
即评估query与docs之间的真实排序与预测排序的差异。
大部分评估指标都是针对每组query-docs进行定义,然后再在所有组上进行平均。常用的基于度量的ranking错误率如下
.MAP
首先,suppose we have binary judgment for the documents, i.e., the label is one for relevant documents and zero for irrelevant documents,定义docs 排序列表 π 中位置 k 的 precision 为
其次,令m为该query对应的docs数量,m_1为该query对应的标签为1的docs数量,则有average precision(AP)为
最后,对所有 query 求得 AP 进行平均,即得到 MAP。
.NDCG
首先,Discounted cumulative gain (DCG)考量了relevance judgment in terms of multiple ordered categories,以及对位置信息进行了折扣考量。定义docs排序列表π中位置k的DCG为
其中,函数G是对应doc的rating值,通常采用指数函数,如G(x)=2^x-1,函数η即位置折扣因子,通常采用η(j)=1/log(j+1)。
其次,对DCG@k 进行归一化,规整到0-1,Z_k表示DCG@k的可能最大值,从而有NDCG
可以发现,这些评估指标具备两大特性:
1.基于query,即不管一个query对应的docs排序有多糟糕,也不会严重影响整体的评价过程,因为每组query-docs对平均指标都是相同的贡献。
2.基于position,即显示的利用了排序列表中的位置信息,这个特性的副作用就是上述指标是离散不可微的。
一方面,这些指标离散不可微,从而没法应用到某些学习算法模型上;另一方面,这些评估指标较为权威,通常用来评估基于各类方式训练出来的ranking模型。因此,即使某些模型提出新颖的损失函数构造方式,也要受这些指标启发,符合上述两个特性才可以。这些细节在后面会慢慢体会到。
1.2 Learning to Rank
Learning2Rank即将ML技术应用到ranking问题,训练ranking模型。通常这里应用的是判别式监督ML算法。经典L2R框架如下
. 特征向量x反映的是某query及其对应的某doc之间的相关性,通常前面提到的传统ranking相关度模型都可以用来作为一个维度使用。
.L2R中使用的监督机器学习方法主要是判别式类
根据上图的基本元素(输入空间、假设空间、输出空间、损失函数)方面的差异,L2R可以分为三大类,pointwise类,pairwise类,listwise类。总结如下,后面章节将进行详细说明。
2、Pointwise Approach
2.1特点
Pointwise类方法,其L2R框架具有以下特征:
- 输入空间中样本是单个doc(和对应query)构成的特征向量
- 输出空间中样本是单个doc(和对应query)的相关度;
- 假设空间中样本是打分函数;
- 损失函数评估单个doc的预测得分和真实得分之间的差异。
这里讨论下,关于人工标注标签怎么转换到pointwise类方法的输出空间:
1.如果标注直接是相关度s_j,则doc x_j的真实标签定义为y_j=s_j
2.如果标注是pairwise preference s_{u,v},则doc x_j的真实标签可以利用该doc击败了其他docs的频次
3.如果标注是整体排序 π,则doc x_j的真实标签可以利用映射函数,如将doc的排序位置序号当作真实标签
根据使用的ML方法不同,pointwisek类可以进一步分为三类:基于回归的算法、基于分类的算法、基于有序回归的算法。下面详细介绍。
2.2 基于回归的算法。
此时,输出空间包含的是实值相关度得分。
采用ML中传统的回归方法即可
2.3 基于分类的算法
此时,输出空间包含的是无序类别。
对于二分类,SVM 、LR等均可;对于多分类,提升树等均可。
2.4 基于有序回归的算法。
此时,输出空间包含的是有序类别。
通常是找一个打分函数,然后用一系列閥值对得分进行分割,得到有序类别。采用PRanking、基于margin的方法都可以。
2.5 缺陷
回顾概述中提到的评估指标应该基于query和position,
- ranking追求的是排序结果,并不要求精准打分,只要有相对打分即可。
- pointwise类方法并没有考虑同一个query对应的docs间的内部依赖性,一方面,导致输入空间内的样本不是ID的,违反了ML的基本假设,另一方面,没有充分利用这种样本间的结构性。其次,当不同query对应不同数量的docs时,整体loss将会对对应docs数量大的query组所支配,前面说过应该每组query都是等价的。
- 损失函数也没有model到预测排序中的位置信息。因此,损失函数可能无意的过多强调那些不重要的docs,即那些排序在后面对用户体验影响小的doc.
2.6 改进
Pointwise类算法也可以再改进,比如在loss中引入基于query的正则化因子的RankCosine方法。
3.、Pairwise Approach
3.1 特点
- Pairwise类方法,其L2R框架具有以下特征。
- 输入空间中样本是(同一query对应的)两个doc(和对应query)构成的两个特征向量。
- 输出空间中样本是pairwise preference
- 假设空间中样本是二变量函数
- 损失函数评估doc pair的预测preference和真实preference之间差异。
这里讨论下,关于人工标注标签怎么转换到pairwise和真实preference之间差异。
2.6 改进
Pointwise类算法也可以再改进,比如在loss中引入基于query的正则化因子的RankCosine方法。
3、Pairwise Approach
3.1 特点
Pairwise类方法,其L2R框架具有以下特征。
输入空间中样本是(同一query对应的)两个doc(和对应query)构成的两个特征向量
输出空间中样本是pairwise preference
假设空间中样本是二变量函数
损失函数评估doc pair的预测preference和真实preference之间差异
这里讨论下,关于人工标注标签怎么转换到pairwise类方法的输出空间:
1.如果标注直接是相关度s_j,则doc pair(x_u,x_v)的真实标签定义为 y_{u,v}=2*I_{s_u>s_v}-1
2.如果标注是pairwise preference s_{u,v},则doc pair(x_u,x_v) 的真实标签定义为y_{u,v}=s_{u,v}
3.如果标注是整体排序π,则doc pair(x_u,x_v)的真实标签定义为y_{u,v}=2*I_{π_u,π_v}-1
3.2 基于二分类的算法
pairwise类方法基本就是使用二分类算法即可
经典的算法有基于NN的sortNet,基于NN的RankNet,基于fidelity loss的FRank,基于adaBoost的RabkBoost,基于SVM的RankingSVM,基于提升树的GBRank.
3.3缺陷
虽然pairwise类相较pointwise类model到一些doc pair间的相对顺序信息,但还是存在不少问题,回顾概述中提到的评估指标应该基于query和position
- 如果人工标注给定的是第一种和第三种,即已包含多有序类别,那么转换为pairwise preference时必定会损失一些更细粒度的相关度标注信息。
- doc pair的数量将是doc数量的二次,从而pointwise类方法就存在的query间doc数量的不平衡性将在pairwise类方法中进一步放大。
- pairwise类方法相对pointwise类方法对噪声标注更敏感,即一个错误标注会引起多个doc pair标注错误。
- pairwise类方法仅考虑了doc pair的相对位置,损失函数还是没有model到预测排序中的位置信息。
- pairwise类方法也没有考虑同一个query对应的doc pair间的内部依赖性,即输入空间内的样本并不是ID的,违反了ML的基本假设,并且也没有充分利用这种样本间的结构性。
3.4 改进
pairwise类方法也有一些尝试,去一定程度解决上述缺点,比如:
Multiple hyperplane ranker,主要针对前述第一个缺陷
magnitude-preserving ranking,主要针对前述第一个缺陷
IRSVM,主要针对前述第二个缺陷
采用 Sigmoid 进行改进的 pairwise 方法,主要针对前述第三个缺陷
P-norm push,主要针对前述第四个缺陷
Ordered weighted average ranking,主要针对前述第四个缺陷
LambdaRank,主要针对前述第四个缺陷
Sparse ranker,主要针对前述第四个缺陷
4、Listwise Approach
4.1特点
Listwise类方法,其L2R框架具有以下特征:
输入空间中样本是(同一query对应的)所有doc(与对应的query)构成的多个特征向量(列表)
输出空间中样本是这些doc(和对应query)的相关度排序列表或者排列
假设空间中样本是多变量函数,对于docs得到其排列,实践中,通常是一个打分函数,根据打分函数对所有docs的打分进行排序得到docs相关度的排列。
损失函数分成两类,一类是直接和评价指标相关的,还有一类不是直接相关的,具体后面介绍。
这里讨论下,关于人工标注标签怎么转换到listwise类方法的输出空间:
1、如果标注直接是相关度s_j,则doc set的真实标签可以利用相关度s_j进行比较构造出排列
2.如果标注是pairwise preference s_{u,v},则doc set的真实标签也可以利用所有s_{u,v}进行比较构造出排列
3.如果标注是整体排序π,则doc set则可以直接得到真实标签
根据损失函数构造方式的不同,listwise类可以分成两类直接基于评价指标的算法,间接基于评价指标的算法。下面详细介绍。
4.2 直接基于评论指标的算法。
直接取优化ranking的评价指标,也算是listwise中哦最直观的方法。但这并不简单,因为前面说过评价指标都是离散不可微的,具体处理方式有这么几种:
- 优化基于评价指标的ranking error的连续可微的近似,这种方法就可以直接应用已有的优化方法,如SoftRank,ApproximateRank,SmoothRank
- 优化基于评价指标的ranking error的连续可微的上界,如SVM-MAP,SVM-NDCG,PermulRank,
- 使用可以优化非平滑目标函数的优化技术,如AdaRank,RankGP
上述方法的优化目标都是直接和ranking的评价指标有关。现在来考虑一个概念,informativeness.通常认为一个更有信息量的指标,可以产生更有效的排序模型。而多层评价指标(NDCG)相较二元评价(AP)指标通常更富信息量。因此,有时虽然使用信息量更少的指标来评估模型,但仍然可以使用更富信息量的指标来作为loss进行模型训练。
4.3 非直接基于评价指标的算法。
这里,不再使用和评价指标相关的loss来优化模型,而是设计能衡量模型输出与真实排序之间差异的loss,如此获得的模型在评价指标上也能获得不错的性能。
经典的如,ListNet,ListMLE,StructRank,BoltzRank.
4.4 缺陷
listwise类相较pointwise、pairwise对ranking的model更自然,解决了ranking应该基于query和position问题。
listwise类存在的主要缺陷是:一些ranking算法需要基于排序来计算loss,从而使得训练复杂度较高,如ListNet和BoltzRank.此外,位置信息并没有在loss中得到充分利用,可以考虑在ListNet和ListMLE的loss中引入位置折扣因子。
5、总结
实际上,前面介绍完,可以看出来,这三大类方法主要区别在于损失函数。不同的损失函数知音了不同的模型学习过程和输入输出空间。