0%

理解Learning to Rank算法

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

image

1. LTR的流程

  • Collect Training Data (Queries and their labeled documents)
  • Feature Extraction for Query-document Pairs
  • Learning the Ranking Model by Minimizing a Loss Function on the Training Data
  • Use the Model to Answer Online Queries

2. 训练数据的获取

有2种获取训练数据的来源:1)人工标注;2)搜索日志。

  • 1) 人工标注

从搜索日志中随机选取一部分Query,让受过专业训练的数据评估员对”Query-Url对”给出相关性判断。常见的是5档的评分:差、一般、好、优秀、完美。以此作为训练数据。人工标注是标注者的主观判断,会受标注者背景知识等因素的影响。

  • 2) 搜索日志

使用点击日志的偏多。比如,结果ABC分别位于123位,B比A位置低,但却得到了更多的点击,
那么B的相关性可能好于A。

  • 3) 公开数据集

现存一批公开的数据集可以使用

3. 特征提取(特征工程)

搜索引擎会使用一系列特征来决定结果的排序。

feature可以分为:

  • Doc本身的特征:Pagerank、内容丰富度、是否是spam等
  • Query-Doc的特征:文本相关性、query和doc共现的词在文档/查询中出现的次数等

此阶段就是要抽取出所有的特征,供后续训练使用。(一般是最耗时间和最影响模型结果的步骤)

4. 模型

常用的排序学习分为三种类型:PointWise,PairWise和ListWise。

PointWise

输入:单独的一篇文档

过程:文档->特征向量->模型得到回归/分类结果

输出:根据模型得到的文档的score;然后根据score排序。

优点:
速度快,复杂度低.

缺点:
效果一般
没有考虑到文档之间的相对关系
忽略了文档相关度与查询的关联,比如Top Query排在后面的相关性比Tial Query排在前面的都要高,导致训练样本不一致

PairWise

对于搜索任务来说,系统接收到用户查询后,返回相关文档列表,所以问题的关键是确定文档之间的先后相对顺序关系,
而Pairwise则将重点转向对文档关系是否合理的判断.

虽然Pairwise方法对Pointwise方法做了改进,但是也明显存在两个问题:

  • 只考虑了两个文档的先后顺序,没有考虑文档出现在搜索列表中的位置
  • 不同的查询,其相关文档数量差异很大,转换为文档对之后,有的查询可能有几百对文档,有的可能只有几十个,最终对机器学习的效果评价造成困难

ListWise

与Pointwise和Pairwise不同,Listwise是将一个查询对应的所有搜索结果列表作为一个训练实例,因此也称为文档列方法.

5. 模型评估

  • MAP

MAP(Mean Average Precision)表示文档在排序中的平均精度均值,是用于衡量个query查询见过的平均精度值AP,
系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高。如果系统没有返回相关文档,则准确率默认为0。

  • NDCG

NDCG表示表示归一化折损累积增益,主要是衡量实际相关性越高的文档排在越前面

5. 综述

搜索引擎时敲定特征分的权重是非常疼的一件事儿,而LTR正好帮你定分,LTR的三种实现方法其实各有优劣:

  • 难点主要在训练样本的构建(人工或者挖日志),另外就是训练复杂
  • 虽说Listwise效果最好,pointwise使用还是比较多,参考这篇文章综述LTR体验下
  • 在工业界用的比较多的应该还是Pairwise,因为他构建训练样本相对方便,并且复杂度也还可以,所以Rank SVM就很火

结合ES和LTR

https://github.com/o19s/elasticsearch-learning-to-rank

参考

参考资料-1

参考资料-2