Learning to Rank(RankNet)

IR

  LambdaMART的前世今生:https://blog.csdn.net/huagong_adu/article/details/40710305

搜索这一过程的本质是自动选取与用户输入的关键词(query)最相关的一组文档(docs,或称网页, urls)的过程,目前主要通过如下两个步骤实现:

  1. query-doc匹配:寻找与当前输入的query相关度高的docs;
  2. 高相关度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 : d i d_i di d j d_j dj谁与当前query更相关的相对顺序的排序问题,一般分为 d i d_i di d j d_j dj更相关、更不相关和相关程度相等三个类别,分别记为{+1, -1, 0},由此便又转化为了分类问题。

文档列表(listwise)

listwise是将一个query对应的所有相关文档看作一个整体,作为单个训练样本。

RankNet

RankNet和LambdaRank同属于pairwise方法。对于某一个query,pairwise方法并不关心某个doc与这个query的相关程度的具体数值,而是将对所有docs的排序问题转化为求解任意两个docs的先后问题,即:根据docs与query的相关程度,比较任意两个不同文档 d i d_i di d j d_j dj的相对位置关系,并将query更相关的doc排在前面。一般使用 d o c i doc_i doci d o c j doc_j docj 更相关、 d o c j doc_j docj d o c i doc_i doci 更相关和相关程度相等三个类别,并分别使用{+1, -1, 0}作为对应的类别标签,然后使用文档对 { d o c i doc_i doci d o c j doc_j docj }作为样本的输入特征,由此将排序问题转化为了分类问题。这样做的另一个好处是,无需对每个doc与query的相关性进行精确标注(实际大规模数据应用场景下很难获得),只需获得docs之间的相对相关性,相对容易获得,可通过搜索日志、点击率数据等方式获得。

RankNet就是基于这样的思想的一种排序算法。若用 x i x_i xi x j x_j xj 来表示文档 d o c i doc_i doci d o c j doc_j docj的特征, s s s = f f f( x x x : : : w w w)代表某种打分函数, x x x w w w分别代表输入特征和参数。那么文档 i i i j j j 的得分为:
在这里插入图片描述
由于pairwise方法只考虑 d o c i doc_i doci d o c j doc_j docj 的相对顺序,RankNet巧妙的借用了sigmoid函数来定义 d o c i doc_i doci d o c j doc_j docj更相关的概率为
在这里插入图片描述
其中 σ σ σ为待学习的参数。若 d o c i doc_i doci d o c j doc_j docj 更相关,则 P P P i _i i j _j j大于0.5 ,反之 P P P i _i i j _j j小于0.5 。由此便借用了sigmoid函数将 d o c i doc_i doci d o c j doc_j docj 更相关的概率映射至[0, 1]上的实数,并从概率的角度对“谁更相关”这个问题进行了建模,也让我们得以使用分类问题的思想对两个文档的相对顺序问题进行求解。

pairwise的类别标签为{+1, -1, 0},在RankNet中继续沿用这套标签并将其记为 [公式]
由于接下来要使用交叉熵作为损失函数,因此将标签 S S S i _i i j _j j 与真实概率 P P P − ^- i _i i j _j j (真实相关性)进行映射,有:在这里插入图片描述
使用交叉熵函数作为损失函数,单个样本( i i i = = = 1 1 1)的交叉熵损失函数(loss)为:
在这里插入图片描述
带入得:
在这里插入图片描述
所以 C C C i _i i j _j j关于任一待优化参数 W k W_k Wk 的偏导数为:
在这里插入图片描述
使用随机梯度下降法(SGD)对参数进行优化:
在这里插入图片描述
其中 ϕ ϕ ϕ表示学习率。由于式中的在这里插入图片描述
所以记:
在这里插入图片描述
对于集合 I I I中的样本,总的loss记为:
在这里插入图片描述
集合 I I I将用于RankNet的加速训练公式的推导,它表示某一个query下,所有相关文档组成的文档对{ i i i j j j} ,每个文档对仅在 I I I中出现一次,不能重复出现,即 { i i i j j j} 与 { j j j i i i} 等价,且 i i i j j j。为方便起见,假设 I I I中的文档对{ i i i j j j} 均满足{ d o c i doc_i doci d o c j doc_j docj},即相关性大的文档下标 i i i在前,相关性小的文档下标 j j j在后。故对于 I I I中所有的文档对{ i i i j j j} ,均满足 S S S i _i i j _j j = = = 1 1 1 。则有:
在这里插入图片描述
其中
在这里插入图片描述
式(14)的含义是:对于文档 i i i:首先找到所有相关性排在文档 i i i后面的文档 j j j(组成 { i i i j j j}),并找到所有相关性排在文档 i i i前面的文档 k k k(组成{ k k k i i i})(排在前面的文档代表相关性更强);再对所有的 λ λ λ i _i i j _j j 求和,其组成了式(14)的第一项,对所有的 λ λ λ k _k k i _i i 求和,其组成了式(14)的第二项。由于第一项和第二项的求和符号互不关联(互相没有联系),所以第二项中的 k k k可改为 j j j

虽然上文描述了式(14)的含义,但是式(13)中的等号③以及式(14)的成立依然较难理解。以两个例子来说明等号③为什么成立(作者在原论文中也是通过例子来说明的)。

  1. 例1:如果仅有两个文档与某一query相关,且其真实相关性满足 d 1 d_1 d1大于 d 2 d_2 d2 ,则集合 I I I={ { 1 1 1 , 2 ,2 ,2}},且 i i i= 1 1 1 j j j = = = 2 2 2,此时
    在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qq_43390809/article/details/108663399