Listwise 排序之 LambdaRank:最大化 NDCG 的秘诀

news2025/1/5 9:18:05

Listwise系列相关文章(置顶)

1.Listwise 模型时间线梳理
2.Listwise 排序之 LambdaRank:最大化 NDCG 的秘诀


引言

LambdaRank 是一种用于排序学习(Learning to Rank, LTR)的模型,特别适用于推荐系统和信息检索任务。它通过直接优化排序评价指标(如 NDCG),确保模型的学习目标与实际应用目标一致。LambdaRank 的核心思想是使用梯度下降法来最小化损失函数,从而调整商品评分,使得高相关性的商品排在前面。

在这里插入图片描述


1. 背景与动机

传统的排序学习方法通常使用点对点或列表级别的损失函数,但这些方法往往不能直接优化最终的排序评价指标(如 NDCG)。LambdaRank 通过引入 Lambda 权重 λ i j \lambda_{ij} λij,能够直接优化 NDCG 等排序评价指标,从而更有效地捕捉用户的偏好和行为模式。

传统排序学习方法为何不能直接优化 NDCG ?

要理解为什么传统排序学习方法(如点对点、点级和列表级方法)不能直接优化最终的排序评价指标(如 NDCG),需要深入探讨这些方法的工作原理及其局限性。NDCG 是一种衡量推荐列表质量的全局评价指标,而传统方法在设计上往往侧重于局部优化或使用间接手段,导致它们难以直接针对 NDCG 进行优化。

1.1 NDCG 的特点

NDCG(Normalized Discounted Cumulative Gain)是一种常用的排序质量评估标准,用于衡量推荐列表中相关商品的位置分布情况。具体解释可以参考笔者文章 【召回评价指标NDCG、MAP】其公式如下:

DCG = ∑ i = 1 n 2 r e l i − 1 log ⁡ 2 ( i + 1 ) \text{DCG} = \sum_{i=1}^{n} \frac{2^{rel_i} - 1}{\log_2(i+1)} DCG=i=1nlog2(i+1)2reli1

NDCG = DCG IDCG \text{NDCG} = \frac{\text{DCG}}{\text{IDCG}} NDCG=IDCGDCG

  • r e l i rel_i reli 是第 i i i 个商品的相关性得分。
  • n n n 是推荐列表的长度。
  • IDCG \text{IDCG} IDCG 是理想情况下的 DCG 值,即所有相关商品都排在最前面。

NDCG 考虑了每个商品的相关性得分,并根据其位置进行了折扣处理。排在前面的商品有更高的权重,因此如果高相关性的商品排在前面,NDCG 值会更高。这是一个全局评价指标,因为它考虑了整个推荐列表的整体结构和位置分布。

1.2 传统排序学习方法的局限性
1.2.1 点对点方法(Pairwise Methods)
  • 工作原理:这类方法通过比较商品对之间的相对顺序来优化模型。例如,如果商品 A A A 应该排在商品 B B B 前面,则损失函数会惩罚不正确的排序。
  • 局限性
    • 局部优化:只关注商品对之间的相对顺序,而忽略了整个列表的整体质量。这种方法无法直接捕捉到 NDCG 所需的全局信息,因为它没有考虑商品在整个列表中的具体位置。
    • 难以直接优化全局评价指标:由于 NDCG 是一个全局评价指标,依赖于所有商品的位置分布,而点对点方法只能优化局部的相对顺序,因此难以直接优化 NDCG。
1.2.2 点级方法(Pointwise Methods)
  • 工作原理:这类方法将排序问题视为回归或分类问题,直接预测每个商品的相关性得分。
  • 局限性
    • 忽略相对顺序:只关注单个商品的相关性得分,忽略了商品之间的相对顺序。这种方法无法有效捕捉到 NDCG 所需的全局信息,因为它没有考虑商品在整个列表中的相对位置。
    • 难以捕捉全局信息:NDCG 不仅取决于单个商品的相关性得分,还取决于它们在整个列表中的位置分布。点级方法无法有效捕捉这种全局信息。
1.2.3 列表级方法(Listwise Methods)
  • 工作原理:这类方法直接优化整个推荐列表的质量,通常使用复杂的损失函数来评估整个列表的表现。
  • 局限性
    • 计算复杂度高:需要同时考虑多个商品的相对顺序,计算复杂度较高,尤其是在推荐列表较长的情况下。
    • 难以解释:损失函数复杂,难以直观理解其优化过程,且不一定能直接对应到 NDCG 等具体的评价指标。
    • 间接优化:虽然列表级方法试图优化整个列表的质量,但它们使用的损失函数通常是基于其他评价指标(如交叉熵等),而不是直接针对 NDCG 进行优化。
1.3. LambdaRank 的优势

LambdaRank 通过引入 Lambda 权重 λ i j \lambda_{ij} λij,能够直接优化 NDCG 等排序评价指标,从而克服了传统方法的局限性。具体优势如下:

  • 直接优化 NDCG:通过引入 Lambda 权重,LambdaRank 衡量交换商品 i i i 和商品 j j j 的位置对 NDCG 的影响。如果交换这对商品的位置会导致 NDCG 显著下降,那么 λ i j \lambda_{ij} λij 的值会较大,确保模型更关注这对商品的相对顺序。
  • 全局与局部结合:通过求和符号 ∑ i , j \sum_{i,j} i,j,LambdaRank 遍历所有商品对,确保模型从全局角度优化整个推荐列表的排序质量。
  • 高效计算:虽然涉及所有商品对,但通过引入 λ i j \lambda_{ij} λij,模型可以忽略那些对 NDCG 影响较小的商品对,提高计算效率。
  • 稳定更新:通过 Sigmoid 函数将评分差值映射到概率空间,避免极端值对模型的影响,使得参数更新更加稳定和合理。
1.4. 总结

传统排序学习方法(如点对点、点级和列表级方法)之所以不能直接优化 NDCG,主要是因为它们在设计上侧重于局部优化或使用间接手段,无法有效捕捉 NDCG 所需的全局信息。LambdaRank 通过引入 Lambda 权重和精心设计的损失函数,能够直接优化 NDCG 等排序评价指标,确保模型的学习目标与最终的应用目标高度一致,从而更有效地捕捉用户的偏好和行为模式,提高推荐系统的性能。

2. NDCG(Normalized Discounted Cumulative Gain)

NDCG 是一种常用的排序质量评估标准,用于衡量推荐列表中相关商品的位置分布情况。其公式如下:

DCG = ∑ i = 1 n 2 r e l i − 1 log ⁡ 2 ( i + 1 ) \text{DCG} = \sum_{i=1}^{n} \frac{2^{rel_i} - 1}{\log_2(i+1)} DCG=i=1nlog2(i+1)2reli1

NDCG = DCG IDCG \text{NDCG} = \frac{\text{DCG}}{\text{IDCG}} NDCG=IDCGDCG

  • r e l i rel_i reli 是第 i i i 个商品的相关性得分。
  • n n n 是推荐列表的长度。
  • IDCG \text{IDCG} IDCG 是理想情况下的 DCG 值,即所有相关商品都排在最前面。

NDCG 考虑了每个商品的相关性得分,并根据其位置进行了折扣处理。排在前面的商品有更高的权重,因此如果高相关性的商品排在前面,NDCG 值会更高。

3. Lambda 权重

Lambda 权重 λ i j \lambda_{ij} λij 衡量了交换商品 i i i 和商品 j j j 的位置对整个推荐列表 NDCG 值的影响。具体来说:

  • 变化量 λ i j \lambda_{ij} λij 反映了交换商品 i i i 和商品 j j j 的位置后,NDCG 值的变化量。
  • 重要性:如果交换 i i i j j j 的位置会导致 NDCG 显著下降,那么 λ i j \lambda_{ij} λij 的值会较大;反之则较小。这确保了模型更关注那些对排序质量影响较大的商品对。

计算 Lambda 权重的具体公式为:

Δ NDCG i j = ( 2 r e l i − 2 r e l j ) ⋅ ( 1 log ⁡ 2 ( r j + 1 ) − 1 log ⁡ 2 ( r i + 1 ) ) \Delta \text{NDCG}_{ij} = (2^{rel_i} - 2^{rel_j}) \cdot \left( \frac{1}{\log_2(r_j + 1)} - \frac{1}{\log_2(r_i + 1)} \right) ΔNDCGij=(2reli2relj)(log2(rj+1)1log2(ri+1)1)

λ i j = ∣ Δ NDCG i j ∣ \lambda_{ij} = \left| \Delta \text{NDCG}_{ij} \right| λij=ΔNDCGij

4. 损失函数

LambdaRank 的损失函数设计是为了最小化 NDCG 下降的可能性,并最大化 NDCG 上升的可能性。具体公式如下:

L LambdaRank = − ∑ i , j λ i j ⋅ ( σ ( Δ s i j ) − σ ( − Δ s i j ) ) L_{\text{LambdaRank}} = -\sum_{i,j} \lambda_{ij} \cdot (\sigma(\Delta s_{ij}) - \sigma(-\Delta s_{ij})) LLambdaRank=i,jλij(σ(Δsij)σ(Δsij))

其中:

  • λ i j \lambda_{ij} λij 是根据 NDCG 变化量计算的权重。
  • σ ( x ) \sigma(x) σ(x) 是 Sigmoid 函数,用于将评分差值映射到概率空间。
  • Δ s i j = s i − s j \Delta s_{ij} = s_i - s_j Δsij=sisj 是商品 i i i 和商品 j j j 的评分差值。

公式说明

  • 求和符号 ∑ :遍历所有商品对,确保模型从全局角度优化整个推荐列表的排序质量。
  • 负号 - :将最大化 NDCG 的问题转化为最小化损失的问题,使得模型能够通过最小化损失函数来优化排序质量。
  • Lambda λ i j \lambda_{ij} λij:反映了交换商品 i 和 j 的位置后,NDCG 值的变化量。如果交换 后导致 NDCG 显著下降,那么 λ i j \lambda_{ij} λij​ 的值会较大;反之则较小。这确保了模型更关注那些对排序质量影响较大的商品对。
  • σ ( Δ s i j ) \sigma(\Delta s_{ij}) σ(Δsij) 相关:
    • σ ( Δ s i j ) \sigma(\Delta s_{ij}) σ(Δsij):模型认为商品 i 应该排在商品 j 前面的概率
    • σ ( − Δ s i j ) \sigma(-\Delta s_{ij}) σ(Δsij):模型认为商品 j 应该排在商品 i 前面的概率,即 σ ( Δ s j i ) \sigma(\Delta s_{ji}) σ(Δsji)
    • σ ( Δ s i j ) \sigma(\Delta s_{ij}) σ(Δsij) - σ ( − Δ s i j ) \sigma(-\Delta s_{ij}) σ(Δsij):模型对这对商品相对顺序的置信度差异。如果这个差异较大且正数,说明模型非常确信商品 i 应该排在商品 j 前面;反之则表示模型不太确定这对商品的相对顺序。

5. 评分调整与优化

为了最小化损失函数 L LambdaRank L_{\text{LambdaRank}} LLambdaRank,模型会逐步调整商品的评分,使得高相关性的商品排在前面。具体步骤如下:

5.1 计算梯度

使用梯度下降法,计算评分调整的方向和幅度。对于每个商品 i i i,其评分 s i s_i si 的梯度为:

∂ L LambdaRank ∂ s i = − ∑ j λ i j ⋅ σ ′ ( Δ s i j ) ⋅ sign ( Δ s i j ) \frac{\partial L_{\text{LambdaRank}}}{\partial s_i} = -\sum_j \lambda_{ij} \cdot \sigma'(\Delta s_{ij}) \cdot \text{sign}(\Delta s_{ij}) siLLambdaRank=jλijσ(Δsij)sign(Δsij)

其中, σ ′ ( x ) \sigma'(x) σ(x) 是 Sigmoid 函数的导数:

σ ′ ( x ) = σ ( x ) ⋅ ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x) \cdot (1 - \sigma(x)) σ(x)=σ(x)(1σ(x))

5.2 更新评分

根据梯度更新评分:

s i ← s i − η ⋅ ∂ L LambdaRank ∂ s i s_i \leftarrow s_i - \eta \cdot \frac{\partial L_{\text{LambdaRank}}}{\partial s_i} sisiηsiLLambdaRank

其中, η \eta η 是学习率,控制每次更新的步长。

假设有两个商品 A A A B B B,当前评分为 s A = 0.8 s_A = 0.8 sA=0.8 s B = 0.6 s_B = 0.6 sB=0.6,并且根据 NDCG 计算得到 λ A B = 9.24 \lambda_{AB} = 9.24 λAB=9.24

  1. 计算初始损失项

    Δ s A B = s A − s B = 0.8 − 0.6 = 0.2 \Delta s_{AB} = s_A - s_B = 0.8 - 0.6 = 0.2 ΔsAB=sAsB=0.80.6=0.2
    σ ( 0.2 ) = 1 1 + e − 0.2 ≈ 0.5498 \sigma(0.2) = \frac{1}{1 + e^{-0.2}} \approx 0.5498 σ(0.2)=1+e0.210.5498
    σ ( − 0.2 ) = 1 1 + e 0.2 ≈ 0.4502 \sigma(-0.2) = \frac{1}{1 + e^{0.2}} \approx 0.4502 σ(0.2)=1+e0.210.4502
    σ ( 0.2 ) − σ ( − 0.2 ) = 0.5498 − 0.4502 = 0.0996 \sigma(0.2) - \sigma(-0.2) = 0.5498 - 0.4502 = 0.0996 σ(0.2)σ(0.2)=0.54980.4502=0.0996
    L A B = − λ A B ⋅ ( σ ( 0.2 ) − σ ( − 0.2 ) ) = − 9.24 ⋅ 0.0996 ≈ − 0.920 L_{AB} = -\lambda_{AB} \cdot (\sigma(0.2) - \sigma(-0.2)) = -9.24 \cdot 0.0996 \approx -0.920 LAB=λAB(σ(0.2)σ(0.2))=9.240.09960.920

  2. 计算梯度

    假设经过计算后,得到以下梯度值:

    • ∂ L LambdaRank ∂ s A ≈ − 0.462 \frac{\partial L_{\text{LambdaRank}}}{\partial s_A} \approx -0.462 sALLambdaRank0.462
    • ∂ L LambdaRank ∂ s B ≈ 0.462 \frac{\partial L_{\text{LambdaRank}}}{\partial s_B} \approx 0.462 sBLLambdaRank0.462

    说明

    • 偏导数为负值:表示增加该商品的评分会降低损失函数的值,从而有助于优化排序,反之同理!!!
    • 通过梯度下降法,模型会增加高相关性商品的评分并减少低相关性商品的评分,逐步优化整个推荐列表的排序质量。
  3. 更新评分

    假设学习率为 η = 0.1 \eta = 0.1 η=0.1,则:

    • 商品 A A A 的新评分为:
      s A ← 0.8 − 0.1 ⋅ ( − 0.462 ) = 0.8 + 0.0462 = 0.8462 s_A \leftarrow 0.8 - 0.1 \cdot (-0.462) = 0.8 + 0.0462 = 0.8462 sA0.80.1(0.462)=0.8+0.0462=0.8462

    • 商品 B B B 的新评分为:
      s B ← 0.6 − 0.1 ⋅ 0.462 = 0.6 − 0.0462 = 0.5538 s_B \leftarrow 0.6 - 0.1 \cdot 0.462 = 0.6 - 0.0462 = 0.5538 sB0.60.10.462=0.60.0462=0.5538

通过上述过程,可以看到:

  • 商品 A A A 的评分增加了:因为它应该排在 B B B 前面,增加 s A s_A sA 可以降低损失函数的值,从而有助于优化排序。
  • 商品 B B B 的评分减少了:因为它应该排在 A A A 后面,减少 s B s_B sB 可以降低损失函数的值,从而有助于优化排序。

6. 总结

LambdaRank 通过引入 Lambda 权重 λ i j \lambda_{ij} λij 和精心设计的损失函数,能够高效地捕捉商品之间的相对关系,并直接优化排序评价指标(如 NDCG),从而提高推荐系统的性能。这种设计使得模型的学习目标与最终的应用目标高度一致,能够更有效地捕捉用户的偏好和行为模式,从而提高推荐系统的性能。

关键点回顾

  • NDCG:衡量推荐列表中相关商品的位置分布情况。
  • Lambda 权重:衡量交换商品对 NDCG 的影响,确保模型更关注重要的商品对。
  • 损失函数:通过最小化损失函数,模型能够逐步优化排序,使得高相关性的商品排在前面。
  • 评分调整:通过梯度下降法更新评分,逐步优化整个推荐列表的排序质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汉化SecureCRT9.1

我个人觉得,SecureCRT是最好用的ssh远程工具软件,但是这个软件没有中文版本,我这种英文水平糟糕的人用起来,略有不便,因为一直没有在网上找到合适的汉化版本,于是有自己做一个汉化版本的计划。 前几日&…

我在广州学 Mysql 系列——插入、更新与删除数据详解以及实例

ℹ️大家好,我是练小杰,今天是2024年12月30号,明天就是2024最后一天了!! 本文将讲述MYSQL数据库的插入,更新以及删除数据~~ 复习:👉【有关Mysql数据库的单表,多表查询的练…

HarmonyOS Next ArkUI ListListItem笔记

学习目标: List和ListItem的使用 学习内容: import { NewsInfo, newsInfoList } from ../viewmodel/NewsInfoclass DividerTmp {strokeWidth: Length 1startMargin: Length 60endMargin: Length 10color: ResourceColor #ffe9f0f0constructor(str…

机器人C++开源库The Robotics Library (RL)使用手册(四)

建立自己的机器人3D模型和运动学模型 这里以国产机器人天机TR8为例,使用最普遍的DH运动学模型,结合RL所需的描述文件,进行生成。 最终,需要的有两个文件,一个是.wrl三维模型描述文件;一个是.xml运动学模型描述文件。 1、通过STEP/STP三维文件生成wrl三维文件 机器人的…

游戏引擎学习第70天

这一节没讲什么主要是关于接下来要干的任务 开发过程概览 我们正在进行最后的总结,并计划接下来的步骤。目前的目标是创建一个包含所有必要组件的游戏引擎原型版本,目的是让这些部分能够协同工作并展现预期效果。通过这一过程,可以实验和探…

Android笔试面试题AI答之Android基础(8)

Android入门请看《Android应用开发项目式教程》,视频、源码、答疑,手把手教 文章目录 1.Android新建工程需要注意的地方有哪些?**1. 选择合适的项目模板****2. 配置项目基本信息****3. 选择最低 SDK 版本****4. 配置构建工具****5. 选择编程…

传统听写与大模型听写比对

在快节奏的现代生活中,听写技能仍然是学习语言和提升认知能力的重要环节。然而,传统的听写练习往往枯燥乏味,且效率不高。现在,随着人工智能技术的发展,大模型听写工具的问世,为传统听写带来了革命性的变革…

赛博周刊·2024年度工具精选(画板二维码类)

一、画板类 1、Excalidraw 一款好用的手绘工具,无需注册,支持多人协作。GitHub项目地址:https://github.com/excalidraw/excalidraw。 2、 Floating Whiteboard 一个在线的网页白板工具。 3、BoardOS:在线实时白板协作系统 一…

论文研读:Text2Video-Zero 无需微调,仅改动<文生图模型>推理函数实现文生视频(Arxiv 2023-03-23)

论文名:Text2Video-Zero: Text-to-Image Diffusion Models are Zero-Shot Video Generators 1. 摘要 1.1 方法总结 通过潜空间插值, 实现动作连续帧。 以第一帧为锚定,替换原模型的self-attention,改为cross-attention 实现 保证图片整体场…

Spring自动化创建脚本-解放繁琐的初始化配置!!!(自动化SSM整合)

一、实现功能(原创,转载请告知) 1.自动配置pom配置文件 2.自动识别数据库及数据表,创建Entity、Dao、Service、Controller等 3.自动创建database.properties、mybatis-config.xml等数据库文件 4.自动创建spring-dao.xml spring-mvc.xml …

Unity3D仿星露谷物语开发12之创建道具列表

1、目标 道具是游戏的核心部分,道具包括你可以拾取的东西,你可以使用的工具和你能种的东西等。 本节就是创建道具的信息类。同时了解ScriptableObject类的使用。 2、创建道具枚举类 修改Assets -> Scripts -> Enums.cs脚本, 新增如…

华为配置 之 RIP

简介: RIP(路由信息协议)是一种广泛使用的内部网关协议,基于距离向量算法来决定路径。它通过向全网广播路由控制信息来动态交换网络拓扑信息,从而计算出最佳路由路径。RIP易于配置和理解,非常适用于小型网络…

使用new String(“yupi”)语句在Java中会创建多少个对象?

在 Java 编程中,字符串的处理是一个常见且重要的部分。理解字符串对象的创建和内存管理对于编写高效和优化的代码至关重要。当我们在 Java 中使用 new String("yupi") 语句时,实际上会涉及到多个对象的创建。本文将详细解释这一过程&#xff0…

vue使用el-select下拉框自定义复选框

在 Vue 开发中,高效且美观的组件能极大地提升用户体验和开发效率。在vue中使用elementplus 的 el-select下拉框实现了一个自定义的多选下拉框组件。 一、代码功能概述 这段代码创建了一个可多选的下拉框组件,通过el-select和el-checkbox-group结合的方…

Python基于EasyOCR进行路灯控制箱图像文本识别项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着城市化进程的加快,智能城市建设成为了现代社会发展的重要方向。路灯作为城市基础设…

TDengine 新功能 VARBINARY 数据类型

1. 背景 VARBINARY 数据类型用于存储二进制数据,与 MySQL 中的 VARBINARY 数据类型功能相同,VARBINARY 数据类型长度可变,在创建表时指定最大字节长度,使用进按需分配存储,但不能超过建表时指定的最大值。 2. 功能说明…

使用位操作符实现加减乘除!

欢迎拜访:雾里看山-CSDN博客 本篇主题:使用位操作符实现加减乘除 发布时间:2025.1.1 隶属专栏:C语言 目录 位操作实现加法运算()原理代码示例 位操作实现减法运算(-)原理代码示例 位…

基于SpringBoot的题库管理系统的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

MATLAB条件判断(switch-case-otherwise-end型)

在条件判断时,遇到很多个条件,如果再用 i f − e l s e if-else if−else语句就显得很繁琐,所以我们可以用 s w i t c h switch switch来解决 结构: 判断对象可以为数字,也可以为字符 如图: 注意&#x…

windows文件夹自定义右键调用powershell完成7zip加密打包

准备powershell脚本 2. regedit的路径是:计算机\HKEY_CLASSES_ROOT\Directory\shell\,在此项目下新增子项目diy_command\command,command的数据值为powershell D:\windowsProjects\directory_diy.ps1 %1 效果,点击后进入和power…