推荐系统重排:MMR 多样性算法

news/2025/1/11 15:41:07/

MMR_1">和谐共存:相关性与多样性在MMR中共舞

推荐系统【多样性算法】系列文章(置顶)

1.推荐系统重排MMR 多样性算法
2.推荐系统重排:DPP 多样性算法

引言

在信息检索和推荐系统中,提供既与用户查询高度相关的文档或项目,同时确保结果的多样性是一个关键挑战。最大边际相关性(Maximum Marginal Relevance, MMR)是一种旨在解决这一问题的算法。本文将深入探讨MMR的工作原理、公式解析、实现细节,并通过具体案例说明其应用价值。
在这里插入图片描述


一、 背景

最大边际相关性(Maximum Marginal Relevance, MMR算法是由Jaime CarbonellJeffrey Goldstein1998年 提出的。Carbonell 是卡内基梅隆大学计算机科学系的教授,而 Goldstein 当时是他的博士生。

在1990年代末期,随着互联网的迅速发展和数字内容的爆炸式增长,信息检索系统面临着一个新的挑战:如何在提供大量相关结果的同时避免冗余和重复。传统的信息检索方法主要关注于提高结果的相关性,即返回尽可能多的与用户查询匹配的内容。然而,这种方法可能会导致结果中存在大量相似度极高的项目,从而降低了用户体验。

此外,在文本摘要生成领域,研究者们也遇到了类似的问题——自动生成的摘要中可能包含过多重复的信息,无法有效地传达文档的主要观点。为了解决这些问题,Carbonell 和 Goldstein 提出了MMR算法,旨在平衡相关性和多样性,以提升信息检索和自动摘要的质量。

MMR最初被设计用于解决文本摘要中的重复问题,但其理念很快就被推广到更广泛的领域,如搜索引擎优化、社交媒体内容推荐、在线广告投放等。通过MMR算法,不仅可以确保推荐或检索的结果高度相关,还能增加结果的多样性,使得提供的信息更加丰富和个性化,满足用户的多样化需求。

二、算法介绍

1. 相关背景补充 – 相对补集

1.1 定义

在集合论中,相对补集(也称为差集)是指从一个集合 A A A中移除所有属于另一个集合 B B B的元素后剩下的元素组成的集合。换句话说,它包含那些仅属于集合 A A A但不属于集合 B B B的元素。如果集合 A A A和集合 B B B是两个给定的集合,那么 A A A相对于 B B B的相对补集通常记作 A ∖ B A \setminus B AB A − B A - B AB

1.2 表示方法
  • 符号表示 A ∖ B A \setminus B AB
  • 读法:A减去B 或 A相对于B的相对补集
  • 数学定义 A ∖ B = { x ∣ x ∈ A and  x ∉ B } A \setminus B = \{ x | x \in A \text{ and } x \notin B \} AB={xxA and x/B}
1.3 具体例子

考虑以下两个集合:

  • A = { 1 , 2 , 3 , 4 , 5 } A = \{1, 2, 3, 4, 5\} A={1,2,3,4,5}
  • B = { 3 , 4 , 6 } B = \{3, 4, 6\} B={3,4,6}

根据相对补集的定义,我们可以计算 A ∖ B A \setminus B AB

  • A ∖ B = { 1 , 2 , 5 } A \setminus B = \{1, 2, 5\} AB={1,2,5}

这是因为1、2和5是唯一存在于集合 A A A中但不在集合 B B B中的元素。

同样地,我们也可以计算 B ∖ A B \setminus A BA

  • B ∖ A = { 6 } B \setminus A = \{6\} BA={6}

这是因为6是唯一存在于集合 B B B中但不在集合 A A A中的元素。

MMR_53">2. MMR算法

2.1 公式

这个公式是用于最大边际相关性(Maximum Marginal Relevance, MMR)的计算,常用于信息检索和自然语言处理中,以实现搜索结果的多样化。以下是公式的详细解释:

MMR = def arg max ⁡ D i ∈ R ∖ S [ λ ⋅ Sim 1 ( D i , Q ) − ( 1 − λ ) ⋅ max ⁡ D j ∈ S Sim 2 ( D i , D j ) ] \text{MMR} \stackrel{\text{def}}{=} \underset{D_i \in R \setminus S}{\operatorname{arg\,max}} \left[ \lambda \cdot \text{Sim}_1(D_i, Q) - (1 - \lambda) \cdot \max_{D_j \in S} \text{Sim}_2(D_i, D_j) \right] MMR=defDiRSargmax[λSim1(Di,Q)(1λ)DjSmaxSim2(Di,Dj)]

2.2 公式解读
  1. MMR \text{MMR} MMR:

    • 这表示通过最大化MMR得分选择的文档 D i D_i Di
  2. arg max ⁡ D i ∈ R ∖ S \underset{D_i \in R \setminus S}{\operatorname{arg\,max}} DiRSargmax:

    • 这部分从集合 R ∖ S R \setminus S RS2.2.1中的相对补集)中选择文档 D i D_i Di。这里 R R R 是所有文档的集合, S S S 是已经选择的文档集合。 arg max ⁡ \operatorname{arg\,max} argmax 操作符找到使括号内表达式最大化的文档 D i D_i Di
  3. λ ⋅ Sim 1 ( D i , Q ) \lambda \cdot \text{Sim}_1(D_i, Q) λSim1(Di,Q):

    • λ \lambda λ 是一个介于0和1之间的权重因子。
    • Sim 1 ( D i , Q ) \text{Sim}_1(D_i, Q) Sim1(Di,Q) 是文档 D i D_i Di 和查询 Q Q Q 之间的相似度分数。这部分确保选择的文档与查询相关。
  4. ( 1 − λ ) ⋅ max ⁡ D j ∈ S Sim 2 ( D i , D j ) (1 - \lambda) \cdot \max_{D_j \in S} \text{Sim}_2(D_i, D_j) (1λ)maxDjSSim2(Di,Dj):

    • ( 1 − λ ) (1 - \lambda) (1λ) 是另一个权重因子,与 λ \lambda λ 互补。
    • max ⁡ D j ∈ S Sim 2 ( D i , D j ) \max_{D_j \in S} \text{Sim}_2(D_i, D_j) maxDjSSim2(Di,Dj) 是文档 D i D_i Di 与集合 S S S 中任意文档 D j D_j Dj 之间的最大相似度分数。这部分确保选择的文档与已选文档之间有足够的差异性。

敲黑板,划重点

  • MMR 的目标是在确保文档与查询相关的同时,增加文档之间的多样性。
  • λ \lambda λ 参数控制了相关性和多样性的平衡:
    • 如果 λ \lambda λ 接近1,则公式更侧重于相关性。
    • 如果 λ \lambda λ 接近0,则公式更侧重于多样性。
2.2.3 举个 🌰

假设我们有一组文档 R = { D 1 , D 2 , D 3 , D 4 } R = \{D_1, D_2, D_3, D_4\} R={D1,D2,D3,D4} 和一个查询 Q Q Q。假设 S = { D 1 } S = \{D_1\} S={D1} 是已经选择的文档集合。我们需要选择下一个要添加到 S S S 中的文档。

  • 计算每个 D i ∈ R ∖ S = { D 2 , D 3 , D 4 } D_i \in R \setminus S = \{D_2, D_3, D_4\} DiRS={D2,D3,D4} 与查询 Q Q Q 的相似度 Sim 1 ( D i , Q ) \text{Sim}_1(D_i, Q) Sim1(Di,Q)
  • 计算每个 D i ∈ R ∖ S D_i \in R \setminus S DiRS 与集合 S S S 中的文档 D 1 D_1 D1 的相似度 Sim 2 ( D i , D 1 ) \text{Sim}_2(D_i, D_1) Sim2(Di,D1)
  • 使用公式计算每个 D i D_i DiMMR 得分。
  • 选择 MMR 得分最高的文档。

这个过程确保了选择的文档既与查询相关,又与其他已选文档具有足够的差异性,从而提供了一组平衡的结果。

三、案例分析:电影推荐系统

假设我们正在构建一个电影推荐系统,用户喜欢科幻片,但不希望看到太多来自同一个导演的作品。我们的目标是使用MMR算法来挑选出既符合用户偏好的几部电影,同时确保这些电影出自不同的导演,以提供多样化的内容。

给定数据:
  • 查询(Query, Q Q Q:用户偏好为“科幻”。
  • 候选文档集合(Candidate Set, R R R:包含10部不同导演的科幻电影。
  • 已选文档集合(Selected Set, S S S:开始时为空集 S = { } S = \{\} S={}
  • 相似度函数(Similarity Function, s i m ( x , y ) sim(x, y) sim(x,y):衡量两部电影之间的相似性,基于导演、演员、类型等因素。
  • 相关性函数(Relevance Function, s i m ( Q , i ) sim(Q, i) sim(Q,i):衡量每部电影与用户偏好的匹配程度。
  • 平衡参数(Lambda, λ \lambda λ:设定为0.7,意味着更重视相关性,但仍保留一定多样性。
MMR_109">MMR公式:

[ MMR(i) = \lambda \cdot sim(Q, i) - (1-\lambda) \cdot max_{j \in S} sim(i, j) ]

步骤 1:初始化
  • S = { } S = \{\} S={},即尚未选择任何电影。
MMR_115">步骤 2:计算每个候选项的MMR得分

对于 R ∖ S R \setminus S RS中的每一部电影,根据上述公式计算其MMR得分。假设计算结果如下(简化版):

电影编号 s i m ( Q , i ) sim(Q, i) sim(Q,i) m a x j ∈ S s i m ( i , j ) max_{j \in S} sim(i, j) maxjSsim(i,j)MMR得分
10.9N/A0.63
20.85N/A0.595
100.7N/A0.49

注意,在第一次迭代中,由于 S S S为空,所以 m a x j ∈ S s i m ( i , j ) max_{j \in S} sim(i, j) maxjSsim(i,j)对所有候选项都为N/A,因此MMR得分仅由相关性决定。

步骤 3:选择最优项

从表中可以看到,电影1的MMR得分最高,因此我们将它加入到 S S S中: S = { 1 } S = \{1\} S={1}

步骤 4:迭代更新

重复步骤2和3,直到满足特定条件,如达到预设的结果数量或者没有合适的候选项为止。在每次迭代中,重新计算 R ∖ S R \setminus S RS中每个候选项的MMR得分,并考虑它们与 S S S中已有电影的相似性。例如,第二次迭代可能如下所示:

电影编号 s i m ( Q , i ) sim(Q, i) sim(Q,i) m a x j ∈ S s i m ( i , j ) max_{j \in S} sim(i, j) maxjSsim(i,j)MMR得分
20.850.30.525
100.70.20.44

最终,通过多次迭代,我们可以得到一组既与用户喜好高度相关又具有多样性的电影推荐列表。

四、总结

  1. 平衡相关性和多样性MMR算法的核心在于它能够平衡信息检索或推荐系统的两个关键方面——相关性和多样性。这使得推荐内容不仅贴合用户的兴趣,还能覆盖更广泛的领域。

  2. 相对补集的应用:通过从未选集合 R ∖ S R \setminus S RS中挑选最佳候选项,MMR确保了每次推荐都是新颖且未见过的内容,避免了重复推荐的问题。

  3. 灵活性MMR允许调整平衡参数 λ \lambda λ,以便根据具体应用场景的需求来权衡相关性和多样性的比重。当 λ \lambda λ接近1时,算法更加注重相关性;而当 λ \lambda λ接近0时,则更强调多样性。

  4. 广泛适用性:尽管最初是为了文本摘要生成而设计,MMR已经被成功应用于搜索引擎优化、社交媒体内容推荐、在线广告投放等多个领域,证明了其广泛的适应性和有效性。

  5. 简单易实现MMR算法概念清晰,实现起来相对简单,只需要定义好相似度和相关性度量方法即可应用到各种信息检索和推荐任务中。


http://www.ppmy.cn/news/1561905.html

相关文章

基于ResNet的CIFAR-10分类实现与分析

基于ResNet的CIFAR-10分类实现与分析 在深度学习领域,卷积神经网络(CNN)一直是图像分类任务中的核心模型。随着残差网络(ResNet)的提出,模型训练效果得到了显著提升。ResNet通过引入残差连接,有…

vue 点击按钮复制文本功能(同时解决http不安全问题)

问题: 在HTTP并且非localhost域名的环境下,navigator.clipboard API 是不可用的。为了能够在HTTP页面上实现剪贴板功能,你可以使用一些polyfill库或者通过Flash、ActiveX等技术来实现,但这些方法相对复杂且不推荐。 不过&#xff…

Spring MVC详细介绍

1.MVC 设计模式 MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序的逻辑分离成三个独立的组件: 模型(Model):模型是应用程序的数据和业务逻辑的表示。它负责处理数据的读取…

嵌入式岗位面试八股文(篇一 关键字)

wx:嵌入式工程师成长日记 https://mp.weixin.qq.com/s/Mk8sodtNrodjD0Jjfo4Txw?token1728731884&langzh_CN 1.continue 作用:跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环。…

java随机数Random类

在 Java 中,Random 类用于生成随机数。它是 java.util 包的一部分,可以生成不同类型的随机数,例如整数、浮点数、布尔值等。Random 类的实例可以用来产生各种随机数据,广泛应用于游戏、测试、加密、数据模拟等场景。 1. 创建 Ran…

HarmonyOS UIAbility 生命周期与窗口管理实践

HarmonyOS UIAbility 生命周期与窗口管理实践 引言 在HarmonyOS应用开发中,UIAbility是应用的核心组件之一,负责管理应用的生命周期和窗口行为。理解UIAbility的生命周期方法以及如何管理窗口是开发高效、稳定应用的关键。本文将通过分析一个名为Entry…

Spring AOP原理详解-Spring官方原版

一、概述 面向方面编程(AOP)补充了面向对象编程(OOP) 提供了另一种思考程序结构的方式。模块化的关键单元 在OOP中是类,而在AOP中,模块化的单位是方面。方面 实现跨越问题(如事务管理&#xff…

MySQL 数据库性能调优指南

MySQL 是广泛使用的关系型数据库,其性能调优直接影响系统的响应速度和用户体验。在本篇文章中,我们将全面探讨 MySQL 性能调优的关键技术,包括查询优化、索引设计、配置调整、分区和分库分表等内容。 一、性能调优的基础 1. 确定性能瓶颈 性能调优的第一步是定位瓶颈,可以…