2026年7月23日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

最大边际相关性MMR:提升RAG检索结果的多样性与实用性

发布日期:2025-04-23 12:05:58 浏览次数: 2726
作者:AI取经路

微信搜一搜,关注“AI取经路”

推荐语

探索RAG系统中提升检索结果多样性与实用性的新策略。

核心内容:
1. MMR算法在RAG系统中的作用与优势
2. MMR原理和公式解析,以及算法流程
3. MMR在信息检索和问答系统中的应用实例

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家


-正文-

在RAG系统中,仅靠向量相似度检索容易造成信息重复或片面。为提升回答的多样性与覆盖度,引入MMR(Maximum Marginal Relevance)算法能有效在“相关性”与“多样性”之间取得平衡,从而挑选出既相关又不重复的信息,提升系统输出的质量与实用性。

  • 1. MMR 是什么,它能解决什么问题?
  • 2. MMR 的基本思想
  • 3. MMR 的原理和公式解析
    • 3.1 算法流程
    • 3.2 举个例子:摘要任务中的 MMR
  • 4. MMR 的应用场景
    • 4.1. 信息检索(比如搜索引擎的结果排序)
    • 4.2. 问答系统(从多个候选答案中挑出信息最丰富的)
  • 5. 代码测试
    • 5.1  标准相似度检索 (Top 5)
    • 5.2  MMR检索 (lambda=0.3, k=5, fetch_k=10)
    • 5.3  MMR检索 (lambda=0.7, k=5, fetch_k=10)

-- 领取学习资料大礼包,见文末

在 RAG(Retrieval-Augmented Generation)系统中,检索阶段决定了最终生成内容的"信息来源"。

但仅靠向量相似度进行 top-k 检索,可能会出现内容重复、信息集中于单一角度的问题,导致模型生成的回答缺乏多样性和覆盖度。这时,仅仅"相关"还不够,我们更希望检索结果是"既相关又多样"。

为了解决这个问题,引入 Maximum Marginal Relevance(MMR) 可以有效地在相关性与多样性之间取得平衡,优化检索结果的质量,提升最终回答的丰富性和实用性。

相关阅读:本地知识库,通过RAG来解决信息的精准生成

1. MMR 是什么,它能解决什么问题?

Maximum Marginal Relevance(MMR) 是一种排序算法,主要用于在信息检索、推荐系统和摘要生成等任务中,选择既相关又不重复的内容。

放到RAG的场景中,传统的排序方法往往只关注内容的相关性(即与查询的匹配度)。但如果我们只是单纯地根据相关性来排序,可能会出现以下问题:

  • 重复内容:比如在推荐系统中,推荐的内容过于相似,用户感受不到新鲜感。
  • 信息不全面:有些系统可能过于关注某一个领域或话题,导致用户只能看到片面的信息。

MMR 的核心思想是:在确保相关性的同时,增加多样性,从而提供更全面、更丰富的结果。

简单来说就是:在一堆候选内容里,优先选那些既跟用户查询相关、又跟已经选过的内容不重复的条目。

我们可以这么理解它的"目的"—— MMR = "给你想要的 + 避免你已经看过的"。

假设你正在使用一个新闻推荐系统,输入了"人工智能"的关键词。传统的推荐系统可能推荐多篇关于"人工智能在医疗行业应用"的文章,而这些文章的内容高度相似。

使用 MMR 后,系统可能会推荐:

  • 一篇讲人工智能医疗应用的文章,
  • 一篇讲人工智能教育领域的文章,
  • 一篇关于人工智能伦理问题的文章。

这样,用户既能获得与主题相关的信息,又能了解该领域的不同视角,避免了重复。

2. MMR 的基本思想

这里面涉及到两个关键词:相关性(Relevance) 和 多样性(Diversity)。这两个听起来像是在"打架",但其实在信息排序里,它们是缺一不可的搭档。

相关性是基础,但不够

相关性很好理解,就是某个内容跟用户查询、兴趣、目标之间的匹配程度。比如你搜"机器学习",当然不希望系统推"烘焙教程"给你。这就是相关性在起作用。

但如果系统一味追求相关性,就会出现一个问题:内容集中在一个点上,很快就"重复"了。你看着看着就会觉得:"这些不是都差不多吗?"

多样性让信息更丰富

多样性指的是结果之间的差异程度。如果推荐的每条内容都从不同角度切入,比如一个讲原理、一个讲应用、一个讲未来趋势,那你看完之后会感觉信息更全面、更有收获。

相关性保证你"看对东西",多样性保证你"看到不同的东西"。

全是相关但重复的内容,没用;全是多样但不相关的内容,也没用。

所以,MMR 的目标就很明确了:

从一堆候选内容里,挑出那些既"与查询高度相关",又"跟已经选过的内容不重复"的条目。

它在每一步选下一个内容时,都会去权衡:

  • 这个内容本身和用户需求有多匹配?
  • 它是不是和我们已经选过的那些内容太像了?

MMR 做的就是在这两者之间找一个平衡点。换句话说,它每次都想选一个"有新意"的好内容,而不是简单地把"最相关的那几个"一股脑推出来。

你可以把 MMR 想成一个"懂信息又懂用户心理"的策展人:

它会说,"这个你可能还没看过,但跟你想要的很有关,而且比之前那些不一样,值的一看。"

因此,MMR 的核心目标是:选出既相关又不重复的内容

3. MMR 的原理和公式解析

MMR 的标准公式表达如下(左右滑动):

其中:

  • :当前候选文档

  • :用户查询问题

  • :已选文档集合

  • :候选文档与查询问题的相关性得分

  • :候选文档  与某个已选文档  的相似度 (公式中会取  与所有已选文档  中最相似的那一个)

  • :平衡参数(0 ≤ λ ≤ 1)

    • λ = 1:完全关注相关性,忽视多样性。
    • λ = 0:完全关注多样性,忽视相关性。
    • 0 < λ < 1:在相关性和多样性之间进行平衡。

相关阅读:人工智能小白到高手:余弦相似度(Cosine Similarity)的简单理解

3.1 算法流程

  1. 初始化
  • 计算文档集合中所有文档与查询得分
  • 选择得分最高的文档
  • 加入已选集合
  • 迭代选择
    • 对剩余文档集合中的每个文档,计算:
    • 选择剩余文档MMR得分最高的文档加入集合

    3.2 举个例子:摘要任务中的 MMR

    假设我们有一篇长文章,要从中选出三句话组成一个简短摘要。我们手头有五个候选句子,编号:S1、S2、S3、S4、S5。

    假设我们设定平衡参数 

    1.初始化

    • 计算所有候选句子与用户问题的得分
    • 选择得分最高的句子S1 (假设 S1 是与查询 Q 相关性得分 () 最高的句子)
    • 将S1加入已选集合

    集合状态更新:

    已选集合: {S1}

    候选集合: {S2, S3, S4, S5}

    2.迭代选择

    对剩余句子集合中的每个句子,计算(左右滑动):

    第一次迭代候选集合:

    •  = 0.9 |  = 0.8

    •  = 0.75 |  = 0.2

    •  = 0.85, = 0.3

    •  = 0.65, = 0.2

    选择MMR得分最高的句子S4加入已选集合

    虽然S2和S3都很"相关",但S4的MMR得分最高,因此选择S4。

    集合状态更新:

    已选集合: {S1, S4}

    候选集合: {S2, S3, S5}

    第二次迭代候选集合:

    •  = 0.9 |  = 0.8, = 0.6

    •  = 0.75 |  = 0.2, = 0.4

    •  = 0.65 |  = 0.2, = 0.3

    选择MMR得分最高的句子S3加入已选集合

    在剩余的句子中,S3的MMR得分最高(0.405),因此选择S3。

    集合状态更新:

    已选集合: {S1, S4, S3}

    候选集合: {S2, S5}

    最终选出的3句话为:S1, S4, S3

    4. MMR 的应用场景

    4.1. 信息检索(比如搜索引擎的结果排序)

    你在搜索引擎上输入一个关键词,比如"ChatGPT 应用案例",后台系统一下子找到了几百上千条相关网页。

    如果我们只看"相关性",那前几条可能都是讲"教育场景下怎么用 ChatGPT"的,虽然都对,但你可能会觉得太集中、太重复了。

    用上 MMR 之后,系统就会在相关的基础上,让展示结果更有"层次":

    • 第一条是讲教育的,
    • 第二条可能是讲法律行业,
    • 第三条是开发者怎么集成 ChatGPT,
    • 第四条可能是讲它带来的伦理问题。

    4.2. 问答系统(从多个候选答案中挑出信息最丰富的)

    比如你问一个比较开放的问题,比如"人工智能未来会带来哪些改变?"

    系统可能从数据库或模型里找出了 10 个可能的回答。

    MMR 在这时候就能帮上忙:不是简单地把"重复最多"的答案往上排,而是挑出互补的信息,比如:

    • 一个说对就业的影响,
    • 一个说对教育的影响,
    • 一个说技术发展的潜力……

    其他还可以用到:推荐系统(避免推相似内容)、文本摘要(避免重复句子)

    5. 代码测试

    # 导入操作系统模块
    import os

    # 设置OpenAI API密钥
    # 注意:在实际应用中,请勿硬编码API密钥。建议使用环境变量或其他安全方式管理密钥。
    OPENAI_API_KEY = 'hk-iwtbie4a91e427'# 示例密钥,请替换为您自己的有效密钥

    # 将API密钥设置为环境变量
    os.environ['OpenAI_API_KEY'] = OPENAI_API_KEY

    from langchain_chroma import Chroma
    from langchain_openai import OpenAIEmbeddings

    # 定义一个包含示例文本的列表,这些文本将被嵌入并存储到向量数据库中
    texts = [
        "大语言模型(LLM)是基于Transformer架构的深度学习模型。"# 关于LLM的定义
        "LLM的核心是Transformer架构,这是一种强大的深度学习技术。"# 与上一句相似
        "基于Transformer的LLM在自然语言处理任务中表现出色。"# 与第一句相似
        "LLM通过在海量文本数据上进行预训练来学习语言模式。"# LLM的训练方式
        "预训练使得LLM能够掌握丰富的语言知识和世界常识。"# 与上一句相似
        "LLM展现出强大的自然语言理解和生成能力。"# LLM的能力
        "理解和生成自然语言是LLM的核心功能之一。"# 与上一句相似
        "像GPT-4这样的LLM可以执行翻译、摘要和问答等多种任务。"# LLM的应用
        "LLM在文本翻译、内容摘要和智能问答方面有广泛应用。"# 与上一句相似
        "人工智能(AI)是一个更广泛的领域,LLM是其中的一个子集。"# LLM与AI的关系
        "AI的目标是创造能够像人类一样思考和行动的机器。"# AI的目标
    ]

    # 初始化OpenAI嵌入模型,指定模型名称和API基础URL
    embeddings = OpenAIEmbeddings(model="text-embedding-3-large", base_url="https://api.openai-hk.com/v1")
    # 使用Chroma类的from_texts方法创建向量存储
    vectorstore = Chroma.from_texts(
        texts=texts, # 需要嵌入和存储的文本列表
        embedding=embeddings, # 用于生成嵌入的嵌入模型实例
        persist_directory="./chroma_db"# 指定持久化存储向量数据的目录
    )

    # 定义一个查询字符串,用于在向量数据库中进行搜索
    query = '什么是大语言模型以及它们能做什么?'

    print("========================= 相似度检索 ============================")
    # 使用向量存储的similarity_search方法执行相似度检索
    t1 = vectorstore.similarity_search(query, k=5# k=5表示返回最相似的5个结果
    # 打印相似度检索的结果
    print(t1)

    # 标识MMR检索(lambda=0.3)部分的开始
    print("========================= MMR lambda=0.3 ============================")
    # 使用向量存储的max_marginal_relevance_search方法执行MMR检索
    t2 = vectorstore.max_marginal_relevance_search(query, k=5, fetch_k=10, lambda_mult=0.3)
    # k=5表示最终返回5个结果,fetch_k=10表示初始获取10个相似结果进行MMR计算,lambda_mult=0.3控制多样性与相似度的权衡
    # 打印MMR检索(lambda=0.3)的结果
    print(t2)

    # 标识MMR检索(lambda=0.7)部分的开始
    print("========================= MMR lambda=0.7 ============================")
    # 使用向量存储的max_marginal_relevance_search方法执行MMR检索
    t3 = vectorstore.max_marginal_relevance_search(query, k=5, fetch_k=10, lambda_mult=0.7)
    # k=5表示最终返回5个结果,fetch_k=10表示初始获取10个相似结果进行MMR计算,lambda_mult=0.7控制多样性与相似度的权衡
    # 打印MMR检索(lambda=0.7)的结果
    print(t3)

    运行结果:

    ========================= 相似度检索 =============================
    [Document(id='76a37d7d-4f9e-43ca-8ca1-396fd5a956bc', metadata={}, page_content='大语言模型(LLM)是基于Transformer架构的深度学习模型。'), 
    Document(id='9f76337c-3f6c-4c14-81e5-399338e30938', metadata={}, page_content='LLM通过在海量文本数据上进行预训练来学习语言模式。'), 
    Document(id='23717671-2353-4daa-a30f-80ce191cfb90', metadata={}, page_content='理解和生成自然语言是LLM的核心功能之一。'), 
    Document(id='f5a64fe0-b616-4a02-b932-ea1d6f7a1217', metadata={}, page_content='LLM展现出强大的自然语言理解和生成能力。'), 
    Document(id='c6237dc4-4087-4eee-b838-a2392a3ef993', metadata={}, page_content='基于Transformer的LLM在自然语言处理任务中表现出色。')]
    ========================= MMR lambda=0.3 =============================
    [Document(id='76a37d7d-4f9e-43ca-8ca1-396fd5a956bc', metadata={}, page_content='大语言模型(LLM)是基于Transformer架构的深度学习模型。'), 
    Document(id='f5a64fe0-b616-4a02-b932-ea1d6f7a1217', metadata={}, page_content='LLM展现出强大的自然语言理解和生成能力。'), 
    Document(id='4a3a8219-8065-4d74-b7ce-187f16e87ecf', metadata={}, page_content='像GPT-4这样的LLM可以执行翻译、摘要和问答等多种任务。'), 
    Document(id='fc2b9c7a-c63c-4c7b-a153-eece2d6bb02e', metadata={}, page_content='预训练使得LLM能够掌握丰富的语言知识和世界常识。'), 
    Document(id='d0cbe326-c4c0-4252-9636-eef7bed06379', metadata={}, page_content='人工智能(AI)是一个更广泛的领域,LLM是其中的一个子集。')]
    ========================= MMR lambda=0.7 =============================
    [Document(id='76a37d7d-4f9e-43ca-8ca1-396fd5a956bc', metadata={}, page_content='大语言模型(LLM)是基于Transformer架构的深度学习模型。'), 
    Document(id='9f76337c-3f6c-4c14-81e5-399338e30938', metadata={}, page_content='LLM通过在海量文本数据上进行预训练来学习语言模式。'), 
    Document(id='23717671-2353-4daa-a30f-80ce191cfb90', metadata={}, page_content='理解和生成自然语言是LLM的核心功能之一。'), 
    Document(id='f5a64fe0-b616-4a02-b932-ea1d6f7a1217', metadata={}, page_content='LLM展现出强大的自然语言理解和生成能力。'), 
    Document(id='4a3a8219-8065-4d74-b7ce-187f16e87ecf', metadata={}, page_content='像GPT-4这样的LLM可以执行翻译、摘要和问答等多种任务。')]

    5.1  标准相似度检索 (Top 5)

    这种策略旨在找出与查询最相似的文档。

    结果特点:

    • 高度相关:检索到的文档都与"大语言模型"的定义、架构和能力直接相关。
    • 潜在冗余:部分文档内容相似度较高,例如都提到了 Transformer 架构或自然语言处理能力。

    5.2  MMR检索 (lambda=0.3, k=5, fetch_k=10)

    较低的 lambda 值 (0.3) 更侧重于 多样性

    结果特点:

    • 平衡性:保留了最相关的文档,同时引入了更多不同方面的信息,如具体应用、训练方法和与 AI 的关系。
    • 较低冗余:相比纯相似度检索,结果的重复性较低。

    5.3  MMR检索 (lambda=0.7, k=5, fetch_k=10)

    较高的 lambda 值 (0.7) 更侧重于 相关性

    结果特点:

    • 高相关性:结果与标准相似度检索非常接近,保留了大部分最相似的文档。
    • 有限多样性:相比 lambda=0.3,多样性较低,但仍比纯相似度检索略高,引入了关于 LLM 具体任务的文档。

    MMR 的核心价值在于 提升结果的多样性,确保返回的内容既相关又有足够的多样性。在推荐系统、摘要生成、问答系统等多个场景中,MMR 都能有效避免重复,提升用户体验。

    53AI,企业落地大模型首选服务商

    产品:场景落地咨询+大模型应用平台+行业解决方案

    承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

    联系我们

    售前咨询
    186 6662 7370
    预约演示
    185 8882 0121

    微信扫码

    添加专属顾问

    回到顶部

    加载中...

    扫码咨询

    扫码登录
    登录即表示您同意《53AI网站服务协议》
    服务协议

    欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

    在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

    一、 定义

    本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

    会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

    知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

    二、 账号注册与登录

    登录方式:本网站支持以下登录方式,您可根据实际情况选择:

    微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

    手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

    账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

    实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

    未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

    三、 服务内容与规范

    知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

    服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

    禁止行为:您在使用服务时不得实施以下行为:

    利用技术手段批量爬取、下载、转存知识库内容;

    将知识库内容用于商业目的或未经授权地向第三方传播;

    干扰本网站正常运行或侵犯其他用户合法权益;

    发布违法违规信息或从事违反公序良俗的活动。

    四、 知识产权声明

    权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

    有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

    侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

    五、 个人信息保护

    我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

    您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

    您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

    六、 免责声明

    内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

    不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

    第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

    七、 违约责任

    如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

    如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

    八、 法律适用与争议解决

    本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

    因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

    九、 其他

    本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

    本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

    我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


    已查阅