IR
LambdaMART的前世今生:https://blog.youkuaiyun.com/huagong_adu/article/details/40710305
搜索这一过程的本质是自动选取与用户输入的关键词(query)最相关的一组文档(docs,或称网页, urls)的过程,目前主要通过如下两个步骤实现:
- query-doc匹配:寻找与当前输入的query相关度高的docs;
- 高相关度docs精确排序:对1中返回的docs,选取更多特征并按照用户点击该doc的可能性大小精确排序。如图

Learning to Rank的三种算法
1.单文档方法(pointwise)
对于某一个query,它将每个doc分别判断与这个query的相关程度,由此将docs排序问题转化为了分类(比如相关、不相关)或回归问题(相关程度越大,回归函数的值越大)。但是pointwise方法只将query与单个doc建模,建模时未将其他docs作为特征进行学习,也就无法考虑到不同docs之间的顺序关系。而排序学习的目的主要是对搜索结果中的docs根据用户点击的可能性概率大小进行排序,所以pointwise势必存在一些缺陷。
2.文档对方法(pairwise)
针对pointwise存在的问题,pairwise文档对方法并不关心某一个doc与query相关程度的具体数值,而是将排序问题转化为任意两个不同docs :did_idi和djd_jdj谁与当前query更相关的相对顺序的排序问题,一般分为did_idi比djd_jdj更相关、更不相关和相关程度相等三个类别,分别记为{+1, -1, 0},由此便又转化为了分类问题。
文档列表(listwise)
listwise是将一个query对应的所有相关文档看作一个整体,作为单个训练样本。
RankNet
RankNet和LambdaRank同属于pairwise方法。对于某一个query,pairwise方法并不关心某个doc与这个query的相关程度的具体数值,而是将对所有docs的排序问题转化为求解任意两个docs的先后问题,即:根据docs与query的相关程度,比较任意两个不同文档did_idi和djd_jdj的相对位置关系,并将query更相关的doc排在前面。一般使用 docidoc_idoci比docjdoc_jdocj 更相关、docjdoc_jdocj比docidoc_idoci 更相关和相关程度相等三个类别,并分别使用{+1, -1, 0}作为对应的类别标签,然后使用文档对 {docidoc_idoci,docjdoc_jdocj }作为样本的输入特征,由此将排序问题转化为了分类问题。这样做的另一个好处是,无需对每个doc与query的相关性进行精确标注(实际大规模数据应用场景下很难获得),只需获得docs之间的相对相关性,相对容易获得,可通过搜索日志、点击率数据等方式获得。
RankNet就是基于这样的思想的一种排序算法。若用 xix_ixi和 xjx_jxj 来表示文档 docidoc_idoci和docjdoc_jdocj的特征,sss = fff(xxx:::www)代表某种打分函数,xxx和www分别代表输入特征和参数。那么文档iii 和 jjj 的得分为:

由于pairwise方法只考虑 docidoc_idoci和docjdoc_jdocj 的相对顺序,RankNet巧妙的借用了sigmoid函数来定义 docidoc_idoci和docjdoc_jdocj更相关的概率为

其中σσσ为待学习的参数。若 docidoc_idoci和docjdoc_jdocj 更相关,则 PPPi_iij_jj大于0.5 ,反之 PPPi_iij_jj小于0.5 。由此便借用了sigmoid函数将 docidoc_idoci和docjdoc_jdocj 更相关的概率映射至[0, 1]上的实数,并从概率的角度对“谁更相关”这个问题进行了建模,也让我们得以使用分类问题的思想对两个文档的相对顺序问题进行求解。
pairwise的类别标签为{+1, -1, 0},在RankNet中继续沿用这套标签并将其记为 ![[公式]](https://i-blog.csdnimg.cn/blog_migrate/17891c181388dac943e2c5d46dfc6e61.png#pic_center)
由于接下来要使用交叉熵作为损失函数,因此将标签 SSSi_iij_jj 与真实概率 PPP−^-−i_iij_jj (真实相关性)进行映射,有:
使用交叉熵函数作为损失函数,单个样本(iii===111)的交叉熵损失函数(loss)为:

带入得:

所以CCCi_iij_jj关于任一待优化参数WkW_kWk 的偏导数为:

使用随机梯度下降法(SGD)对参数进行优化:

其中 ϕϕϕ表示学习率。由于式中的
所以记:

对于集合III中的样本,总的loss记为:

集合III将用于RankNet的加速训练公式的推导,它表示某一个query下,所有相关文档组成的文档对{iii,jjj} ,每个文档对仅在III中出现一次,不能重复出现,即 {iii,jjj} 与 {jjj,iii} 等价,且 iii≠jjj。为方便起见,假设III中的文档对{iii,jjj} 均满足{docidoc_idoci >docjdoc_jdocj},即相关性大的文档下标iii在前,相关性小的文档下标jjj在后。故对于III中所有的文档对{iii,jjj} ,均满足SSSi_iij_jj===111 。则有:

其中

式(14)的含义是:对于文档iii:首先找到所有相关性排在文档iii后面的文档jjj(组成 {iii,jjj}),并找到所有相关性排在文档iii前面的文档kkk(组成{kkk,iii})(排在前面的文档代表相关性更强);再对所有的 λλλi_iij_jj 求和,其组成了式(14)的第一项,对所有的 λλλk_kki_ii 求和,其组成了式(14)的第二项。由于第一项和第二项的求和符号互不关联(互相没有联系),所以第二项中的kkk可改为jjj。
虽然上文描述了式(14)的含义,但是式(13)中的等号③以及式(14)的成立依然较难理解。以两个例子来说明等号③为什么成立(作者在原论文中也是通过例子来说明的)。
- 例1:如果仅有两个文档与某一query相关,且其真实相关性满足 d1d_1d1大于d2d_2d2 ,则集合III={{111,,2,2,2}},且 iii=111, jjj===222,此时

令

则有:

通过以上仅包含两个相关文档的例子对式(13)和式(14)进行了说明。若使用他们进行优化迭代,便将SGD算法转化为了mini-batch SGD算法,如式(21)所示。此时,RankNet在单次迭代时会对同一query下所有docs遍历后更新权值,训练时间得以从 ooo(n2n^2n2) 降至 ooo(nnn) ,n为单条query下docs的平均数,它被称为RankNet算法的加速训练。

本文探讨了信息检索中RankNet算法的工作原理及其加速训练公式。RankNet属于pairwise Learning to Rank方法,通过比较文档对之间的相关性来进行排序,利用sigmoid函数建模文档间的相对顺序,并采用交叉熵作为损失函数。

被折叠的 条评论
为什么被折叠?



