(排序)是搜索引擎最核心的一个模块。在搜索引擎中,对于用户输入一条查询 query (关键词 / 句),搜索引擎将索引出一个相关的 document (文档)列表,然后系统计算( query, document )之间的相关度,对列表中的文档进行排序,并返回给用户。传统的 rank 有很多经典的模型来完成这一任务,比如 bool model (布尔模型), VSM (向量空间模型), language model (语言模型) 等,这些方法都比较简单,任何一本 IR 的书籍都有介绍。

      然而,现在的搜索引擎使用的rank算法都比较复杂,一般都有上百维的feature(特征)组成,常用的一个公式(ListNet使用这种形式)如下:

y=w0+∑i=1..n wi×xi 

其中,xi为第i维的feature分值,wi为xi的权重,y为最后的总得分。

      既然是这样的话,如果有了每个feature,自然Xi就定好了,但是权重wi怎么调是个问题,不少搜索引擎还是根据经验来人工调整,如果参数较多的话,这也比较困难。于是,人们就很自然想到用机器学习来解决这个问题。机器学习最主要的一个功能说白了就是训练出模型,模型定了的话,就是训练模型的参数,即训练出一个和训练语料误差最小(loss function)的参数。总结一下,learning to rank就是使用机器学习的方法来解决rank的模型调优。

      这样的话,就有两个问题:1、选特征;2、将排序问题转化为适用于机器学习解决的分类或者回归问题。首先说下特征,就拿微软研究院公开的一个learning to rank datasets中提到的feature来看一下吧(http://research.microsoft.com/en-us/projects/mslr/feature.aspx)末尾我也列出来了(看到了吧,传统的rank模型只是其中的一个feature),每一个也比较好懂,如果你是内行,那应该可以略过;如果不是,那google一下,看些相应的paper就懂了。其实这些feature也是现在的搜索引擎最常用的,大家也在开发一些新的feature,比如现在社交网络中出现的或者分享的url的hot与否,也可以作为一个feature,等等。

      下面看第2个问题,将排序问题转化为适用于机器学习解决的分类或者回归问题,首先说下,排序问题的语料标注,每一个query对应与其相关的文档集合为:{d1, d2,…, dn},然后每个文档di有一个与该query的标注结果label,一般分为五个类别{Perfect, Excellent, Good, Fair, Bad}。有如下三种方法:

1、Pointwise

Pointwise方法的主要思想是将排序问题转化为多类分类问题或者回归问题,也就是将(query,di)的标注结果(一般五个类别)作为一个类别。这就有个假设,就是query独立的,即只要(query, document)的相关度相同,比如都为“perfect”,那么它们就被放在同一个类别里,即属于同一类的实例,而无论query是什么。这种方法比较简单,效果也不是很好。实现Pointwise方法有McRank。

2、Pairwise

Pairwise方法的主要思想是将排序问题转化为二元分类问题。对于同一个query,在它的所有相关文档集里,对任两个不同label的文档,都可以得到一个训练实例对,比如说是(d1,d2)分别对应label为5和3,那么对于这个训练实例对,给它赋予类别+1(5>3),反之则赋予类别-1。于是,按照这种方式,我们就得到了二元分类器训练所需的样本了。该方法不再是query独立的,因为它只对同一个query里的文档集生成训练样本的。但是它也有缺点,比如说query1对应的相关文档集大小为6,query2的相关文档集大小为1000,那么从后者构造的训练样本数远远大于前者,从而使得分类器对相关文档集小的query所产生的训练实例区分不好。实现Pairwise方法有RankSVM,还有RankNet,FRank和RankBoost等。

3、Listwise

Listwise方法的主要思想是直接对排序结果进行优化。对于一个给定的query,以及其对应的document list,现在已经得到了一个标注好的分数列表z(例如,每个文档的点击率等)。然后采用某种排序函数f给每个document打分,得到一个预测排序得分列表y,然后再采用某种损失函数计算loss(ListNet采用交叉熵),ListNet中使用得分的概率分布为:

搜索引擎排序指标 搜索引擎的排序算法_文档

然后将z和y(y是使用文章开始时候提到的那个线性函数表示)带入交叉熵公式(L(y,z)= -∑Py×logPz)中作为损失函数来用来学习参数。实现Listwise方法有ListNet,RankCosine,SVM-MAP等。

 

搜索引擎排序指标 搜索引擎的排序算法_搜索引擎排序指标_02