LTR方法小结

Apr 25, 2024
2 views
Search&Rec

Learning to rank

排序学习是推荐、搜索、广告的核心方法。排序结果的好坏很大程度影响用户体验、广告收入等。排序学习可以理解为机器学习中用户排序的方法,这里首先推荐一本微软亚洲研究院刘铁岩老师关于LTR的著作,Learning to Rank for Information Retrieval,书中对排序学习的各种方法做了很好的阐述和总结。我这里是一个超级精简版。

排序学习是一个有监督的机器学习过程,对每一个给定的查询-文档对,抽取特征,通过日志挖掘或者人工标注的方法获得真实数据标注。然后通过排序模型,使得输入能够和实际的数据相似。常用的排序学习分为三种类型:PointWise,PairWise和ListWise。

PointWise

单文档方法的处理对象是单独的一篇文档,将文档转换为特征向量后,机器学习系统根据从训练数据中学习到的分类或者回归函数对文档打分,打分结果即是搜索结果

image

PointWise方法很好理解,即使用传统的机器学习方法对给定查询下的文档的相关度进行学习,比如CTR就可以采用PointWise的方法学习,但是有时候排序的先后顺序是很重要的,而PointWise方法学习到全局的相关性,并不对先后顺序的优劣做惩罚。

缺陷:

1、ranking 追求的是排序结果,并不要求精确打分,只要有相对打分即可。
2、pointwise 类方法并没有考虑同一个 query 对应的 docs 间的内部依赖性。一方面,导致输入空间内的样本不是 IID 的,违反了 ML 的基本假设,另一方面,没有充分利用这种样本间的结构性。其次,当不同 query 对应不同数量的 docs 时,整体 loss 将会被对应 docs 数量大的 query 组所支配,前面说过应该每组 query 都是等价的。
3、损失函数也没有 model 到预测排序中的位置信息。因此,损失函数可能无意的过多强调那些不重要的 docs,即那些排序在后面对用户体验影响小的 doc。
4、query间doc的不平衡,如query1对应500个文档,query2对应10个文档。

PairWise

对于搜索系统来说,系统接收到用户査询后,返回相关文档列表,所以问题的关键是确定文档之间的先后顺序关系。单文档方法完全从单个文档的分类得分角度计算,没有考虑文档之间的顺序关系。文档对方法将排序问题转化为多个pair的排序问题,比较不同文章的先后顺序。

在pairwise方法中排序模型\(h_\theta\) 让正确的回答的得分明显高于错误的候选回答。给一个提问,pairwise给定一对候选回答学习并预测哪一个句子才是提问的最佳回答。训练的样例为\((q_i,c_i^+,c_i^-)\), 其中\(q_i\)

为提问, \(c_i^+\)为正确的回答,\(c_i^-\) 为候选答案中一个错误的回答。

损失函数为合页损失函数:

image

其中 m 为边界阀值。如果 \(h_\theta(q_i,c_i^+)-h_\theta(q_i,c_i^-)<m\) 损失函数 \(L\) 大于0,当满足这个不等式的时候,意味着模型把非正确的回答排在正确答案的上面;如果 \(L\) 等于0,模型把正确的回答排在非正确的回答之上。用另一种方式解释就是,如果正确的答案的得分比错误句子的得分之差大于 \(m\)\(h_\theta(q_i,c_i^+)-h_\theta(q_i,c_i^-) \geq m\)),总之合页损失函数的目的就是促使正确答案的得分比错误答案的得分大于 \(m\) 。和pairwise类似,在预测阶段得分最高的候选答案被当作正确的答案。

缺陷:

1、doc pair 的数量将是 doc 数量的二次,从而 pointwise 方法存在的 query 间 doc 数量的不平衡性将在 pairwise 类方法中进一步放大。
2、pairwise 方法相对 pointwise 方法对噪声标注更敏感,即一个错误标注会引起多个 doc pair 标注错误。
3、pairwise 方法仅考虑了 doc pair 的相对位置,损失函数还是没有 model 到预测排序中的位置信息。
4、pairwise 方法也没有考虑同一个 query 对应的 doc pair 间的内部依赖性,即输入空间内的样本并不是 IID 的,违反了 ML 的基本假设,并且也没有充分利用这种样本间的结构性。

常用PairWise实现:

  1. SVM Rank
  2. RankNet(2007)
  3. RankBoost(2003)

ListWise:

pariwise和pointwise忽视了一个事实就是答案选择就是从一系列候选句子中的预测问题。在listwise中单一训练样本就:query和它的所有候选回答句子。在训练过程中给定提问数据\(q_i\)和它的一系列候选句子\(C(c_{i1},c_{i2},...,c_{im})\) 和标签\(Y(y_{i1},y_{i2},...,y_{im})\) ,归一化的得分向量 $ S$ 通过如下公式计算:

\[ Score_j=h_\theta(q_i,c_{ij})\\ S = softmax(Score_1, Score_2,...,Score_m) \]

标签的归一化方法为:

\[ Y=\frac{Y}{\sum_{j=1}^{m}y_{ij}} \]

训练的目标可以为最小化\(S\)\(Y\) 的KL散度。

Listwise常用方法有AdaRank,SoftRank,LambdaMART等。

Listwise方法相比于pariwise和pointwise往往更加直接,它专注于自己的目标和任务,直接对文档排序结果进行优化,因此往往效果也是最好的。