Диагностика Mock-интервью
Главная · RAG: поиск + генерация

MMR и разнообразие выдачи

Топ-k по чистой близости часто возвращает почти дубликаты: несколько кусков про одно и то же забивают контекст и не добавляют информации. MMR — простой жадный алгоритм, который балансирует релевантность и новизну одним параметром λ, и умение объяснить этот баланс — частый вопрос про RAG на собеседовании.

Интуиция

Представь: пользователь спрашивает «расскажи про плюсы и минусы удалённой работы». Ретривер честно возвращает топ-5 самых близких к запросу чанков — и все пять оказываются про экономию времени на дороге, потому что именно эта мысль ярче всего представлена в базе. Формально релевантность высокая, а по сути мы отдали LLM пять перефразировок одного тезиса. Про минусы и про командную работу — ни слова, хотя такие чанки в базе есть, просто чуть дальше по близости.

Проблема в том, что близость к запросу и полезность набора — разные вещи. Хороший набор из k документов должен быть не только релевантным, но и разнообразным (diverse): лучше пять разных граней темы, чем пять копий одной. Особенно это важно, когда куски базы частично дублируют друг друга — а в реальных корпусах near-дубликаты есть почти всегда.

Как это работает: формула MMR

MMR (Maximal Marginal Relevance, максимальная маргинальная релевантность) — жадный отбор. Мы строим итоговый список по одному документу: на каждом шаге выбираем тот, который максимизирует компромисс между близостью к запросу и новизной относительно уже выбранных:

MMR = λ · sim(q, d) − (1 − λ) · maxd′ ∈ выбранные sim(d, d′)

Здесь sim(q, d) — близость документа к запросу (релевантность), а второе слагаемое — штраф за похожесть на самый близкий из уже отобранных документов. Параметр λ ∈ [0, 1] задаёт баланс:

Дедупликация near-duplicate — частный случай MMR: даже при высоком λ второе слагаемое обнуляет ценность документа, почти совпадающего с уже выбранным.

💡 Ключевая мысль MMR оптимизирует не «релевантность каждого документа», а «полезность набора в целом»: параметр λ двигает систему от «k копий лучшего ответа» (λ→1) к «k разных граней темы» (λ→0). Это отбор поверх кандидатов, а не новый поиск.

Когда разнообразие помогает, а когда мешает

MMR — не бесплатная добавка, а размен, и включать его надо осознанно:

По месту в пайплайне MMR — это переупорядочивание и отбор поверх уже найденных кандидатов, родственник реранкинга: реранкер уточняет релевантность каждого документа, MMR — оптимизирует полезность набора. Разнообразие бывает и на уровне генерации (сэмплирование, несколько ответов), но в RAG чаще всего его наводят именно на этапе отбора контекста.

⚠️ Подводный камень Слишком маленькое λ (гонка за разнообразием) выталкивает наверх документы, которые «непохожи на остальные» просто потому, что они нерелевантны. Разнообразие ценно только среди релевантного: сначала убедись, что кандидаты вообще по теме, и лишь потом раздвигай их по разным граням. λ = 0 почти всегда хуже, чем λ = 1.
🎤 На собеседовании
  • «Что делает параметр λ в MMR?» — балансирует релевантность (λ→1, риск дублей в выдаче) и новизну/разнообразие (λ→0, риск нерелевантности); на практике λ ≈ 0.5–0.7.
  • «Зачем разнообразие в RAG?» — топ-k по чистой близости часто набивает контекст near-дубликатами; MMR отдаёт LLM разные грани темы вместо копий одного тезиса.
  • «Когда MMR вредит?» — на узких фактовых вопросах, где важна точность топ-1; тогда λ держат высоким или отключают MMR.
  • «Чем MMR отличается от реранкера?» — реранкер уточняет релевантность каждого документа отдельно, MMR оптимизирует состав набора с учётом уже выбранного (marginal relevance).