Chroma 的边际相关性检索 - Maximal Marginal Relevance,检索的多样性

"边际相关性检索" 是 Chroma 里的高级查询模式,MMR(Maximal Marginal Relevance,最大边际相关)

它解决什么问题

普通相似度检索只按 "和查询最像" 返回,结果往往扎堆重复

比如查 "如何健身",可能返回的 10 条全是讲举铁的

MMR 的目标是:既相关,又不重复,让你拿到一个 "相关且多样" 的结果集

核心公式

对每一条候选结果算一个分数:

复制代码
最终分 = λ × 与查询的相似度 − (1−λ) × 与已选结果的相似度
  • 第一项:越相关分越高(跟查询像)
  • 第二项:跟已选的越重复,扣分越多(多样性惩罚)

选结果时贪婪地一条条挑:每轮选当前 "相关度高 + 与已选最不重复" 的那条,直到选满

λ 参数的作用

在 Chroma 里怎么用

复制代码
results = collection.query(
    query_texts=["健身"],
    n_results=10,
    # MMR 相关参数
    lambda_param=0.5,        # 多样性 vs 相关性的权衡
    fetch_k=50,                     # 先取50个候选,再从中做MMR挑10个
    mmr_threshold=0.8         # 相似度低于此阈值的不选(可选)
)

关键点:fetch_k 要大于 n_results,否则没有多余候选可做去重;系统先粗取 fetch_k 个,再用 MMR 精挑出 n_results 个

什么时候该用

  • RAG 检索增强生成:给大模型喂上下文时,避免喂一堆同质化片段,让回答覆盖面更广
  • 推荐系统:推荐结果不想全是同一个类型的商品 / 文章
  • 知识库问答:同一问题想看多个角度的答案

什么时候不要用

  • 就是要最相关的 N 条 (比如精确找最相似的向量做匹配),用普通 similarity 就行,MMR 反而可能丢掉最相关的 1 条
  • 数据量很小或本身就多样,MMR 收益不大

总结

MMR = 在 "跟查询相关" 和 "结果彼此不重复" 之间做平衡,用 λ 控制天平

在 Chroma 里就是 query 时传上 lambda_param、fetch_k 等参数即可

相关推荐
zhangrelay1 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
叼烟扛炮5 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_7 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
辣知8 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金8 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
kyrie_sakura9 小时前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
宝绿特塑业再生科技10 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~11 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
我命由我1234513 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
外收内放13 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi