← 回首頁
MMR 最大邊際相關(Maximal Marginal Relevance,RAG 檢索去冗餘重排)
RAG(檢索增強生成)的流程是:使用者問一個問題,系統先從知識庫「檢索」出一批看起來相關的段落,再把它們塞進
LLM 的 context 讓模型據此作答。問題是——檢索排在最前面的幾個段落,常常在講同一件事。你搜「如何降低雲端
成本」,第 1、第 2 名可能都是「關閉閒置的虛擬機器」,只是換句話說;把它們全塞進去,寶貴的 context 裝的是重複
資訊,模型看不到「預留方案」「儲存分層」這些同樣有用但排稍後的角度。MMR(最大邊際相關)就是解這件事的
重排策略:每一輪選段落時,不只看「與問題多相關」,還要看「與已經選過的段落多不重複」,兩者取平衡。
公式是每輪從未選集合挑 argmax [ λ·rel(d,q) − (1−λ)·maxs∈已選 sim(d,s) ]。前半 rel(d,q)
是候選 d 與查詢的相關度;後半 max sim(d,s) 是 d 與已選集合裡最像的那一個的相似度,稱為
冗餘(redundancy)——用 max 是因為只要跟任一個已選段落高度重複就算冗餘。λ(lambda)是相關 vs 多樣
的旋鈕:λ 大偏相關(λ=1 就退化成「純按相關度排序」)、λ 小偏多樣。關鍵在於冗餘項會隨「已選集合」動態改變:
一個原本高相關的候選,一旦它很像某個已被選走的段落,分數就會被壓下去、讓位給較不重複的候選。
為什麼 AI 時代重要
LLM 的 context 視窗有限且昂貴,RAG 塞進去的每一段都在花預算。若檢索前幾名彼此重複,等於用一半的 context 講同一
件事,還可能讓模型偏頗地反覆強調單一角度。MMR 是生產級 RAG 幾乎必備的「檢索後重排」層——LangChain、
LlamaIndex 等框架都內建 mmr 檢索模式,向量資料庫的 max_marginal_relevance_search 也是同一套。
調 λ 就是在調「答案要更聚焦單一最相關來源,還是要涵蓋更多不同角度」:抽取式問答偏大 λ、需要全面性的摘要或
調研偏小 λ。看懂這頁,就懂了為何「同一批檢索結果,重排一下餵給模型,答案品質差很多」。
它是貪心演算法的延伸、混合檢索的下游
MMR「每輪局部取最優、選了就不回頭」的骨架,正是
貪心演算法(活動選擇 / 分數背包)的同一套思路——差別在 MMR 的評分函式會
隨「已選集合」動態改變(冗餘懲罰),不是固定的。上游則接
混合檢索 BM25 / RRF:BM25 管關鍵字語意、向量近鄰管語意相似、RRF 把多路排名
融成一份,而 MMR 吃的正是那份融合後的相關度排名,負責在它之上「去冗餘重排」。三者串起來就是一條完整的 RAG
檢索管線:
多路召回 → RRF 融合 → MMR 去冗餘。
MMR 流程(相關度基準 → λ=0.7 逐輪選取 → 換 λ=0.3 → 估計 vs 真實)
固定情境:查詢「如何降低雲端成本」,檢索回 6 個候選段落,各有固定的相關度 rel[] 與兩兩相似度 sim[][]。刻意
安排兩組冗餘對:D0「關閉閒置 VM」與 D1「清理殭屍 VM」相似 0.90、D4「開啟監控告警」與 D5「設定預算告警」
相似 0.50。流程分四段:先看純相關度基準(naive 取前 2 名 = {D0, D1} 幾乎重複);再用 λ=0.7 逐輪跑
MMR(k=3),看 D1 雖是次高相關卻因與 D0 冗餘被壓到第 3 輪才入選;接著換 λ=0.3(更偏多樣)重跑,選出
不同順序;最後用獨立暴力窮舉每輪 argmax 對照逐輪貪心結果(估計 vs 真實)。
查詢「如何降低雲端成本」;候選 [D0 關閉閒置 VM, D1 清理殭屍 VM, D2 改用預留方案, D3 儲存分層, D4 開啟監控告警,
D5 設定預算告警];rel=[0.90, 0.88, 0.72, 0.65, 0.50, 0.40];冗餘對 (D0,D1)=0.90、(D4,D5)=0.50;λ∈{0.7, 0.3}、k=3。
已執行步數(steps):0
階段:relevance
λ:0.7
長條 = 各候選當前這一輪的 MMR 分數(相關度基準幀為純 rel)。綠色(sorted)= 已被選入的段落;
紅色(found)= 這一輪被選中的段落;藍色(checking)= 本輪被冗餘懲罰壓最低的候選;粉紅(pivot)= 純相關度
argmax。
誠實揭露:MMR 分數可能為負(λ 小、冗餘懲罰重時常見),BarsRenderer 以 max(1, …) 為分母、
負值長條被 clamp 成零高度(視覺上該候選實質「被淘汰」出這一輪),精確數值請見右側「逐候選明細」面板。
此外,MMR 的逐輪貪心是 NP-hard「全域最多樣子集」的近似——本頁的獨立真值只驗證「逐輪 argmax 實作
正確」,並非宣稱選出的子集為全域最優;rel / sim / λ 皆為教學縮尺,非真實檢索分數。
逐候選明細(rel / redundancy / mmr,綠 = 已選、紅 = 本輪選中)
估計(逐輪貪心)vs 真實(獨立暴力窮舉每輪 argmax)
這頁的「每輪局部取最優、選了不回頭」是
貪心演算法的骨架,只是評分函式
會隨已選集合動態改變(冗餘懲罰);上游的相關度排名由
混合檢索 BM25 / RRF
提供——多路召回 → RRF 融合 → MMR 去冗餘,是一條完整的 RAG 檢索管線。