排序学习
排序学习简单说就是在排序任务中使用机器学习的方法,在信息检索、自然语言处理与数据挖掘等许多领域中有重要的应用。
用文档检索来举例,如下图:
排序学习的核心就是要学习到一个排序模型f(q,d) , q 表示查询,d 表示文档,然后利用排序模型,在给定查询q的时候给出相关文档的排序。
传统排序,例如BM25: 基于条件概率分布, f(q,d)=p(r|q,d) f ( q , d ) = p ( r | q , d ) ,其中r只可以取0或者1,表示相关或者不相关。无法有效利用与排序相关的其他丰富的特征,例如文字链接、pagerank分值等。同时由于网页检索领域大量用户点击数据的积累使得机器学习的应用变为可能,由此现代的排序系统基本都使用了排序学习(LTR)。
排序学习属于监督学习,自然有训练与测试两个阶段,如下图:
查询与文档的相关信息可以有多种表示形式,其中应用最广泛的形式是使用label表示,将相关性表示为几个级别。
对于一条训练数据 (qi,Di),Yi ( q i , D i ) , Y i 来说, Di D i 表示与 qi q i 相关文档集合 di,1,di,2,...di,n d i , 1 , d i , 2 , . . . d i , n , Yi Y i 为相关文档的label集合 yi,1,yi,2,...yi,n y i , 1 , y i , 2 , . . . y i , n , 用 xi,j=ϕ(qi,di,j) x i , j = ϕ ( q i , d i , j ) 表示由查询文档对 (qi,di,j) ( q i , d i , j ) 产生的特征向量。
我们的目标是训练一个模型 f(qi,di,j)=f(xi,j) f ( q i , d i , j ) = f ( x i , j ) ,能在给定一个 (q,d) ( q , d ) 对(或者是给定特征向量 x x )的情况下,能够给出给出相应的打分值(score),而排序就是利用得到的给出一个文档的排列。
对排序结果的评价指标主要有NDCG(Normalized Discounted Cumulative Gain), DCG(Discounted Cumulative Gain), MAP(Mean Average Precision)。
排序学习与传统分类学习的联系
排序学习与原始的分类有相似之处,也有不同的地方,比如电影评分领域就是一个典型的分类学习样例,根据学习到的打分模型对电影打一个分值,然后再实数区间上划分几个区间段作为类别,打分的值落入哪个区间则可以给电影打上相应的评分类别。而排序学习的目标则是给定一个查询时,能给出一个相关文档的合适排列,不同查询的相关文档数量是不一样的,有的查询有强相关文档,而有的查询则只有弱相关文档。
排序学习的损失函数
定义一个risk函数为损失函数在联合分布概率
P(X,Y)
P
(
X
,
Y
)
上的期望,如下:
在实际训练数据上,我们定义一个实际的risk函数为:
排序学习的目标变成了最小化上述risk函数,而由于上述函数中包含的 L(F(xi),yi) L ( F ( x i ) , y i ) 损失函数使用了排序去定义,是不连续的,这造成risk函数最小化比较困难,因此通常我们使用一个替代损失函数 L′(F(x),y) L ′ ( F ( x ) , y ) ,这样学习过程就变成了最小化替代损失函数的过程。
在信息检索领域,排序学习的损失函数定义通常基于NDCG与MAP,例如: L(F(x),y)=1.0−NDCG L ( F ( x ) , y ) = 1.0 − N D C G ,该定义利用了基于F(x)值得排序序列
而对于替代函数来说,也有不同的定义方式,不同的定义导致了不同的方法去学习排序,主要有pointwise loss, pairwise loss, listwise loss三种。
pointwise approach
在单个数据上利用均方误差定义损失就是pointwise loss,如下:
它其实是1.0-NDCG的上界。
对于pointwise方法来说,排序问题被转化为了传统的分类或者回归问题,这样传统的分类回归学习方法就都可以应用了。pointwise方法有Subset Ranking, McRank, Prank与OC SVM。
pairwise approach
pairwise lose可以是在一对数据上的hinge loss、exponential loss或者logistic loss,Ranking SVM使用了hinge loss, RankBoost使用了exponential loss, RankNet使用了logistic loss,损失函数定义如下:
当 yi=yj y i = y j 时, L′=0 L ′ = 0 , ϕ ϕ 是hinge loss, exponential loss或者logistic loss等。
在pairwise方法中,排序被转化为了pairwise分类或者pairwise回归,典型的方法有Ranking SVM, RankBoost, RankNet, GBRank, IR SVM, Lambda Rank, LambdaMART。
listwise apprach
listwise方法基于整个排序列表定义损失函数,可以更好的模拟真实的排序损失函数。
常见的模型有ListNet, ListMLE, AdaRank, SVM MAP, Soft Rank。
参考文献
[1] Li H. A short introduction to learning to rank[J]. IEICE TRANSACTIONS on Information and Systems, 2011, 94(10): 1854-1862.
[2] Liu T Y. Learning to rank for information retrieval[J]. Foundations and Trends® in Information Retrieval, 2009, 3(3): 225-331.