排序模型(Learning to Rank)
要解决的问题
排序模型旨在解决信息检索中的排序优化问题。例如:
- 搜索引擎中对候选网页的排序
- 推荐系统中物品的展示顺序
- 广告系统中广告位的分配
核心挑战:根据上下文特征,将最相关/最有价值的内容排列在更靠前的位置。
主要方法
1. Pointwise
核心思想
Pointwise方法将排序问题转化为单文档的监督学习任务,通过直接预测每个文档的绝对相关性分数实现排序。其本质是将排序问题拆解为:
- 回归任务:预测连续的相关性得分(如CTR预估)
- 分类任务:预测离散的相关性等级(如0-4星分级)
算法原理
1. 问题建模
对于查询query ( q ) 对应的文档集合 ( D = {d_1, d_2,…,d_n} ):
- 每个文档 ( d_i ) 被表示为特征向量 ( x_i \in \mathbb{R}^m )
- 标注数据为 ( y_i \in \mathbb{R} )(回归)或 ( y_i \in {0,1,…,k} )(分类)
- 目标函数:学习映射 ( f: x_i \rightarrow \hat{y_i} )
2. 特征工程
典型特征包括:
- Query-Doc匹配特征:TF-IDF、BM25、词向量相似度
- 文档质量特征:PageRank、点击率、停留时间
- 上下文特征:用户画像、设备类型、地理位置
3. 学习范式
# 伪代码示例
for each query in training_data:for each document in query:feature_vector = extract_features(query, doc)true_label = get_relevance_label(doc)predicted_score = model.predict(feature_vector)loss += calculate_loss(true_label, predicted_score)model.update(loss)
2. Pairwise(样本对优化)
核心思想:通过比较文档对的相对顺序进行优化。
RankNet 算法原理:
- 定义文档对 ( x i , x j ) (x_i, x_j) (xi,xj),若 y i > y j y_i > y_j yi>yj则标记为1,否则为0
- 计算得分差: s i j = f ( x i ) − f ( x j ) s_{ij} = f(x_i) - f(x_j) sij=f(xi)−f(xj)
- 用sigmoid转换概率: P i j = 1 1 + e − s i j P_{ij} = \frac{1}{1+e^{-s_{ij}}} Pij=1+e−sij1
- 交叉熵损失: L = − P i j ∗ log P i j − ( 1 − P i j ∗ ) log ( 1 − P i j ) L = -P_{ij}^*\log P_{ij} - (1-P_{ij}^*)\log(1-P_{ij}) L=−Pij∗logPij−(1−Pij∗)log(1−Pij)
改进版本:
- LambdaRank:引入NDCG梯度信息调整更新量
- LambdaMART:结合梯度提升决策树
典型算法
1. RankNet(微软,2005)
核心贡献:首次将概率模型引入pairwise排序
算法原理
-
概率建模:
定义文档 i i i比 j j j更相关的概率:
P i j = 1 1 + e − σ ( s i − s j ) P_{ij} = \frac{1}{1+e^{-\sigma(s_i-s_j)}} Pij=1+e−σ(si−sj)1,其中 s i = f ( x i ) s_i=f(x_i) si=f(xi), σ \sigma σ为缩放因子(默认为1) -
损失函数:
L = − P ˉ i j log P i j − ( 1 − P ˉ i j ) log ( 1 − P i j ) L = -\bar{P}_{ij}\log P_{ij} - (1-\bar{P}_{ij})\log(1-P_{ij}) L=−PˉijlogPij−(1−Pˉij)log(1−Pij),其中 P ˉ i j \bar{P}_{ij} Pˉij为真实概率(1或0) -
梯度计算:
∂ L ∂ w = σ ( ∂ ( s i − s j ) ∂ w ) ( P i j − P ˉ i j ) \frac{\partial L}{\partial w} = \sigma\left( \frac{\partial (s_i-s_j)}{\partial w} \right)(P_{ij}-\bar{P}_{ij}) ∂w∂L=σ(∂w∂(si−sj))(Pij−Pˉij)
实现细节
- 使用神经网络作为基础模型
- 采用mini-batch训练,每个batch包含多个文档对
- 实际应用中通过负采样减少计算量
2. LambdaRank(微软,2006)
核心改进:将排序指标(如NDCG)的梯度信息融入优化过程
关键创新
-
Lambda梯度:
λ i j = Δ N D C G ∣ s i − s j ∣ ⋅ ∂ L ∂ ( s i − s j ) \lambda_{ij} = \frac{\Delta NDCG}{|s_i-s_j|} \cdot \frac{\partial L}{\partial (s_i-s_j)} λij=∣si−sj∣ΔNDCG⋅∂(si−sj)∂L,其中 Δ N D C G \Delta NDCG ΔNDCG表示交换 i , j i,j i,j位置带来的NDCG变化 -
参数更新:
w ← w − η ( λ i ∂ s i ∂ w − λ j ∂ s j ∂ w ) w \leftarrow w - \eta (\lambda_i \frac{\partial s_i}{\partial w} - \lambda_j \frac{\partial s_j}{\partial w}) w←w−η(λi∂w∂si−λj∂w∂sj)
优势分析
- 直接优化排序指标而非概率损失
- 通过 Δ N D C G \Delta NDCG ΔNDCG实现位置感知优化
- 在Web搜索任务中NDCG提升达15-30%
3. LambdaMART(微软+Yahoo!,2010)
算法融合:将Lambda梯度与GBDT结合,连续8年主宰排序竞赛
实现步骤
- 计算Lambda矩阵:
- 对每个文档计算: λ i = ∑ j ≠ i Δ N D C G i j 1 + e s i − s j \lambda_i = \sum_{j \neq i} \frac{\Delta NDCG_{ij}}{1+e^{s_i-s_j}} λi=∑j=i1+esi−sjΔNDCGij
- 构建决策树:
- 用GBDT拟合残差 λ i \lambda_i λi
- 每棵树分裂时最大化梯度方差减少
- 模型预测:
- s i = ∑ t = 1 T η h t ( x i ) s_i = \sum_{t=1}^T \eta h_t(x_i) si=∑t=1Tηht(xi),其中 h t h_t ht为第t棵树, η \eta η为学习率
性能表现
数据集 | NDCG@10 | 训练时间 | 树深度 |
---|---|---|---|
Yahoo! LTR | 0.783 | 4.2h | 8 |
MSLR-WEB30K | 0.521 | 11.3h | 12 |
3. Listwise(列表整体优化)
核心思想:直接优化整个文档列表的排序质量。
LambdaMART 原理:
- 计算每个文档的lambda梯度:
λ i = ∑ j ≠ i Δ N D C G ∣ s i − s j ∣ ( I y i > y j − P i j ) \lambda_i = \sum_{j \neq i} \frac{\Delta NDCG}{|s_i - s_j|}(I_{y_i>y_j} - P_{ij}) λi=∑j=i∣si−sj∣ΔNDCG(Iyi>yj−Pij) - 使用MART(Multiple Additive Regression Trees)进行梯度提升
- 通过多轮决策树拟合残差
ListNet 方法:
- 计算排列概率: P ( π ) = ∏ i = 1 n ϕ ( s i ) ∑ k = i n ϕ ( s k ) P(\pi) = \prod_{i=1}^n \frac{\phi(s_i)}{\sum_{k=i}^n \phi(s_k)} P(π)=∏i=1n∑k=inϕ(sk)ϕ(si)
- 使用Top-One近似简化计算
- 最小化预测分布与真实分布的交叉熵
评估指标
1. NDCG(Normalized Discounted Cumulative Gain)
计算步骤:
- 累积增益: C G @ k = ∑ i = 1 k r e l i CG@k = \sum_{i=1}^k rel_i CG@k=∑i=1kreli
- 折损CG: D C G @ k = ∑ i = 1 k r e l i log 2 ( i + 1 ) DCG@k = \sum_{i=1}^k \frac{rel_i}{\log_2(i+1)} DCG@k=∑i=1klog2(i+1)reli
- 归一化: N D C G @ k = D C G @ k I D C G @ k NDCG@k = \frac{DCG@k}{IDCG@k} NDCG@k=IDCG@kDCG@k (IDCG为理想排序的DCG)
特点:
- 考虑位置衰减效应
- 支持多级相关性(0-4分)
- 常用在推荐系统评估
2. MAP(Mean Average Precision)
计算过程:
- 计算每个查询的AP: A P = ∑ k = 1 n P ( k ) ⋅ r e l ( k ) 相关文档总数 AP = \frac{\sum_{k=1}^n P(k) \cdot rel(k)}{相关文档总数} AP=相关文档总数∑k=1nP(k)⋅rel(k)
- 对所有查询取平均: M A P = 1 Q ∑ q = 1 Q A P q MAP = \frac{1}{Q}\sum_{q=1}^Q AP_q MAP=Q1∑q=1QAPq
侧重点:
- 强调相关文档的整体排序质量
- 常用于二值相关性场景
3. MRR(Mean Reciprocal Rank)
计算公式:
M R R = 1 Q ∑ i = 1 Q 1 r a n k i MRR = \frac{1}{Q}\sum_{i=1}^Q \frac{1}{rank_i} MRR=Q1∑i=1Qranki1
特点:
- 只关注第一个相关结果的位置
- 适用于问答系统等场景
指标对比
指标 | 相关性类型 | 位置敏感 | 典型场景 |
---|---|---|---|
NDCG | 多级 | 是 | 推荐系统 |
MAP | 二值 | 部分 | 文档检索 |
MRR | 二值 | 强 | 问答系统 |