Перейти к контенту

Затерянные посередине: позиционное смещение в LLM и его влияние на финансовый ИИ

· 6 мин чтения
Mike Thrift
Mike Thrift
Marketing Manager

Оглядываясь на запись DocFinQA — где пайплайны на основе поиска и LLM с длинным контекстом потерпели неудачу при обработке документов SEC с контекстом в 123 тысячи токенов — вопрос, который я оставил открытым, заключался в том, почему это произошло. Статья Лю и др. (TACL 2024, arXiv:2307.03172) дает механистический ответ, и оказывается, что этот тип сбоя проще и устойчивее, чем я ожидал.

Статья

2026-06-27-lost-in-the-middle-language-models-long-contexts

«Затерянные посередине: как языковые модели используют длинные контексты» Нельсона Ф. Лю, Кевина Лина, Джона Хьюитта, Ашвина Паранджапе, Микеле Бевилакуа, Фабио Петрони и Перси Ляна описывает два целевых эксперимента: ответы на вопросы по нескольким документам на базе NaturalQuestions-Open (с 10, 20 и 30 извлеченными документами) и синтетический поиск пар «ключ-значение» (с 75, 140 и 300 парами). В каждом эксперименте они систематически меняли положение релевантного документа или пары «ключ-значение» внутри входного контекста — начало, середина или конец — при сохранении всех остальных параметров. Вывод однозначен: производительность описывает U-образную кривую с провалом в середине контекста, и эта кривая проявляется у всех протестированных моделей.

Ключевые идеи

  • U-образная форма реальна и стабильна. В сценарии QA с 20 документами точность в первой позиции составила около 75%, снизилась до примерно 55% на 10-й позиции и восстановилась до 72% на 20-й позиции — разрыв между краями и центром составил около 20 пунктов.
  • Все модели следуют одной и той же схеме. Протестированные модели включают как закрытые, так и открытые, малые и большие: GPT-3.5-Turbo (4K и 16K), GPT-4, Claude-1.3 (8K и 100K), MPT-30B-Instruct и LongChat-13B. U-образная кривая проявилась в каждой из них, включая модели, явно позиционируемые как имеющие расширенные окна контекста.
  • Даже Claude-1.3-100K не застрахован. Вариант со 100K-контекстом вел себя так же, как и остальные. Длинное окно контекста не означает, что модель действительно распределяет внимание равномерно по нему.
  • Базовый уровень «закрытой книги» отрезвляет. GPT-3.5-Turbo без каких-либо документов правильно ответила на 56,1% вопросов NaturalQuestions; при наличии прямого доступа только к одному релевантному документу результат достиг 88,3%. Но в худших средних позициях в сценарии с 20 документами производительность упала ниже уровня «закрытой книги» — это означает, что добавление контекста было активно вредным.
  • Модели энкодер-декодер (Flan-T5-XXL, Flan-UL2) более надежны в пределах своей тренировочной длины, но возвращаются к той же схеме, когда контекст ее превышает. Архитектурное различие имеет значение, но оба типа все равно деградируют при масштабировании.
  • Коренная причина — причинная маскировка внимания. Каждый токен может обращаться только к предшествующим токенам, поэтому позиции в самом начале накапливают больший суммарный вес внимания во всей модели, чем позиции в середине. Эффекты недавности также подтягивают вверх показатели в конце контекста.

Что подтверждается, а что нет

Экспериментальный дизайн здесь восхитительно чист: позиция — единственная переменная, задачи являются стандартными бенчмарками, а результат воспроизводится в широком диапазоне семейств моделей. У меня нет возражений против основного результата.

Что мне кажется менее убедительным, так это представление задачи поиска «ключ-значение» как значимого прокси для реального использования. Поиск UUID-в-UUID проверяет, может ли модель повторить заученную строку, а не способна ли она на логические рассуждения. U-кривая проявляется и там, что подкрепляет тезис о позиционном смещении, но это также означает, что в статье смешиваются два разных явления: точность извлечения в задачах на точное совпадение и качество рассуждений над релевантными фрагментами. Мне было бы интересно узнать, ухудшается или улучшается U-образная форма, когда релевантный документ требует многошагового логического вывода перед окончательным ответом, а не просто дословного воспроизведения.

Также есть пробел, который авторы в основном признают, но не устраняют: они так и не проверили, меняет ли тонкая настройка инструкций или RLHF чувствительность к позиции, проверив только влияние размера окна контекста. Учитывая, что коренная причина архитектурная (причинная маскировка), я подозреваю, что настройка инструкций это не исправит, но статья этого не подтверждает.

Почему это важно для финансового ИИ

Эта статья дает механистическое объяснение эмпирической закономерности, с которой я постоянно сталкиваюсь. DocFinQA провалилась на длинных документах SEC. IRCoT и FLARE извлекают несколько фрагментов и объединяют их перед рассуждением. Каждый пайплайн RAG, который я видел в финансовом контексте, последовательно сбрасывает извлеченные фрагменты в промпт и надеется, что модель обратит внимание на нужный.

Вывод для агентов Beancount вполне конкретен. Если агент извлекает десять записей реестра в качестве контекста, записи в позициях 3–7 подвергаются наибольшему риску быть проигнорированными или вызвать галлюцинации. Это проблема не извлечения, а представления. Из этой статьи следуют два решения: либо ставить наиболее диагностически важные записи первыми (и последними), либо вообще не объединять их и проводить рассуждения по одному фрагменту за раз.

Результаты также усложняют риторику вокруг LLM с длинным контекстом. Каждый квартал новая модель объявляет об увеличении окна контекста. Эта статья говорит о том, что длинное окно не означает то, что вы думаете, если вы равномерно распределяете доказательства в нем. Модель с контекстом 128K, которая прячет релевантную транзакцию на 60-й тысяче токенов, хуже, чем модель с контекстом 4K, которая извлекает именно тот фрагмент, который нужен.

Для безопасности обратной записи последствия неутешительны: если модель просят обобщить сессию работы с реестром, а соответствующее правило политики «не проводить эту транзакцию» оказывается в середине длинного системного промпта, модель может повести себя так, будто она никогда не читала это правило.

Что читать дальше

  • "Found in the Middle: How Language Models Use Long Contexts Better via Plug-and-Play Positional Encoding" («Найдено посередине: как языковые модели лучше используют длинные контексты с помощью подключаемого позиционного кодирования», Zhang и др., arXiv:2403.04797) — предлагает многомасштабное позиционное кодирование (Ms-PoE) как исправление без переобучения через масштабирование RoPE; заявляет об улучшении до 3,8 пункта на Zero-SCROLLS, напрямую решая проблему U-кривой.
  • "Never Lost in the Middle: Mastering Long-Context Question Answering with Position-Agnostic Decompositional Training" («Никогда не теряться посередине: мастерство ответов на вопросы в длинном контексте с помощью декомпозиционного обучения, не зависящего от позиции», arXiv:2311.09198) — использует противоположный подход и обучает модель быть явно независимой от позиции; сравнение с Ms-PoE проясняет, является ли тонкая настройка или ухищрения на этапе вывода лучшим инструментом.
  • "Mitigate Position Bias in Large Language Models via Scaling a Single Dimension" («Смягчение позиционного смещения в больших языковых моделях путем масштабирования одного измерения», arXiv:2406.02536) — выявляет конкретное измерение скрытых состояний позиций, ответственное за смещение, и масштабирует его без переобучения; самое хирургическое исправление, предложенное на данный момент, актуальное для развертывания существующих моделей без переобучения.