RankNet -> LambdaRank -> LambdaMART
Ranking 问题的常见的评价指标如NDCG、MAP等,都是不平滑、不连续、无法求梯度,因此不能直接用梯度下降法求解。
RankNet、LambdaRank 和 LambdaMART 是由微软提出的LTR的三个算法。它们将排序问题转化为 pairwise 的分类或者回归问题,使用梯度下降进行求解。
RankNet
RankNet最初是用神经网络开发的,但底层模型可以不局限于神经网络。**RankNet的损失函数旨在最小化排序中的逆序数量。**这里的逆序代表一对结果之间不正确的顺序,比如我们在排序列表中将较低评级的结果排在较高评级结果之上。RankNet使用随机梯度下降算法优化损失函数。
RankNet 的创新之处在于,它将不适宜用梯度下降求解的Ranking问题,转化为对概率的交叉熵损失函数的优化问题,从而适用梯度下降方法。RankNet 的梯度下降表现在结果的整体变化中是逆序对的下降。
RankNet 的目标是得到一个打分函数:根据这个算法函数,我们可以计算文档和文档的得分和
然后根据得分计算二者的偏序概率
再定义交叉熵为损失函数
进行梯度下降
LambdaRank
RankNet 告诉我们如何绕开 NDCG 等无法求导的评价指标得到一个可用的梯度。
后来发现在训练 RankNet 的过程中,其实是不需要损失函数的,只需要损失函数的梯度,可以通过交换每对文档后 NDCG 的变化来衡量梯度。LambdaRank 的核心思想是不通过显示定义损失函数的方式来求梯度,而是分析排序问题需要的梯度的意义,直接定义梯度。实验显示它在速度和准确度上都比原始 RankNet 要好。
如上图所示,每条线表示一个文档,蓝色表示相关文档,灰色表示不相关文档。RankNet以pairwise error的方式计算cost,左图的cost为13,右图通过把第一个相关文档下调3个位置,第二个文档上调5个位置,将cost降为11,但是像NDCG等指标只关注Top k个结果的排序,在优化的过程中下调前面相关文档的位置并不是我们想要的结果。右图左边黑色的箭头表示RankNet下一轮的调序方向和强度,但我们真正需要的是右边红色箭头代表的方向和强度,即更关注靠前位置的相关文档的排序位置的提升。LambdaRank正是基于这个思想演化而来,其中Lambda指的就是红色箭头,代表下一次迭代优化的方向和强度,也就是梯度。
LambdaMART
LambdaMART 组合了 LambdaRank 和 MART(Multiple Additive Regression Trees)。LambdaMART 使用 LambdaRank 里的损失函数和梯度提升决策树来求解 Rank 任务。 实验显示 LambdaMART 比 LambdaRank 和原始 RankNet 都要好。