【论文学习】Learning to Rank

73 阅读5分钟

原文链接

简介

本文研究的是关于排名的学习,即构建一个模型或函数来排名对象,学习排名对于文档检索、协同过滤和许多其他应用程序都非常有用。

许多应用程序的中心问题是排名,包括文档检索、协同过滤、专家查找、反网络垃圾邮件、情感分析和产品评估等。由于其重要性,排名学习近年来在机器学习领域引起了广泛的关注。基于一种称为对感知的方法(pairwise approach) 已经开发了几种方法,并成功地应用于文档检索,该方法以文档对作为学习的实例,将学习问题形式化为分类问题,在学习过程中,它从排名列表中收集文档对,并为每个文档对分配一个标签,表示两个文档的相对相关性,然后用标记好的数据训练分类模型,并利用分类模型进行排序,分类模型可以使用SVM、Boosting和神经网络等。

排名学习

排名学习是机器学习中一个新的热门话题,其中一种主要的学习排名的方法称为成对方法(pairwise approach),在成对方法中,学习任务被形式化为:将对象对分为两类(正确排名和错误排名)。

Listwise 方法

本节以文献检索为例,对排名学习进行了概述。特别地,详细地描述了按列表排列(Listwise)方法。

在训练中,给定一组查询Q={q(1),...,q(m)}Q=\{q^{(1)},...,q^{(m)}\},每个查询q(i)q^{(i)}和一份文件清单d(i)={d1(i),...,dn(i)(i)}d^{(i)}=\{d^{(i)}_1,...,d^{(i)}_{n^{(i)}}\}相关联,dj(i)d^{(i)}_j表示第jj个文件,n(i)n^{(i)}表示文件清单的规模。进一步,每份文件清单d(i)d^{(i)}又和一份评价清单(分数)y(i)={y1(i),...,yn(i)(i)}y^{(i)}=\{y^{(i)}_1,...,y^{(i)}_{n^{(i)}}\}相关联。显然,yj(i)y^{(i)}_j表示查询q(i)q^{(i)}和文件dj(i)d^{(i)}_j的关联程度,它可以是人类明确或含蓄给出的分数,例如:yj(i)y^{(i)}_j可以是在搜索引擎中检索并返回q(i)q^{(i)}时对dj(i)d^{(i)}_j的点击次数,次数越高说明二者的关联程度越高。

对于每个查询-文件对(q(i),dj(i))(q^{(i)},d^{(i)}_j)创建一个特征向量xj(i)=Ψ(q(i),dj(i)),i=1,2,...,m;j=1,2,...,n(i)x^{(i)}_j=\Psi(q^{(i)},d^{(i)}_j),i=1,2,...,m;j=1,2,...,n^{(i)}。每个特征列表x(i)=(x1(i),...,xn(i)(i))x^{(i)}=(x^{(i)}_1,...,x^{(i)}_{n^{(i)}})和分数列表y(i)=(y1(i),...,yn(i)(i))y^{(i)}=(y^{(i)}_1,...,y^{(i)}_{n^{(i)}})组合成一个实例(instance)。训练集的定义为T={(x(i),y(i))}i=1m\Tau=\{(x^{(i)},y^{(i)})\}^m_{i=1}

创建一个排名函数ff,对于每个特征向量xj(i)x^{(i)}_j输出一个分数f(xj(i))f(x^{(i)}_j)。显然,对于一个特征向量列表x(i)x^{(i)}可以得到一个分数列表z(i)=(f(x1(i)),...,f(xn(i)(i)))z^{(i)}=(f(x^{(i)}_1),...,f(x^{(i)}_{n^{(i)}}))。学习的目标为最小化 Listwise 损失函数LL

Mini=1mL(y(i),z(i))(1)Min \sum^m_{i=1}L(y^{(i)},z^{(i)}) \tag{1}

通过学习得到的模型,在测试中给文件d(i)d^{(i')}打分,然后根据分数降序排名文件。

上面描述的学习问题被称为排名学习的列表方法(listwise approach to learn-

ing to rank)

Pairwise 方法

在Pairwise 方法中,从训练集T\Tau中创建新训练集T\Tau',其中每个特征向量对xj(i),xk(i),jkx^{(i)}_j,x^{(i)}_k,j\neq k 组成一个新的实例,若yj(i)>yk(i)y^{(i)}_j>y^{(i)}_k则给特征向量对赋值+1+1,否则赋值1-1,这表明T\Tau'为一个二分类数据集,像SVM这类分类器可以很容易处理该问题。

概率模型

使用两种概率模型来计算公式(1)中的损失函数。

Permutation Probability 排列概率

假设现在有一组需要排名的对象由数字{1,2,...,n}\{1,2,...,n\}定义,这些对象中的一个排名π\pi被定义为从{1,2,...,n}\{1,2,...,n\}到其自身双射,写作π=<π(1),...,π(n)>\pi=<\pi(1),...,\pi(n)>π(j)\pi(j)定义为一个在排名中的位置jj的对象。nn个对象所有可能的排名集合定义为Ωn\Omega_n

假设有一个排名函数,它为nn个对象分配分数,分数集合的定义为s=(s1,...,sn)s=(s_1,...,s_n)sjs_j为第jj个对象的分数。

假设使用排名函数对排名列表(permutation)进行预测时存在不确定性,换句话说,假设:任何排名都是可能的,排名函数对不同的排名可能计算出不同的似然值

定义1:假设π\pinn个对象的一个排名结果,ϕ()\phi()为一个严格递增的正函数。给定分数列表ss,排名π\pi的概率可以定义为:

Ps(π)=j=1nϕ(sπ(j))k=jnϕ(sπ(k))P_s(\pi)=\prod_{j=1}^n\frac{\phi(s_{\pi(j)})}{\sum^n_{k=j}\phi(s_{\pi(k)})}

例子:对于对象{1,2,3}\{1,2,3\}及其打分s=(s1,s2,s3)s=(s_1,s_2,s_3),序列π=<1,2,3>,π=<3,2,1>\pi=<1,2,3>,\pi'=<3,2,1>的概率为:

image.png

定理2: 排名概率Ps(π),πΩnP_s(\pi),\pi\in\Omega_n在排名集合上组成了一个概率分布。举例说明,对于每个πΩn\pi\in\Omega_n,都有Ps(π)>0 and πΩnPs(π)=1P_s(\pi)>0\ and \ \sum_{\pi\in\Omega_n}P_s(\pi)=1

定理3:给定两个排名π,π\pi,\pi',若:

  • π(p)=π(q),π(p)=π(q),p<q\pi(p)=\pi'(q),\pi'(p)=\pi(q),p<q
  • π(r)=π(r),rp,q\pi(r)=\pi'(r),r\neq p,q
  • sπ(p)>sπ(q)s_{\pi(p)}>s_{\pi(q)} 则:Ps(π)>Ps(π)P_s(\pi)>P_s(\pi')。这个定理说明,对于一个排名,若得分较高的对象排在得分较低对象的前面,若交换两个对象的位置,得到的排名概率会低于原来的排名。

定理4:对于nn个对象,若s1>s2>...>sns_1>s_2>...>s_nPs(<1,2,..,n>)P_s(<1,2,..,n>)为最高的排名概率,Ps(<n,n1,...,1>)P_s(<n,n-1,...,1>)为最低的排名概率。(显然很容易证明)

定理5

  1. 对于线性函数ϕ(x)=αx,α>0\phi(x)=\alpha x,\alpha>0,其排名概率是尺度不变的,即: image.png

  2. 对于指数函数ϕ(x)=exp(x)\phi(x)=exp(x),其排名概率是平移不变的,即:

image.png

给定两个得分列表,我们可以先计算对应的两个排名概率分布,然后取这两个分布之间的度量作为 Listwise 损失函数,然而这种计算方法的时间复杂度为O(n!)O(n!),不实用,因此提出了top-k概率。

top-k概率

top-k概率的计算非常简单易懂,取对象的前kk个概率(j1,j2,...,jk)(j_1,j_2,...,j_k)来表示它们被排名在前kk位置的概率。

定义6:top-k子组合gk(j1,j2,...,jk)g_k(j_1,j_2,...,j_k)包含了前kk个对象的所有可能排名:

gk(j1,j2,...,jk)={πΩnπ(t)=jt,t=1,2,...,k}g_k(j_1,j_2,...,j_k)=\{\pi\in\Omega_n|\pi(t)=j_t,\forall t=1,2,...,k\}

gkg_k为所有top-k子组合的集合:

gk={gk(j1,j2,...,jk)jt=1,2,...,n,t=1,2,...,k,jujv,uv}g_k=\{g_k(j_1,j_2,...,j_k)|j_t=1,2,...,n,\forall t=1,2,...,k,j_u\neq j_v,\forall u\neq v\}

显然,集合gkg_k包含了n!(nk)!\frac{n!}{(n-k)!}个成员。

定义7:对象的top-k概率(j1,j2,...,jk)(j_1,j_2,...,j_k)为子组合gk(j1,j2,...,jk)g_k(j_1,j_2,...,j_k)的概率,即:

Ps(gk(j1,j2,...,jk))=πgk(j1,j2,...,jk)Ps(π)P_s(g_k(j_1,j_2,...,j_k))=\sum_{\pi\in g_k(j_1,j_2,...,j_k)}P_s(\pi)

定义8:对于top-k概率Ps(gk(j1,j2,...,jk))P_s(g_k(j_1,j_2,...,j_k)),存在:

Ps(gk(j1,j2,...,jk))=t=1kϕ(sjt)l=tnϕ(sjt)P_s(g_k(j_1,j_2,...,j_k))=\prod^k_{t=1}\frac{\phi(s_{jt})}{\sum^n_{l=t}\phi(s_{jt})}

推理9:top-k概率构成了集合gkg_k的概率分布。

定理10:给定对象ju,jvj_u,j_v,若sju>sjv,uv,u,v=1,2,...,ns_{ju}>s_{jv},u\neq v,u,v=1,2,...,n,则:Ps(gk(j1,...,ju,...,jv,...,jk))>Ps(gk(j1,...,jv,...,ju,...,jk))P_s(g_k(j_1,...,j_u,...,j_v,...,j_k))>P_s(g_k(j_1,...,j_v,...,j_u,...,j_k))。和上述一样,这个公式证明了top-k概率的平移不变性和尺度不变性。

给定两个得分列表,可以定义对应的top-k概率分布之间的度量作为 Listwise 损失函数。例如,使用交叉熵为度量,公式(1)中的损失函数可以定义为:

L(y(i),z(i))=ggkPy(i)(g)log(Pz(i)(g))L(y^{(i)},z^{(i)})=-\sum_{\forall g\in g_k}P_{y^{(i)}}(g)\log(P_{z^{(i)}}(g))