Learning to Rank简介

Learning to Rank是采用机器学习算法,经过训练模型来解决排序问题,在Information Retrieval,Natural Language Processing,Data Mining等领域有着不少应用。算法

 

1. 排序问题

如图 Fig.1 所示,在信息检索中,给定一个query,搜索引擎会召回一系列相关的Documents(经过term匹配,keyword匹配,或者semantic匹配的方法),而后便须要对这些召回的Documents进行排序,最后将Top N的Documents输出。而排序问题就是使用一个模型 f(q,d)来对该query下的documents进行排序,这个模型能够是人工设定一些参数的模型,也能够是用机器学习算法自动训练出来的模型。如今第二种方法愈来愈流行,尤为在Web Search领域,由于在Web Search 中,有不少信息能够用来肯定query-doc pair的相关性,而另外一方面,因为大量的搜索日志的存在,能够将用户的点击行为日志做为training data,使得经过机器学习自动获得排序模型成为可能。机器学习

须要注意的是,排序问题最关注的是各个Documents之间的相对顺序关系,而不是各个Documents的预测分最准确。函数

Learning to Rank是监督学习方法,因此会分为training阶段和testing阶段,如图 Fig.2  所示。学习

               

 

1.1 Training data的生成

对于Learning to Rank,training data是必须的,而feature vector一般都是能够获得的,关键就在于label的获取,而这个label实际上反映了query-doc pair的真实相关程度。一般咱们有两种方式能够进行label的获取:优化

第一种方式是人工标注,这种方法被各大搜索引擎公司广为应用。人工标注即对抽样出来做为training data的query-doc pair人为地进行相关程度的判断和标注。通常标注的相关程度分为5档:perfect,excellent,good,fair,bad。例如,query=“Microsoft”,这时候,Microsoft的官网是perfect;介绍Microsoft的wikipedia则是excellent;一篇将Microsoft做为其主要话题的网页则是good;一篇只是提到了Microsoft这个词的网页则是fair,而一篇跟Microsoft绝不相关的网页则是bad。人工标注的方法能够经过多人同时进行,最后以相似投票表决的方式决定一个query-doc pair的相关程度,这样能够相对减小各我的的观点不一样带来的偏差。搜索引擎

第二种方式是经过搜索日志获取。搜索日志记录了人们在实际生活中的搜索行为和相应的点击行为,点击行为实际上隐含了query-doc pair的相关性,因此能够被用来做为query-doc pair的相关程度的判断。一种最简单的方法就是利用同一个query下,不一样doc的点击数的多少来做为它们相关程度的大小。lua

不过须要注意的是,这里存在着一个很大的陷阱,就是用户的点击行为其实是存在“position bias”的,即用户偏向于点击位置靠前的doc,即使这个doc并不相关或者相关性不高。有不少 tricky的和 general 的方法能够用来去除这个“position bias”,例如,spa

1. 当位置靠后的doc的点击数都比位置靠前的doc的点击数要高了,那么靠后的doc的相关性确定要比靠前的doc的相关性大。3d

2. Joachims等人则提出了一系列去除bias的方法,例如 Click > Skip Above, Last Click > Skip Above, Click > Earlier Click, Click > Skip Previous, Click > No Click Next等。日志

3. 有个很tricky可是效果很不错的方法,以前咱们说一个doc的点击数比另外一个doc的点击数多,并不必定说明前者比后者更相关。但若是二者的差距大到必定程度了,即便前者比后者位置靠前,可是二者的点击数相差5-10倍,这时候咱们仍是愿意相信前者更加相关。固然这个差距的大小须要根据每一个场景具体的调整。

4. position bias 存在的缘由是,永远没法保证在一次搜索行为中,用户可以看到全部的结果,每每只看到前几位的结果。这时候就到了 Click Model大显身手的时候了,一系列的 Click Model 根据用户的点击信息对用户真正看到的doc进行“筛选”,进而能更准确地看出用户到底看到了哪些doc,没有看到哪些doc,一旦这些信息知道了,那么咱们就能够根据相对更准确的 点击数/展现数(即展示CTR)来肯定各个doc的相关性大小。

上述讲到的两种label获取方法各有利弊。人工标注受限于标注的人的观点,不一样的人有不一样的见解,并且毕竟标注的人不是真实搜索该query的用户,没法得知其搜索时候的真实意图;另外一方面人工标注的方法代价较高且很是耗时。而从搜索日志中获取的方法则受限于用户点击行为的噪声,这在长尾query中更是如此,且有用户点击的query毕竟只是整体query的一个子集,没法获取所有的query下doc的label。

1.2 Feature的生成

这里只是简单介绍下,后续博客会有更纤细的讲解。

通常Learning to Rank的模型的feature分为两大类:relevance 和 importance(hotness),即query-doc pair 的相关性feature,和doc自己的热门程度的feature。二者中具备表明性的分别是 BM25 和 PageRank。

1.3 Evaluation

怎么判断一个排序模型的好坏呢?咱们须要有验证的方法和指标。方法简单来讲就是,比较模型的输出结果,和真实结果(ground truth)之间的差别大小。用于Information Retrieval的排序衡量指标一般有:NDCG,MAP等。

NDCG(Normalized Discounted Cumulative Gain):

NDCG表示了从第1位doc到第k位doc的“归一化累积折扣信息增益值”。其基本思想是:

1) 每条结果的相关性分等级来衡量

2) 考虑结果所在的位置,位置越靠前的则重要程度越高

3) 等级高(即好结果)的结果位置越靠前则值应该越高,不然给予惩罚

其中G表示了这个doc得信息增益大小,通常与该doc的相关程度正相关:

D则表示了该doc所在排序位置的折扣大小,通常与位置负相关:

而Gmax则表示了归一化系数,是最理想状况下排序的“累积折扣信息增益值”。

最后,将每一个query下的NDCG值平均后,即可以获得排序模型的整体NDCG大小。

 

MAP(Mean Average Precision):

其定义是求每一个相关文档检索出后的准确率的平均值(即Average Precision)的算术平均值(Mean)。这里对准确率求了两次平均,所以称为Mean Average Precision。

在MAP中,对query-doc pair的相关性判断只有两档:1和0。

对于一个query,其AP值为:

yij即每一个doc的label(1和0),而每一个query-doc pair的P值表明了到dij这个doc所在的位置为止的precision:

其中,是dij在排序中的位置。

 

2. Formulation

用通用的公式来表示Learning to Rank算法,loss function为,从而risk function(loss function在X,Y联合分布下的指望值)为:

有了training data后,进一步获得empirical risk function:

因而,学习问题变成了如何最小化这个empirical risk function。而这个优化问题很难解决,由于loss function不连续。因而可使用一个方便求解的surrogate function来替换原始loss function,转而优化这个替换函数:

替换函数的选择有不少种,根据Learning to Rank的类型不一样而有不一样的选择:

1)pointwise loss:例如squared loss等。

2)pairwise loss:例如hinge loss,exponential loss,logistic loss等。

3)listwise loss:

 

3. Learning to Rank Methods

Learning to Rank 方法能够分为三种类型:pointwise,pairwise,和listwise。

pointwise和pairwise方法将排序问题转化为classification,regression,ordinal classification等问题,优势是能够直接利用已有的classificatin和regression算法,缺点是group structure实际上是被忽略的,即不会考虑每一个query下全部doc之间的序关系。致使其学习目标和真实的衡量排序的目标并不必定是一致的(不少排序衡量指标,例如NDCG都是衡量每一个query下的总体list的序关系的)。而listwise方法则将一个ranking list做为一个instance来进行训练,其实会考虑每一个query下全部doc之间的序关系的。

这三种类型的Learning to Rank方法的具体算法通常有:

1) Pointwise: Subset Ranking, McRankPrankOC SVM
2) PairwiseRanking SVM, RankBoost, RankNetGBRankIR SVMLambda RankLambdaMart
3) Listwise: ListNet, ListMLE, AdaRank, SVM MAP, Soft Rank

针对各个具体的算法介绍,后续的博客会进一步给出,这里就再也不多加详述了。

 

版权声明:

   本文由笨兔勿应全部,发布于http://www.cnblogs.com/bentuwuying。若是转载,请注明出处,在未经做者赞成下将本文用于商业用途,将追究其法律责任。

相关文章
相关标签/搜索