# 💡 Summary
MMR(最大边际相关性)
MMR = 贪心地选择"既相关又不重复"的结果,通过 λ 参数平衡相关性和多样性,显著提升用户体验。
想象你在餐厅点菜:
- ❌ 不好的做法:点5道菜都是宫保鸡丁(虽然都很好吃,但太单调)
- ✅ 好的做法:点宫保鸡丁、麻婆豆腐、酸辣汤、炒青菜、米饭(好吃 + 多样)
传统排序:只看相关性
1. 非常相关 ✅
2. 非常相关 ✅
3. 非常相关 ✅
→ 但可能都是同一类内容 ❌
MMR:平衡相关性和多样性
1. 非常相关 ✅
2. 相关 + 不同角度 ✅
3. 相关 + 又一个角度 ✅
→ 内容丰富,覆盖全面 ✅
# 🧩 Cues
# 🪞Notes
## 生活中的例子
**场景:搜索"如何学编程"**
**不用MMR的结果(只看相关性):**
1. Python入门教程
2. Python基础指南
3. Python初学者手册
4. Python编程入门
5. Python零基础教程
→ 虽然都相关,但**内容重复**,看了第1条,后面4条价值不大
**用MMR的结果(相关 + 多样):**
1. Python入门教程
2. JavaScript前端开发指南
3. 数据结构与算法基础
4. 如何选择第一门编程语言
5. 程序员职业规划建议
→ 既相关又**角度不同**,信息量更大
---
## MMR工作原理
**选择每个结果时考虑两件事:**
```Java
得分 = λ × (与查询的相关性) - (1-λ) × (与已选结果的相似度)
↑ ↑
要相关 要不同
```
**参数λ(lambda):**
- λ = 1.0 → 只看相关性,不管多样性(退化成普通搜索)
- λ = 0.5 → 相关性和多样性各占一半
- λ = 0.0 → 只看多样性,不管相关性(结果会很乱)
---
## 具体例子(数字化)
假设搜索"猫",有5篇候选文章:
|文章|与"猫"相关性|内容简述|
|---|---|---|
|A|0.95|猫的品种介绍|
|B|0.92|猫的品种大全|
|C|0.85|猫的饮食习惯|
|D|0.80|如何训练猫|
|E|0.75|猫的健康护理|
**选择过程(λ=0.7):**
**第1轮:**
- 还没选任何文章,只看相关性
- 选择A(0.95最高)
**第2轮:**
- A已选,计算其他的MMR分数
- B:0.7×0.92 - 0.3×(与A相似度0.9) = 0.644 - 0.27 = **0.374**
- C:0.7×0.85 - 0.3×(与A相似度0.3) = 0.595 - 0.09 = **0.505** ✓
- D:0.7×0.80 - 0.3×(与A相似度0.2) = 0.560 - 0.06 = **0.500**
- 选择C(分数最高)
**第3轮:**
- A、C已选,继续计算
- B与A太像了,被排除
- 选择D或E(与已选结果差异大)
---
## 实际应用场景
**1. 搜索引擎**
- 避免返回10个几乎一样的结果
- 给用户更全面的信息视角
**2. 推荐系统**
- 推荐商品时:不要全推荐同类商品
- 例:看了手机,推荐手机壳、充电宝、耳机(而不是10款类似手机)
**3. 文档摘要**
- 从长文档中选择代表性句子
- 避免选到意思重复的句子
**4. 问答系统(RAG)**
- 检索相关文档片段时
- 既要相关,又要覆盖不同角度
---
## 优缺点
**✅ 优点:**
- 结果更丰富、信息量更大
- 避免信息冗余
- 用户体验更好
**❌ 缺点:**
- 计算慢(需要比较已选结果)
- 如果用户只想要最相关的,多样性反而是干扰
- 需要调参(λ的选择)
---
**一句话总结:** MMR就像组装一桌菜,既要每道菜好吃(相关),又要荤素搭配、口味多样(不重复),这样客人才吃得满意!