Learning to Rank学习笔记3:The Listwise Approach

Listwise是对query下的整个文档集合进行排序。Listwise的算法大致可以分为两种,一种是直接想办法去优化NDCG、MAP这些评价指标,另一种是去自定义优化损失函数。NDCG与MAP这些基于排序位置来计算的指标是不连续、不可微的。第一种方法是想办法将这些评价指标转化为连续可微的近似指标,然后去优化。在这里我们介绍第二种方法中的ListNet算法。ListNet的损失函数是用这种排列下的概率分布来定义的。使用的概率分布是Plackett–Luce model。

假设一共有m篇文档,π代表一种排列方式,s代表一种打分函数。则有该排列方式出现的概率为

代表文档被排在第j位置的分数,是一种转换函数,可以为线性指数或者sigmoid形式。

观察后面的式子,含义可以看作,一个文档有可能排在1-m各个位次,该式是这个文档排在第j位的概率。将所有位置的文档排列在该位置的概率乘起来,就是这个排列出现的概率。

书中指到,plackett-luce模型在一定条件下具有尺度不变性和平移不变性。例如,当我们使用指数函数作为转换函数时,在将相同的常数添加到所有排名分数之后,plackett–luce模型定义的排列概率分布将不会改变。当我们使用线性函数作为转换函数时,所有的排名分数乘以相同的常数后,排列概率分布不会改变。这些特性与我们的对排名的直觉相近。

在这个概率定义以后,用KL散度或者交叉熵来衡量某排列与ground truth的差异。

书中提到,这样计算出的损失函数与真实的NDCG损失是相关性很强的,可以看作是一种不错的替代。由于排列组合的多样性,该算法在完整排列上应用起来计算量很大,所以一般只计算TOP-K的出现概率。

怎么老是吞字,服了。。。

Pointwise的不足之处:

Pointwise使用传统的分类,回归或者OrdinalRegression来对给定query下的单个文档的相关度进行建模,没有文档位置对排序结果的影响,而回归和分类的损失函数会尽量拟合所有的数据,算法为了整体损失最小,有可能把排在前面的文档的损失变得更大,或者把排在后面的文档的损失变得更小,从而导致排序难以取得良好的效果。

Pairwise的不足:

文档较多时,pair的数目是平方级增长的,计算量太大;Pair对不同级别之间的区分度一致对待,没有对排在前面的结果作更好的区分。对于搜索引擎而言,用户更倾向于点击前几页的结果;相关文档集大小带来模型的偏置。如果一个query下文档远多于另一query,支持向量就会向该query偏置,导致分类器对后者区分不好。

个人感觉ListNet由于计算量以及数据准备困难的问题,线上应该比较难实现.lambdaMART考虑到了排序位置的因素,某种意义上也算是一种Listwise算法,而且可以直接调包,应该是线上最常见的一种排序算法。

你可能感兴趣的:(Learning to Rank学习笔记3:The Listwise Approach)