一句话定义:MMR(Maximal Marginal Relevance,最大边际相关性)是一种结果重排策略——在挑选内容时,既看它跟需求有多相关,也看它跟已经选中的内容有多像,越像越往后排。
它到底在算什么
想象公司要招 5 个人的小组。如果只按"简历分数"从高到低录取,很可能招进来 5 个背景几乎一样的人:都是名校算法岗、都做过推荐系统。干活时没人懂运维、没人懂业务。MMR 的思路就是:每招一个人,分数要扣掉"他和已录取的人有多像"这一项。于是第五个名额可能给了一个分数稍低但技能互补的人。
用公式说,给候选条目打分的规则大致是:
```
得分 = λ × 与问题的相关度 − (1−λ) × 与已选条目的最大相似度
```
λ 在 0 到 1 之间:取 1 就退化成普通的"相关性从高到低",取 0 基本只看多样性。实际使用中,通常先召回一个较大的候选池(比如几十条),再用 MMR 一条条贪心地选出最终要的几条。
为什么"最相关的前 5 条"常常几乎一样
向量检索把语义相近的文本放在相邻位置。同一篇新闻稿被十家网站转载、同一份说明书的两个版本、问答页里互相抄的段落,它们的向量距离极近,于是会挤满前几名。你得到 5 条结果,读起来可能只有 1 条的信息量。这不是检索模型坏了,而是"只按相似度排序"这件事本身没有去重和避让的机制。
和相邻概念的区别
| 做法 | 解决的问题 | 局限 |
|---|---|---|
| 相似度 Top-K | 找到最匹配的内容 | 结果容易同质化 |
| 去重(dedup) | 删掉完全重复的条目 | 对"换了说法但意思相同"无能为力 |
| 先聚类,每簇取一条 | 保证覆盖不同主题 | 簇数和边界要人为设定,颗粒度偏粗 |
| MMR | 逐条权衡相关与新颖 | 需要候选池和两两相似度,多花一点算力 |
可以这样理解:去重处理的是"字面一样",MMR 处理的是"字面不同、讲的却是同一件事"。
对实际工作的意义
做 RAG(AI 词典:检索增强生成">检索增强生成)时,上下文窗口是有限的预算。塞进去 5 条内容重叠的片段,等于花钱买重复信息,还容易让模型过度相信同一种说法。用 MMR 重排,常常能用同样条数的片段覆盖更多侧面。做搜索、推荐、新闻摘要也一样:用户不想看到五条"复读"。
代价是它比单纯排序慢一些,需要先多召回、再算相似度;λ 取多少也要结合场景试,偏问答的场景更看重相关性,偏调研的场景更看重覆盖面。具体参数和实现细节,以官方页面为准。
