当前位置: 首页 > news >正文

排序模型(Learning to Rank)

排序模型(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 算法原理

  1. 定义文档对 ( x i , x j ) (x_i, x_j) (xi,xj),若 y i > y j y_i > y_j yi>yj则标记为1,否则为0
  2. 计算得分差: s i j = f ( x i ) − f ( x j ) s_{ij} = f(x_i) - f(x_j) sij=f(xi)f(xj)
  3. 用sigmoid转换概率: P i j = 1 1 + e − s i j P_{ij} = \frac{1}{1+e^{-s_{ij}}} Pij=1+esij1
  4. 交叉熵损失: 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=PijlogPij(1Pij)log(1Pij)

改进版本

  • LambdaRank:引入NDCG梯度信息调整更新量
  • LambdaMART:结合梯度提升决策树

典型算法

1. RankNet(微软,2005)

核心贡献:首次将概率模型引入pairwise排序

算法原理
  1. 概率建模
    定义文档 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σ(sisj)1,其中 s i = f ( x i ) s_i=f(x_i) si=f(xi) σ \sigma σ为缩放因子(默认为1)

  2. 损失函数
    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(1Pˉij)log(1Pij),其中 P ˉ i j \bar{P}_{ij} Pˉij为真实概率(1或0)

  3. 梯度计算
    ∂ 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}) wL=σ(w(sisj))(PijPˉij)

实现细节
  • 使用神经网络作为基础模型
  • 采用mini-batch训练,每个batch包含多个文档对
  • 实际应用中通过负采样减少计算量

2. LambdaRank(微软,2006)

核心改进:将排序指标(如NDCG)的梯度信息融入优化过程

关键创新
  1. 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=sisjΔNDCG(sisj)L,其中 Δ N D C G \Delta NDCG ΔNDCG表示交换 i , j i,j i,j位置带来的NDCG变化

  2. 参数更新
    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}) wwη(λiwsiλjwsj)

优势分析
  • 直接优化排序指标而非概率损失
  • 通过 Δ N D C G \Delta NDCG ΔNDCG实现位置感知优化
  • 在Web搜索任务中NDCG提升达15-30%

3. LambdaMART(微软+Yahoo!,2010)

算法融合:将Lambda梯度与GBDT结合,连续8年主宰排序竞赛

实现步骤
  1. 计算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+esisjΔNDCGij
  2. 构建决策树
    • 用GBDT拟合残差 λ i \lambda_i λi
    • 每棵树分裂时最大化梯度方差减少
  3. 模型预测
    • 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! LTR0.7834.2h8
MSLR-WEB30K0.52111.3h12

3. Listwise(列表整体优化)

核心思想:直接优化整个文档列表的排序质量。

LambdaMART 原理

  1. 计算每个文档的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=isisjΔNDCG(Iyi>yjPij)
  2. 使用MART(Multiple Additive Regression Trees)进行梯度提升
  3. 通过多轮决策树拟合残差

ListNet 方法

  1. 计算排列概率: 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=1nk=inϕ(sk)ϕ(si)
  2. 使用Top-One近似简化计算
  3. 最小化预测分布与真实分布的交叉熵

评估指标

1. NDCG(Normalized Discounted Cumulative Gain)

计算步骤

  1. 累积增益: C G @ k = ∑ i = 1 k r e l i CG@k = \sum_{i=1}^k rel_i CG@k=i=1kreli
  2. 折损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
  3. 归一化: 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)

计算过程

  1. 计算每个查询的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)
  2. 对所有查询取平均: M A P = 1 Q ∑ q = 1 Q A P q MAP = \frac{1}{Q}\sum_{q=1}^Q AP_q MAP=Q1q=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=Q1i=1Qranki1

特点

  • 只关注第一个相关结果的位置
  • 适用于问答系统等场景

指标对比

指标相关性类型位置敏感典型场景
NDCG多级推荐系统
MAP二值部分文档检索
MRR二值问答系统

相关文章:

  • 检测IP地址欺诈风险“Scamalytics”
  • 深度解析算法之位运算
  • 无人船 | 图解基于PID控制的路径跟踪算法(以全驱动无人艇WAMV为例)
  • Floyd算法求解最短路径问题——从零开始的图论讲解(3)
  • 信息学奥赛一本通 1504:【例 1】Word Rings | 洛谷 SP2885 WORDRING - Word Rings
  • 聊透多线程编程-线程互斥与同步-12. C# Monitor类实现线程互斥
  • 华为数字化转型“三阶十二步法“:战略驱动、系统布局与敏捷落地的实践框架
  • spark和Hadoop的区别与联系
  • 前端框架开发编译阶段与运行时的核心内容详解Tree Shaking核心实现原理详解
  • 主流大模型(如OpenAI、阿里云通义千问、Anthropic、Hugging Face等)调用不同API的参数说明及对比总结
  • 解决方案评测|告别复杂配置!基于阿里云云原生应用开发平台CAP快速部署Bolt.diy
  • springboot对接阿里云大模型
  • 红队专题-漏洞挖掘-代码审计-反序列化
  • Semaphore的核心机制
  • Linux `init 6` 相关命令的完整使用指南
  • Java之封装(学习笔记)
  • Redis 哨兵与集群脑裂问题详解及解决方案
  • string类(详解)
  • 【AI+HR实战应用】用DeepSeek提升HR工作效能
  • STM32时钟树
  • 金价新高不断,上金所再发风险提示,黄金能否持续闪耀?
  • 全国登记在册民营企业超过5700万户,占企业总量92.3%
  • 圆桌|耐心资本对科技创新有何意义?天使投资最关注哪些要素?
  • “30小时不够”,泽连斯基建议延长停火至30天
  • 拒绝“假期刺客”,澎湃启动“五一”消费维权线索征集
  • 2025年世界互联网大会亚太峰会人工智能大模型论坛举行