TL;DR
IGP — метод отбора документов для RAG (когда LLM генерирует ответ на основе найденных документов), который оценивает их полезность для генерации ответа, а не релевантность запросу. Механика: модель генерирует ответ без документа → измеряет неопределённость (энтропию распределения токенов). Затем генерирует с каждым документом → снова измеряет неопределённость. Information Gain (IG) = насколько снизилась неопределённость. Документы сортируются по IG, те что не снижают или повышают неопределённость — фильтруются. Остаётся стандартный truncate (ограничение по количеству документов или токенов).
Релевантность документа не гарантирует качество ответа. Исследователи показали: метрики релевантности (NDCG) слабо коррелируют с качеством итогового ответа (F1-score), а при добавлении нескольких документов корреляция может стать отрицательной (Spearman = -0.54 при TopM=5). Причина: релевантные документы могут быть избыточными (повторяют друг друга), противоречивыми (содержат конфликтующие утверждения) или неоднозначными (содержат параллельные версии фактов). Это размывает вероятностное распределение модели на ключевых токенах → ответ становится менее стабильным и точным.
IGP решает это через порог отсечения (_Tp_): документы с IG ниже порога не попадают в контекст, даже если есть свободное место в бюджете. Это admission control — явный контроль допуска документов до этапа обрезки. Результат: +12–20% качества ответов (F1) при сокращении итогового контекста на 76–79% в multi-evidence сценариях. Метод не требует обучения, разметки или доступа к параметрам — только step-wise logits или TopK log-probabilities из API.
Схема метода
Классический RAG:
Retrieve → Rerank (по релевантности) → Truncate (TopM) → Generate
IGP:
Retrieve → IGP (rerank + prune по IG) → Truncate (TopM) → Generate
Внутри IGP (для каждого документа):
ШАГ 1: Сгенерируй ответ БЕЗ документа (greedy)
→ измерь normalized uncertainty (NU₀)
ШАГ 2: Сгенерируй ответ С документом dᵢ (greedy)
→ измерь normalized uncertainty (NUᵢ)
ШАГ 3: Вычисли Information Gain: IG(dᵢ) = NU₀ - NUᵢ
(положительный IG = документ снижает неопределённость)
ШАГ 4: Сортируй документы по IG (↓)
ШАГ 5: Фильтруй: оставь только IG(dᵢ) ≥ Tp (порог)
ШАГ 6: Передай отфильтрованный список в Truncate (применяет TopM)
NU (Normalized Uncertainty) — усреднённая энтропия топ-K токенов по всем шагам генерации, нормализованная на [0, 1].
Пример применения
Задача: Ты готовишь питч для инвесторов про свой маркетплейс локальных продуктов. Нашёл 8 источников с данными о рынке: 3 отчёта про e-grocery в России, 2 статьи про фермерские кооперативы, аналитику Ozon про категорию "продукты", кейс Вкусвилла, исследование McKinsey про онлайн-продажи еды. Все релевантны, но контекст ограничен — нужно выбрать 2-3 самых убедительных источника, которые не создадут путаницу разными цифрами.
Промпт (адаптация под чат):
Помоги выбрать самые полезные источники для питча.
Вопрос: "Какой размер рынка онлайн-продуктов в России и какой средний чек?"
Сначала дай свой ответ БЕЗ источников. Оцени уверенность: 0-10.
Потом проверим каждый источник:
1. Отчёт X → дай ответ → оцени уверенность
2. Статья Y → дай ответ → оцени уверенность
...
Для каждого источника покажи:
- Стал ли ответ увереннее? (да/нет, насколько)
- Изменились ли ключевые цифры?
- Появились ли противоречия с предыдущими источниками?
В конце: ранжируй источники по полезности. Отметь те, которые НЕ стоит включать (создают шум/противоречия).
Результат:
Модель выдаст для каждого источника оценку уверенности (грубый аналог NU) и пометит изменения. Ты увидишь: - Отчёт Ozon: уверенность выросла 3→7, добавил конкретику по сегменту - Статья про фермеров: уверенность 7→6, цифры про кооперативы не про маркетплейсы — вносит путаницу - McKinsey: уверенность 7→8, добавил макротренд - Кейс Вкусвилла: уверенность 8→7, хороший кейс но другая модель (офлайн+онлайн) — создаёт альтернативную гипотезу
Финальный ранжир: Ozon, McKinsey → включить. Фермеры, Вкусвилл → исключить (размывают фокус).
Почему это работает
Слабость LLM: Модель не умеет явно фильтровать "полезные vs шумные" документы — она пытается учесть ВСЁ из контекста. При добавлении нескольких документов вероятностная масса распределяется между параллельными версиями фактов (одно исследование говорит "рынок 500 млрд", другое "300 млрд с учётом X"). Это увеличивает энтропию на ключевых токенах (модель менее уверена какое число назвать) → ответ становится размытым ("от 300 до 500 млрд, в зависимости от методологии...") или выбирает случайный вариант.
Сильная сторона LLM: Модель хорошо генерирует вероятностное распределение на каждом шаге — чем увереннее ответ, тем выше вероятность нужного токена, тем ниже энтропия. Полезный документ сужает распределение (даёт конкретику, подтверждает гипотезу) → энтропия падает. Шумный документ расширяет распределение (добавляет альтернативы, противоречия) → энтропия растёт.
IGP использует это напрямую: меряет энтропию до и после добавления документа. Information Gain = снижение энтропии — сигнал что документ делает модель увереннее. Порог отсечения (_Tp_) — барьер входа: если документ не снижает неопределённость (или повышает), он не попадает в контекст, даже если формально релевантен.
Рычаги управления:
Порог _Tp_ — занижен (0.0) → пропускает все документы с IG≥0, строгая фильтрация только негативных. Завышен (0.05) → жёсткий барьер, только документы с сильным снижением неопределённости. Настраивай под задачу: высокий порог для precision (точность важнее), низкий для recall (охват важнее).
TopM (бюджет) — количество финальных документов после truncate. IGP фильтрует ДО truncate, поэтому если IGP пропустил 3 документа, а TopM=5 → в контекст попадут все 3 (бюджет не заполнен). Это норма — IGP экономит контекст, не заполняя его "лишь бы заполнить".
TopK (для NU) — сколько топ-токенов учитывать при расчёте энтропии. Меньше K → чувствительность к изменениям в топовых токенах. Больше K → учёт длинного хвоста распределения. В исследовании K=5–10 работает стабильно.
Шаблон промпта
Задача: выбрать самые полезные документы из {N} для ответа на вопрос.
Вопрос: {твой_вопрос}
Шаг 1: Базовый ответ
Дай ответ БЕЗ документов. Оцени свою уверенность: 0 (гадаю) → 10 (полностью уверен).
Шаг 2: Проверка каждого документа
Для каждого документа [{doc_1}, {doc_2}, ..., {doc_N}]:
- Дай ответ С УЧЁТОМ этого документа
- Оцени уверенность: 0-10
- Укажи дельту уверенности: +/- от базовой
- Отметь: появились ли противоречия/альтернативы с базовым ответом?
Шаг 3: Ранжирование
Ранжируй документы по "информационной ценности":
1. Документы с максимальным ростом уверенности
2. Документы с нулевым изменением (нейтральные)
3. Документы со СНИЖЕНИЕМ уверенности (создают шум/противоречия)
Рекомендация: какие {top_M} документов включить? Какие исключить?
Что подставлять:
- {N} — количество документов у тебя
- {твой_вопрос} — вопрос для анализа
- {doc_1}, {doc_2}, ... — список названий/кратких описаний документов
- {top_M} — сколько документов ты хочешь в финале (например, 2-3 для питча)
🚀 Быстрый старт — вставь в чат:
Вот методика IGP для фильтрации документов. Адаптируй под мою задачу: [опиши задачу].
[вставить шаблон выше]
Модель спросит: какой у тебя вопрос, сколько документов, какой желаемый топ. Она возьмёт логику "проверка через изменение уверенности" и адаптирует под твой контекст.
Оригинал из исследования
Полный алгоритм IGP (как его реализовали авторы):
Вход:
- Запрос q
- Кандидаты D = {d₁, d₂, ..., dₙ}
- Генератор φ (LLM с доступом к logits)
- Гиперпараметры: K (TopK для энтропии), Tp (порог фильтрации), M (бюджет документов)
Алгоритм:
1. NU₀ ← normalized_uncertainty(q; φ, K)
// Генерация БЕЗ документов, расчёт энтропии топ-K токенов
2. Для каждого dᵢ в D (параллельно):
NUᵢ ← normalized_uncertainty(q | dᵢ; φ, K)
IGᵢ ← NU₀ - NUᵢ
// Генерация С документом, информационный выигрыш
3. Сортировка: π ← argsort(IG; ↓)
D' ← упорядочить D по π
4. Фильтрация: D'' ← {d ∈ D' : IG(d) ≥ Tp}
// Пороговое отсечение
5. Truncate: D_final ← top_M(D'')
// Применение бюджета TopM
Выход: D_final (финальный набор документов для контекста)
Normalized Uncertainty (NU): - Для каждого шага генерации t: вычисляется энтропия топ-K токенов - Нормализуется на log(K) → значение в [0, 1] - Усредняется по всем шагам генерации (до EOS или макс. длины)
Детали: - Генерация в режиме greedy (temperature=0) для reproducibility - K обычно 5-10 (баланс чувствительности и стабильности) - Tp = 0.0 (фильтрует только негативные IG) или 0.05 (строже)
Ограничения
⚠️ Требует API с logits: Полная автоматизация IGP требует доступа к step-wise logits или TopK log-probabilities. ChatGPT/Claude через веб-интерфейс этого не дают — нужен API. Обходной путь: ручная адаптация через "оценку уверенности словами", но это грубый прокси, не точный расчёт энтропии.
⚠️ Greedy decoding для оценки: Метод использует greedy (temperature=0) для измерения NU/IG (чтобы убрать variance между прогонами). Это не финальная генерация — это проба для ранжирования. Финальный ответ можно генерировать с обычными настройками (temperature>0). Но это значит: нужно 1+N прогонов для N документов → затратно по токенам.
⚠️ Не для одного документа: Метод наиболее полезен когда есть несколько кандидатов (5-10+) и нужно выбрать 2-3. Если документ один — IGP просто скажет "включить или не включить", но сравнения нет. Оверкилл для простых сценариев.
⚠️ Корреляция, не каузальность: IG — прокси-метрика. Снижение энтропии обычно коррелирует с улучшением ответа, но не гарантирует. Иногда модель становится увереннее в неправильном ответе (если документ содержит убедительную, но фактически неверную информацию).
⚠️ Не подходит для субъективных задач: IGP ориентирован на factual QA, где есть "правильный ответ". Для креативных/субъективных задач (написание эссе, брейншторм) снижение энтропии не равно "лучший результат" — разнообразие может быть ценно.
Ресурсы
Исследование: _Less is More for RAG: Information Gain Pruning for Generator-Aligned Reranking and Evidence Selection_
Авторы: Zhipeng Song, Yizhi Zhou, Xiangyu Kong, Jiulong Jiao, Xinrui Bao, Xu You, Xueqing Shi, Yuhang Zhou, Heng Qi
Организации: Dalian University of Technology, Dalian Ocean University, Liaodong University, Qinghai University, Liaoning Technical University, Tencent
Ключевые отсылки из работы: - RAG framework: Lewis et al. (2020) - DPR (Dense Passage Retrieval): Karpukhin et al. (2020) - FiD (Fusion-in-Decoder): Izacard & Grave (2021) - Cross-encoder reranking: Nogueira & Cho (2019) - Semantic entropy: Farquhar et al. (2024)
