作者:拍友2502875873 | 来源:互联网 | 2024-12-18 12:30
本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。
### 1. 算法背景
#### 1.1 LambdaMART的发展历程
LambdaMART是一种用于排序的机器学习算法,属于Learning to Rank (LTR)算法的一种。LTR算法主要分为三类:Pointwise、Pairwise和Listwise。Pointwise和Pairwise类型的LTR算法将排序问题转化为回归或分类问题,而Listwise类型的LTR算法则将整个查询结果作为一个整体进行处理。
LambdaMART是一种Listwise类型的LTR算法,它结合了LambdaRank和MART(Multiple Additive Regression Trees)算法,将搜索引擎结果排序问题转化为回归决策树问题。MART实际上就是梯度提升决策树(GBDT)算法。GBDT的核心思想是在每次迭代中,新的回归决策树模型拟合损失函数的梯度,最终将所有回归决策树叠加得到最终模型。LambdaMART使用一个特殊的Lambda值来代替梯度,从而将LambdaRank和MART结合起来。
#### 1.2 RankNet
RankNet的创新之处在于将无法直接求梯度的排序问题转化为对概率的交叉熵损失函数的优化问题,从而适用于梯度下降方法。RankNet不直接学习每个文档的相关性,而是比较两个文档的相关性。具体来说,RankNet将相关性定义为:
\[ P(u1 > u2) = 1; P(u1 = u2) = 0.5; P(u1
其中,1、0、-1分别表示不同文档之间的相对相关性。具体的相似度衡量公式为:
\[ P_{ij} ≡ P(Ui ⊳ Uj) ≡ \frac{1}{1 + e^{-σ(s_i - s_j)}} \]
其中,\( s_i \) 和 \( s_j \) 是文档 \( x_i \) 和 \( x_j \) 的评分,通过一个带参数的评分函数得到。RankNet使用交叉熵作为损失函数:
\[ L = (1 - S_{ij})σ(s_i - s_j) + \log(1 + e^{-σ(s_i - s_j)}) \]
尽管RankNet优化了pair-wise error,但它并不关心最相关的文档是否排在最前面。因此,LambdaRank应运而生。
#### 1.3 LambdaRank
LambdaRank通过引入Lambda值来优化排序问题。Lambda值可以看作是文档之间的作用力。如果 \( U_i ⊳ U_j \),则 \( U_j \) 会给 \( U_i \) 向上的推动力,大小为 \( |\lambda_{ij}| \),而 \( U_i \) 会给 \( U_j \) 向下的推动力,大小也为 \( |\lambda_{ij}| \)。为了将NDCG等评价指标加入到排序结果之间的推动力中,可以直接用 \( |ΔNDCG| \) 乘以原来的 \( \lambda_{ij} \):
\[ \lambda_{ij} = |ΔNDCG| \times \lambda_{ij} \]
其中,\( |ΔNDCG| \) 是交换排序结果 \( U_i \) 和 \( U_j \) 得到的NDCG差值。NDCG倾向于将排名高且相关性高的文档更快地向上推动,而排名低且相关性低的文档则较慢地向上推动。
### 2. LambdaMART原理
LambdaMART = LambdaRank + MART。MART是一个算法框架,需要一个梯度,而LambdaRank提供了一个可以将NDCG等指标进行优化的梯度。组合后的LambdaMART伪代码如下所示:
```
初始化模型 F_0(x)
for m in range(M):
计算残差 r_{im}
训练一个新的回归树 h_m(x) 来拟合残差 r_{im}
更新模型 F_m(x) = F_{m-1}(x) + v * h_m(x)
```
### 3. 源码解析
#### 3.1 Lambda值的计算
Lambda值的计算是LambdaMART的核心部分,涉及到NDCG的计算和文档之间的相对作用力。
#### 3.2 训练回归树
在每次迭代中,LambdaMART会训练一个新的回归树来拟合当前的残差。这些回归树最终会被叠加起来形成最终的模型。
### 参考资料
- [RankNet and LambdaRank and LambdaMART: A Tutorial](https://www.jianshu.com/p/a23f33b58633)