以前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to Rank的几类经常使用的方法:pointwise,pairwise,listwise。这篇博客就不少公司在实际中一般使用的pairwise的方法进行介绍,首先咱们介绍相对简单的 RankSVM 和 IR SVM。html
RankSVM的基本思想是,将排序问题转化为pairwise的分类问题,而后使用SVM分类模型进行学习并求解。函数
对于一个query-doc pair,咱们能够将其用一个feature vector表示:x。而排序函数为f(x),咱们根据f(x)的大小来决定哪一个doc排在前面,哪一个doc排在后面。即若是f(xi) > f(xj),则xi应该排在xj的前面,反之亦然。能够用下面的公式表示:学习
理论上,f(x)能够是任意函数,为了简单起见,咱们假设其为线性函数:。优化
若是这个排序函数f(x)是一个线性函数,那么咱们即可以将一个排序问题转化为一个二元分类问题。理由以下:lua
首先,对于任意两个feature vector xi和 xj,在f(x)是线性函数的前提下,下面的关系都是存在的:spa
而后,即可以对xi和 xj的差值向量考虑二元分类问题。特别地,咱们能够对其赋值一个label:3d
将排序问题转化为分类问题以后,咱们即可以使用经常使用的分类模型来进行学习,这里咱们选择了Linear SVM,一样的,能够经过核函数的方法扩展到 Nonlinear SVM。orm
以下面左图所示,是一个排序问题的例子,其中有两组query及其相应的召回documents,其中documents的相关程度等级分为三档。而weight vector w对应了排序函数,能够对query-doc pair进行打分和排序。htm
而下面右图则展现了如何将排序问题转化为分类问题。在同一个组内(同一个query下)的不一样相关度等级的doc的feature vector能够进行组合,造成新的feature vector:x1-x2,x1-x3,x2-x3。一样的,label也会被从新赋值,例如x1-x2,x1-x3,x2-x3这几个feature vector的label被赋值成分类问题中的positive label。进一步,为了造成一个标准的分类问题,咱们还须要有negative samples,这里咱们就使用前述的几个新的positive feature vector的反方向向量做为相应的negative samples:x2-x1,x3-x1,x3-x2。另外,须要注意的是,咱们在组合造成新的feature vector的时候,不能使用在原始排序问题中处于相同类似度等级的两个feature vector,也不能使用处于不一样query下的两个feature vector。blog
转化为了分类问题后,咱们即可以使用SVM的通用方式进行求解。首先咱们能够获得下面的优化问题:
经过将约束条件带入进原始优化问题的松弛变量中,能够进一步转化为非约束的优化问题:
加和的第一项表明了hinge loss,第二项表明了正则项。primal QP problem较难求解,若是使用通用的QP解决方式则费时费力,咱们能够将其转化为dual problem,获得一个易于求解的形式:
而最终求解获得相应的参数后,排序函数能够表示为:
因而,RankSVM方法求解排序问题的步骤总结起来,以下图所示:
上面介绍的RankSVM的基本思想是,将排序问题转化为pairwise的分类问题,而后使用SVM分类模型进行学习并求解。因此其在学习过程当中,是使用了0-1分类损失函数(虽然其实是用的替换损失函数hinge loss)。而这个损失函数的优化目标跟Information Retrieval的Evaluation经常使用指标(不只要求各个doc之间的相对序关系正确,并且尤为重视Top的doc之间的序关系)仍是存在gap的。因此有研究人员对此进行了研究,经过对RankSVM中的loss function进行改造从而使得优化目标更好地与Information Retrieval问题的经常使用评价指标相一致。
首先,咱们经过一些例子来讲明RankSVM在应用到文本排序的时候遇到的一些问题,以下图所示。
第一个问题就是,直接使用RankSVM的话,会将不一样类似度等级的doc同等看待,不会加以区分。这在具体的问题中又会有两种形式:
1)Example 1中,3 vs 2 和 3 vs 1的两个pair,在0-1 loss function中是同等看待的,即它们其中任一对的次序的颠倒对loss function的增长大小是同样的。而这显然是不合理的,由于3 vs 1的次序颠倒显然要比 3 vs 2的次序的颠倒要更加严重,须要给予不一样的权重来区分。
2)Example 2中,ranking-1是position 1 vs position 2的两个doc的位置颠倒了,ranking-2是position 3 vs position 4的两个doc的位置颠倒了,这两种状况在0-1 loss function中也是同等看待的。这显然也是不合理的,因为IR问题中对于Top doc尤为重视,ranking-1的问题要比ranking-2的问题更加严重,也是须要给予不一样的权重加以区分。
第二个问题是,RankSVM对于不一样query下的doc pair同等看待,不会加以区分。而不一样query下的doc的数目是很不同的。如Example 3所示,query-4的doc书目要更多,因此在训练过程当中,query-4下的各个doc pair的训练数据对于模型的影响显然要比query-3下的各个doc pair的影响更大,因此最终结果的模型会有bias。
IR SVM针对以上两个问题进行了解决,它使用了cost sensitive classification,而不是0-1 classification,即对一般的hinge loss进行了改造。具体来讲,它对来自不一样等级的doc pair,或者来自不一样query的doc pair,赋予了不一样的loss weight:
1)对于Top doc,即类似度等级较高的doc所在的pair,赋予较大的loss weight。
2)对于doc数目较少的query,对其下面的doc pair赋予较大的loss weight。
IR SVM的优化问题能够表示以下:
其中,表明了隶属于第k档grade pair的instance的loss weight值。这个值的肯定有一个经验式的方法:对隶属于这一档grade pair的两个doc,随机交换它们的排序位置,看对于NDCG@1的减小值,将全部的减小值求平均就获得了这个loss weight。能够想象,这个loss weight值越大,说明这个pair的doc对于总体评价指标的影响较大,因此训练时候的重要程度也相应较大,这种状况通常对应着Top doc,这样作就是使得训练结果尤为重视Top doc的排序位置问题。反之亦然。
而这个参数则对应了query的归一化系数。能够表示为
,即该query下的doc数目的倒数,这个很好理解,若是这个query下的doc数目较少,则RankSVM训练过程当中相对重视程度会较低,这时候经过增长这个权重参数,能够适当提升这个query下的doc pair的重要程度,使得模型训练中可以对不一样的query下的doc pair重视程度至关。
IR SVM的优化问题以下:
一样地,也须要将其转化为dual problem进行求解:
而最终求解获得相应的参数后,排序函数能够表示为:
因而,IR SVM方法求解排序问题的步骤总结起来,以下图所示:
版权声明:
本文由笨兔勿应全部,发布于http://www.cnblogs.com/bentuwuying。若是转载,请注明出处,在未经做者赞成下将本文用于商业用途,将追究其法律责任。