All streams
Search
Write a publication
Pull to refresh

Comments 5

Феномен «Потеря в середине»

  • Что это? Снижение качества работы с информацией, расположенной в середине длинного контекста.

  • Проявление Модель чаще игнорирует или искажает данные из центра документа, лучше запоминая начало и конец.

  • Причина Особенность работы механизма самовнимания, который придает меньшее значение средним частям последовательности.

Что значит "длинный контекст" в данном случае? Насколько он должен быть длинным, чтобы можно было наблюдать этот эффект? Когда феномен "потеря в середине" сменяется просто вытеснением данных из контекста ("забыванием")? Как это объясняется с точки зрения работы LLM (инференса) - за счёт чего искажаются данные в середине контекста?

Мне кажется, что этот феномен является свидетельством "оптимизаций" проводимых различными производителями "движков" в целях снижения стоимости вычислений (того самого инференса). Он должен проявляться на больших контекстных окнах (более новых моделях) и отсутствовать на малых (старых моделях).

Это связано с логикой работы текстовых моделей - при ответе он циклично подбирает самый подходящий к предыдущему следующий токен, изучая запрос и контекст механизмом внимания. У этого механизма более приоритетно начала запроса, из за эффекта первенства, и конец, из за недавности. Ну и плюс некоторые другие факторы. Длина контекста и эффект потери зависят от модели, существуют тесты для его вычисления, самый простой - скормить модели специфичный текст и поспрашивать точные факты из разных мест текста.
Ну и да, наверное здесь нужно было упомянуть не длину контекста а длину запроса. Хотя модель читает запрос вместе с контекстом, но запрос в приоритете, и практические советы размещать важные фрагменты в начале и конце работают именно для запроса.

и практические советы размещать важные фрагменты в начале и конце работают именно для запроса.

Вот именно на это я и хотел обратить внимание. Насколько я понимаю логику работы LLM, для выбора моделью следующего токена используются все токены, находящиеся в некотором "контекстном окне". В это окно помещается не только запрос пользователя, но и внутримодельные инструкции ("делай хорошо и не делай плохо"). В общем, все токены, которые так или иначе имеют отношение к генерации следующего токена. Выходной результат может проверяться моделью на допустимость (толерантность, общественную опасность и т.п.), но это уже должно быть после генерации. А для генерации следующего токена используются все предыдущие из контекстного окна.

Если запрос пользователя меньше этого контекстного окна (с учётом загрузки в него системных токенов), то проблем нет, если запрос пользователя больше контекстного окна и происходит вытеснение, то модель "забывает" (не знает) начало запроса. Мы ведём диалог и модель держит в памяти последнее, о чём мы говорили и не помнит, что было ранее.

А вот забыть (вернее, "подзабыть") середину - это как-то не ложится у меня в картину мира. Если у меня запрос короткий, то в нём ничего "игнорить" нельзя. Механизм внимания должен быть отключен. Если длинный - то включается механизм внимания и "игнорится" середина. А что такое "середина"? Если я веду диалог с моделью, то входные данные (мои вопросы и ответы модели) нарастают, как снежный ком, "середина" сдвигается дальше от начала с каждым вопросом-ответом. То, что было "неважным" при генерации первого ответа, становится важным (ближе к началу) при генерации 10-го ответа.

Я считаю, что "механизм внимания" - это ухищрения разработчиков моделей в перепаковке "заявленного контекста" (например, в 1М токенов) в реальный размер "контекстного окна" - по которому подбираются следующие токены. По моим наблюдениям (см. "Скрытый текст") размер именно контекстного окна не совпадает с заявленными разработчиками размерами, иначе на модели GPT5 со 128К токенами контекста можно было бы получить выходной результат выше 4К правильных токенов для входных 67К токенов (задача - замена во входном тексте одних строк на другие).

Т.е., длина "контекста модели", в который входят запрос, системные инструкции и результат, и длина "контекстного окна", в которое входят все токены, по которым вычисляется следующий токен, это разные длины. Отличающиеся на порядок или более. Механизм внимания - это и есть тот упаковщик, который втискивает одно (заявленный размер) в другое (реальный размер).

Это не практика, а то, как запросы делать.

Не вижу противоречия. Теория - то как модель работает, как и на чем ее обучали и выравнивали, какие механизмы закладывали. Практика - как эту теорию применять и строить запросы, чтоб получать более качественные ответы.

Sign up to leave a comment.

Articles