【推荐】LambdaRank

上一篇文章简单介绍了Ranknet,这篇文章简单介绍下LambdaRank。

1.前言

RankNet 有哪些缺陷,为什么需要 LambdaRank?

尽管 RankNet 取得了一些成功,但它存在一些缺陷,我们讲过 RankNet 本质上就是以错误的 pair 最少为优化目标,也就是说 RankNet 的直接目的就是优化逆序对数(pairwise error),这种方式一定程度上能够解决一些排序问题,但它并不完美。

我们先来直观认识一下 RankNet 优化逆序对数量这个过程。

逆序对数(pairwise error)表示一个排列中,抽查任意两个 item,一共有 𝐶2𝑛 种可能的组合,如果这两个 item 的之 间的相对排序错误,逆序对数量增加 1。

逆序对数的实质就是插入排序过程中要移动元素的次数。直观理解为要想把某个元素移动到最优排序位置,需要移动多少次,两个元素就是二者移动次数的和。

例如,对某个 Query,和它相关的文章有两个,记为 (𝑄,[𝐷1,𝐷2]) 。

  1. 如果模型 𝑓(⋅) 对此 Query 返回的 n 条结果中, 𝐷1,𝐷2 分别位于前两位,那么 pairwise error 就为 0;
  2. 如果模型 𝑓(⋅) 对此 Query 返回的 n 条结果中, 𝐷1,𝐷2 分别位于第 1 位和第 n 位,那么 pairwise error 为 n-2;
  3. 如果模型 𝑓(⋅) 对此 Query 返回的 n 条结果中, 𝐷1,𝐷2 分别位于第 2 和第 3 位,那么 pair-wise error 为 2;

假设 RankNet 经过两轮迭代实现下图所示的顺序优化:

第一轮的时候逆序对数为 13,第二轮为 3 + 8 = 11,逆序对数从 13 优化到 11,损失确实是减小了,如果用 AUC 作为评价指标,也可以获得指标的提升。但实际上,我们不难发现,优化逆序对数并没有考虑位置的权重,这与我们实际希望的排序目标不一致。下一轮迭代,RankNet 为了获得更大的逆序对数的减小,会按照黑色箭头那样的趋势,排名靠前的文档优化力度会减弱,更多的重心是把后一个文档往前排,这与我们搜索排序目标是不一致的,我们更希望出现红色箭头的趋势,优化的重点放在排名靠前的文档,尽可能地先让它排在最优位置。所以我们需要一个能够考虑位置权重的优化指标。

RankNet 以优化逆序对数为目标,并没有考虑位置的权重,这种优化方式对 AUC 这类评价指标比较友好,但实际的排序结果与现实的排序需求不一致,现实中的排序需求更加注重头部的相关度,排序评价指标选用 NDCG 这一类的指标才更加符合实际需求。而 RankNet 这种以优化逆序对数为目的的交叉熵损失,并不能直接或者间接优化 NDCG 这样的指标。

我们知道 NDCG 是一个不连续的函数,无法直接优化,那 LambdaRank 又是如何解决这个问题的呢?

我们必须先有这样一个洞察,对于绝大多数的优化过程来说,目标函数很多时候仅仅是为了推导梯度而存在的。而如果我们直接就得到了梯度,那自然就不需要目标函数了。

2.原理

于是,微软学者经过分析,就直接把 RankNet 最后得到的 Lambda 梯度拿来作为 LambdaRank 的梯度来用了,这也是 LambdaRank 中 Lambda 的含义。这样我们便知道了 LambdaRank 其实是一个经验算法,它不是通过显示定义损失函数再求梯度的方式对排序问题进行求解,而是分析排序问题需要的梯度的物理意义,直接定义梯度,即 Lambda 梯度。有了梯度,就不用关心损失函数是否连续、是否可微了,所以,微软学者直接把 NDCG 这个更完善的评价指标与 Lambda 梯度结合了起来,就形成了 LambdaRank。

我们来分析一下 Lambda 梯度的物理意义

lambdaRank中的lambda其实就是 RankNet 中的梯度 𝜆𝑖𝑗,𝜆𝑖𝑗 可以看成是 𝑈𝑖 和 𝑈𝑗 中间的作用力,代表下一次迭代优化的方向和强度。

对于对于特定 𝑈𝑖,累加其他所有排序项的影响,得到:

𝜆𝑖=∑(𝑖,𝑗)∈𝐼𝜆𝑖𝑗−∑(𝑗,𝑖)∈𝐼𝜆𝑖𝑗

𝜆𝑖 可以理解为⽂档 𝑈𝑖 在 query 排列中移动的⽅向和⼒度。也就是说:每条文档移动的方向和趋势取决于其他所有与之 label 不同的文档。

lambdaRank的主要突破点是:分析了梯度的物理意义;绕开了损失函数,直接定义梯度。

3.代码

待续ing

 

参考文献:

1.https://lumingdong.cn/learning-to-rank-in-recommendation-system.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值