# 💡 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就像组装一桌菜,既要每道菜好吃(相关),又要荤素搭配、口味多样(不重复),这样客人才吃得满意!