LTR 之RankNet、LambdaRank、LambdaMART
RankNet
ranknet 是一个pairwise的排序模型,他相比pointwise把样本排序问题只考虑query与doc的相关性改编为文档对的比较问题,更好的利用了样本中的偏序关系
排序概率
ranknet首先计算文档对的排序关系,如有文档对(di, dj),并且文档i与query的相关性大于文档j的概率表示如下:
同时ranknet证明了只要知道相邻文档的排序概率,就可以推导出任何两个文档的排序概率,这样可以减少计算。
损失函数
其中
s表示文档与query相关的得分,感兴趣的可以推导一下,这就是简单的交叉熵损失函数。
计算总的损失还需加和所有的文档对的损失,最后用梯度下降法求解
LambdaRank
图中线条表示文档,蓝色线条表示相关文档,直接通过位序减法得到的损失左边为13,右边为11,在常用的排序指标如NDCG等,通常关注topK的排序,而对后面的排序不太关注,右边黑色的箭头表示ranknet下次梯度下降后的调整方向与强度,而我们实际需要的是红色箭头这样的调整,更关注top排序。为此,研究人员分析了排序问题的梯度的物理意义,采取了直接定义梯度,而不是通过定义损失函数求解的方法。
首先,对原有损失函数求梯度分析,分解因式链式求导
在训练数据中,一般要求Sij=1,所以
之前说了,LambdaRank不再显式定义损失函数,再求梯度,而是直接定义梯度,然后反推损失函数。
这里通过前述对原损失函数的求解,LambdaRank直接定义
加的因子考虑了交换文档i和文档j的排序后的NDCG的变化,然后反推损失函数如下
LambdaRank相比RankNet的优势在于分解因式后训练速度变快,同时考虑了评价指标,直接对问题求解,效果更明显。
LambdaMART
LambdaRank重新定义了梯度,赋予了梯度新的物理意义,因此,所有可以采用梯度下降法求解的模型都可以使用这个梯度,MART就是其中一种
要搞懂这个算法步骤,建议先看看GBDT的推导原理,基本相同。
其中单个文档的lambda
得到后计算其对wi的导数,用于采取牛顿法求解叶子结点的输出值,同时创建新的回归数拟合梯度,更新模型
提供一个讲解GBDT推导比较好的博客链家
https://www.cnblogs.com/ScorpioLu/p/8296994.html