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

和谐共存:相关性与多样性在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中的元素。

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 Di 的 MMR 得分。
  • 选择 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公式:

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

步骤 1:初始化
  • S = { } S = \{\} S={},即尚未选择任何电影。
步骤 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.mzph.cn/diannao/66189.shtml

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

相关文章

简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩

系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的解决方案有两种: 缓存空对…

Rabbitmq追问1

如果消费端代码异常,未手动确认,那么这个消息去哪里 2024-12-31 21:19:12 如果消费端代码发生异常,未手动确认(ACK)的情况下,消息的处理行为取决于消息队列的实现和配置,以下是基于 RabbitMQ …

STM32-笔记37-吸烟室管控系统项目

一、项目需求 1. 使用 mq-2 获取环境烟雾值,并显示在 LCD1602 上; 2. 按键修改阈值,并显示在 LCD1602 上; 3. 烟雾值超过阈值时,蜂鸣器长响,风扇打开;烟雾值小于阈值时,蜂鸣器不响…

2、pycharm常用快捷命令和配置【持续更新中】

1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令:pip install requests 安装好了…

SpringCloud系列教程:微服务的未来(八)项目部署、DockerCompose

本博客将重点介绍如何在 Docker 环境中部署一个 Java 项目,并使用 Docker Compose 来简化和管理多个服务的协调部署。我们将通过一个典型的 Java Web 应用(如基于 Spring Boot 的应用)为例,演示如何构建、配置和运行 Docker 容器&…

微信小程序滑动解锁、滑动验证

微信小程序简单滑动解锁 效果 通过 movable-view (可移动的视图容器,在页面中可以拖拽滑动)实现的简单微信小程序滑动验证 movable-view 官方说明:https://developers.weixin.qq.com/miniprogram/dev/component/movable-view.ht…

Conda 安装 Jupyter Notebook

文章目录 1. 安装 Conda下载与安装步骤: 2. 创建虚拟环境3. 安装 Jupyter Notebook4. 启动 Jupyter Notebook5. 安装扩展功能(可选)6. 更新与维护7. 总结 Jupyter Notebook 是一款非常流行的交互式开发工具,尤其适合数据科学、机器…

【小程序开发】- 小程序版本迭代指南(版本发布教程)

一,版本号 版本号是小程序版本的标识,通常由一系列数字组成,如 1.0.0、1.1.0 等。版本号的格式通常是 主版本号.次版本号.修订号 主版本号:当小程序有重大更新或不兼容的更改时,主版本号会增加。 次版本号&#xff1a…

【保姆级】sql注入之堆叠注入

一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束 select * fr…

Word如何设置整段背景色

1) 不是1),也不是2),而是3)的样式 2) 红色标出这个地方有上边框,点击“边框和底纹” 3)点击底纹Tab页,再填充,选择要的颜色就OK啦。

Nginx:性能优化

性能优化是确保 Nginx 在高负载下依然能够高效运行的关键部分。通过合理的配置和调优,可以显著提升 Web 服务的响应速度、吞吐量以及资源利用率。 1. 调整工作进程数、并发连接数以及cpu亲和性 worker_processes:根据 CPU 核心数设置适当的工作进程数。一般cpu有多少核,就设…

分布式事务介绍 Seata架构与原理+部署TC服务 示例:黑马商城

1. 什么是分布式事务? 在分布式系统中,如果一个业务需要多个服务合作完成,而且每一个服务都有事务,多个事务必须同时成功或失败,这样的事务就是分布式事务。其中的每个服务的事务就是一个分支事务。整个业务称为全局事务。 打个比…

C#运动控制系统:雷赛控制卡实用完整例子 C#雷赛开发快速入门 C#雷赛运动控制系统实战例子 C#快速开发雷赛控制卡

雷赛控制技术 DMC系列运动控制卡是一款新型的 PCI/PCIe 总线运动控制卡。可以控制多个步进电机或数字式伺服电机;适合于多轴点位运动、插补运动、轨迹规划、手轮控制、编码器位置检测、IO 控制、位置比较、位置锁存等功能的应用。 DMC3000 系列卡的运动控制函数库功…

快速上手LangChain(四)LangChain Hub和LangSmith

文章目录 快速上手LangChain(四)LangChain Hub和LangSmith什么是LangChain HubLangChain Hub功能 LangSmith使用 快速上手LangChain(四)LangChain Hub和LangSmith 什么是LangChain Hub LangChain Hub官网地址:https:…

学英语学压测:03jmeter组件-采样器、逻辑控制器

📢📢📢:先看关键单词,再看英文,最后看中文总结,再回头看一遍英文原文,效果更佳!! 关键词 assertion断言/əˈsɜrʃən/configuration element配置元素/ˌkɒ…

配置嵌入式服务器

一、如何定制和修改Servlet容器的相关配置 修改和server有关的配置(ServerProperties) server.port8081 server.context‐path/tx server.tomcat.uri-encodingUTF-8二、注册servlet三个组件【Servlet、Filter、Listener】 由于SpringBoot默认是以jar包…

文献分享:RoarGraph——跨模态的最邻近查询

文章目录 1. \textbf{1. } 1. 导论 1.1. \textbf{1.1. } 1.1. 研究背景 1.2. \textbf{1.2. } 1.2. 本文的研究 1.3. \textbf{1.3. } 1.3. 有关工作 2. \textbf{2. } 2. 对 OOD \textbf{OOD} OOD负载的分析与验证 2.1. \textbf{2.1. } 2.1. 初步的背景及其验证 2.1.1. \textbf{2…

智慧工地信息管理与智能预警平台

建设背景与政策导向 智慧工地信息管理与智能预警平台的出现,源于工地管理面临的诸多挑战,如施工地点分散、危险区域多、监控手段落后等。随着政府对建筑产业现代化的积极推动,各地纷纷出台政策支持智慧工地的发展,旨在通过信息技…

[论文笔记]Representation Learning with Contrastive Predictive Coding

引言 今天带来论文 Representation Learning with Contrastive Predictive Coding的笔记。 提出了一种通用的无监督学习方法从高维数据中提取有用表示,称为对比预测编码(Contrastive Predictive Coding,CPC)。使用了一种概率对比损失, 通过使用负采样使…

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍(含操作手册):H7-TOOL开发工具,1拖4/16脱机烧录,高速DAPLINK,RTOS Trace,CAN/串口助手, 示波器, RTT等,支持WiFi,以太网,高速USB和手持 - H7-…