Найдено посередине: калибровка позиционного смещения внимания улучшает RAG с длинным контекстом
Я размышлял о проблеме «потери в середине» (lost-in-the-middle) с тех пор, как написал заметку об оригинальном открытии Лю и соавторов: передайте LLM длинный контекст, и она гарантированно проигнорирует свидетельства, скрытые в середине. Статья «Found in the Middle: Calibrating Positional Attention Bias Improves Long Context Utilization» (Hsieh et al., ACL Findings 2024, arXiv:2406.16008) предлагает самое прямое и практичное решение, которое я когда-либо видел: калибровку на этапе вывода, не требующую обучения, которая вычитает позиционное смещение модели из её весов внимания, восстанавливая до 15 процентных пунктов точности RAG.
О статье
Сье и др. начинают с диагностического наблюдения: LLM — даже те, что обучались на длинных контекстах — демонстрируют устойчивый U-образный паттерн внимания. Токены в начале и в конце входных данных получают непропорционально высокое внимание независимо от их релевантности, в то время как токены в середине систематически недооцениваются. Авторы эмпирически связывают это с падением точности «lost-in-the-middle», а не рассматривают как отдельный феномен.
Их решение элегантно по своей сути. Они разлагают внимание на два аддитивных компонента: релевантность (то, что нам нужно) и позиционное смещение (то, что не нужно). Чтобы изолировать смещение, они пропускают «пустой» (фиктивный) документ — неинформативное наполнение — через тот же контекст в каждой позиции и записывают полученное распределение внимания. Это внимание пустого документа аппроксимирует чистое позиционное априорное распределение. Вычитание его из реальных показателей внимания оставляет остаток, который лучше отражает истинную релевантность:
Calibrated attention = Attn(document, k) − Attn(dummy, k)
Затем пересчитанные показатели используются для ранжирования или перевзвешивания извлеченных документов перед финальным этапом генерации ответа. Важно, что обучение не требуется. Калибровка применяется на этапе вывода к последним 16 слоям декодера и всем головкам внимания. Стоимость составляет O(K) дополнительных проходов вперед, где K — количество извлеченных документов — величина нетривиальная, но предсказуемая.
Ключевые идеи
- U-образное позиционное смещение внимания присуще архитектуре модели и сохраняется даже в моделях, специально обученных для работы с длинным контекстом.
- Пропуск фиктивного (пустого/шумного) документа через тот же контекст извлечения изолирует позиционное априорное распределение; его вычитание удаляет смещение без какой-либо тонкой настройки (finetuning).
- Recall@3 на NaturalQuestion (K=20, золотой документ помещен в середину) прыгает с 20,52% до 68,32% при калибровке; при K=10 — с 36,38% до 74,27%.
- Сквозная точность ответов на вопросы (QA) улучшается на 6–15 процентных пунктов, когда золотой документ находится в середине контекста; улучшения сохраняются в 22 из 24 экспериментальных конфигураций.
- Метод превосходит шесть базовых моделей для сравнения: стандартное внимание, ранжирование на основе генерации запросов, промптинг с генерацией релевантности, сортировку по вниманию (Peysakhovich & Lerer 2023), переупорядочивание промптов и LongLLMLingua-rk.
- Метод оценивался на NaturalQuestion (2655 реальных запросов по Википедии) и SynthWiki (990 синтетических записей, сгенерированных GPT-4).
Что подтверждается — а что нет
Основной результат поразителен, и я в него верю. Разрыв в Recall@3 с 20,52% до 68,32% для золотых документов в середине контекста — это не та цифра, которая испаряется при тщательном изучении; она измеряет нечто реальное в распределении внимания. Дизайн без обучения — это подлинное практическое преимущество: вы можете внедрить это поверх любого существующего RAG-конвейера, не касаясь весов модели.
Тем не менее, у меня есть некоторые сомнения. Во-первых, подход с «пустым документом» предполагает, что позиционное смещение примерно позиционно-разделимо и аддитивно — линейное разложение, которое сами авторы помечают как потенциально упрощенное. Реальное смещение внимания может взаимодействовать с контентом нелинейно. Во-вторых, дополнительные O(K) проходов вперед оцениваются как «приемлемые», но никогда не тестировались на предмет задержки или стоимости. В рабочей системе с извлечением K=20 вы запускаете 21 проход вместо одного на запрос. Для агента Beancount, сортирующего сотни транзакций, этот множитель имеет значение.
В-третьих — и это самое интересное ограничение — авторы отмечают, что позиционное смещение может быть поле зным для определенных задач. Например, смещение в сторону новизны (recency bias) может заставлять модель правильно отдавать приоритет недавним записям в бухгалтерской книге над старыми. Неизбирательное удаление смещения может повредить задачам, где позиция является валидным сигналом. Это признается, но не изучается.
Наконец, в экспериментах используются NaturalQuestion и синтетический набор данных. Специфические финансовые документы — плотные таблицы, отчеты за несколько лет, записи в журналах с повторяющейся структурой — сильно отличаются от статей Википедии. Калибровку необходимо будет проверить на этих распределениях, прежде чем утверждать, что она будет работать для финансового RAG.
Почему это важно для финансового ИИ
Прямая связь очевидна: каждая заметка со времен DocFinQA вращается вокруг одной и той же проблемы. Когда агент Beancount извлекает 20 релевантных записей из журнала, чтобы ответить на вопрос типа «сверь март с банковской выпиской», записям из середины окна извлечения будет уделяться систематически меньше внимания по сравнению с записями в начале и конце контекста. Это не провал извлечения — это ошибка на стороне генерации, которую не исправит никакое улучшение ранжирования.
Калибровка «found-in-the-middle» — это правдоподобный способ смягчения проблемы, который не требует переобучения базовой модели и может быть применен непосредственно на этапе генерации в любом QA-конвейере для бухгалтерских книг. Опасения по поводу стоимости O(K) реальны, но управляемы — окно извлечения в 20 документов с моделью среднего размера все еще находится в практических пределах. Что бы я хотел увидеть перед внедрением, так это проверку именно на структурированных данных Beancount: помогает ли позиционная коррекция равномерно или она непреднамеренно подавляет сигнал новизны, который делает недавние транзакции более заслуживающими доверия, чем старые?
Стоит помнить об общем принципе: механизмы внимания кодируют позиционные априорные значения независимо от релевантности контента, и эти априорные значения можно откалибровать без переобучения. Это открывает дверь к аналогичным калибровкам для других смещений: смещения частоты токенов, нормализации длины ввода, смещения избыточности при генерации.
Что читать дальше
- «Mitigate Position Bias in LLMs via Scaling a Single Hidden States Channel» (arXiv:2406.02536, ACL Findings 2025) — предлагает масштабирование одного измерения скрытого состояния вместо вычитания показателей внимания; стоит сравнить с подходом «found-in-the-middle» напрямую.
- «Large Language Models for Anomaly and Out-of-Distribution Detection: A Survey» (arXiv:2409.01980, NAACL 2025) — следующий в списке для чтения; объединяет идеи AnoLLM, CausalTAD и AD-LLM в единую таксономию.
- Liu et al., «Lost in the Middle: How Language Models Use Long Contexts» (arXiv:2307.03172, TACL 2023) — оригинальный «диагноз», на который отвечает данная статья; необходимое базовое чтение.
