中文翻译暂不可用,显示俄语原文。
Что такое "lost in the middle" и как это связано с attention sink?
Краткий тезис
Lost in the middle — это феномен, при котором большие языковые модели (LLM) лучше запоминают информацию из начала и конца длинного контекста, но хуже — из середины. Это напрямую связано с attention sink (скоплением внимания на первых токенах) и recency bias (предпочтением последних токенов). Понимание этого эффекта критически важно для проектирования RAG-систем, так как неправильный порядок чанков может снизить качество ответа. Решения включают переупорядочивание контекста, retrieval|contextual retrieval, Attention|multi-query attention и иерархическое суммирование (RAPTOR).
1. Определение lost in the middle
Lost in the middle — это эмпирически наблюдаемый эффект, впервые систематически описанный в статье Liu et al. (2023) «Lost in the Middle: How Language Models Use Long Contexts». Суть: если в промпт подаётся длинный контекст (например, несколько документов), модель с высокой вероятностью извлечёт факты, расположенные в самом начале или в самом конце контекста, и с низкой — из середины.
Это не баг, а следствие архитектуры трансформера и механизма self-attention. Внимание модели неравномерно распределяется по позициям токенов, что приводит к двум основным эффектам: attention sink (первые токены) и recency bias (последние токены). Вместе они создают «провал» в середине.
2. Экспериментальное подтверждение (статья Liu et al.)
Авторы провели серию экспериментов с разными LLM (GPT-3.5-Turbo, Llama 2, MPT) на задаче multi-document question answering. В контекст помещалось от 10 до 30 документов, и модель должна была ответить на вопрос, ответ на который содержался ровно в одном документе. Позиция этого документа варьировалась.
Результаты:
| Позиция релевантного документа | Точность (примерно) |
|---|---|
| 1-й (начало) | ~80% |
| 5-й (середина) | ~40% |
| Последний (конец) | ~75% |
График зависимости точности от позиции имеет U-образную форму. Эффект усиливается с ростом общего числа документов и длины контекста.
3. Механизм attention sink (первые токены)
Attention sink — это явление, при котором модель выделяет непропорционально много внимания первым токенам последовательности, даже если они не несут смысловой нагрузки (например, специальные токены <s>, <bos> или первые слова). Это связано с тем, что в начале последовательности ещё нет предшествующего контекста, и модель «впитывает» информацию в эти позиции как в резервуар.
В работе Xiao et al. (2023) «Efficient Streaming Language Models with Attention Sinks» показано, что attention sink возникает из-за того, что softmax-нормализация внимания вынуждена распределять вес между всеми токенами, и первые токены получают избыточный вес, так как они «видят» все последующие.
В контексте lost in the middle это означает: если релевантный документ находится в середине, он конкурирует с attention sink на первых позициях и recency bias на последних, и проигрывает.
4. Recency bias (последние токены)
Recency bias — это склонность модели лучше запоминать информацию, расположенную ближе к концу контекста. Это естественное свойство рекуррентных и трансформерных архитектур: последние токены имеют наибольшее количество обновлений скрытого состояния и «видят» весь предыдущий контекст через attention.
В трансформерах последние токены могут агрегировать информацию из всего контекста, но при этом они также подвержены эффекту «забывания» середины из-за ограниченной ёмкости внимания и численной точности.
5. Связь lost in the middle и attention sink
Lost in the middle — это макроскопический эффект, наблюдаемый на уровне использования контекста моделью. Attention sink — один из микроскопических механизмов, который его вызывает. Дополнительно вклад вносит recency bias. Вместе они формируют U-образную кривую точности.
Формально можно записать распределение внимания по позициям как:
Attention(позиция i) ≈ α · δ(i = 1) + β · δ(i = N) + γ · f(i)
где α — вес attention sink, β — вес recency bias, γ — равномерная компонента, а f(i) — некоторая функция, затухающая к середине. Для длинных контекстов α и β доминируют.
6. Влияние на RAG-системы
В RAG контекст формируется из нескольких чанков, полученных от retriever. Если порядок чанков не оптимизирован, релевантный чанк может оказаться в середине и быть проигнорирован LLM. Это приводит к:
- Hallucination (модель выдумывает ответ, не найдя факта)
- Неполным ответам (модель использует менее релевантные чанки из начала/конца)
- Снижению faithfulness (верности фактам)
Особенно критично для Agentic RAG, где агент может многократно обращаться к контексту и принимать решения на основе извлечённой информации.
7. Решение: переупорядочивание контекста
Самый простой способ — явно поместить наиболее релевантные чанки в начало или конец контекста. Для этого используется re-ranking после retrieval: сначала получаем топ-k чанков, затем сортируем их по убыванию релевантности и помещаем самый релевантный первым (или последним, в зависимости от эмпирики).
Пример кода на Python:
def reorder_chunks(chunks, query, reranker):
# chunks: list of (text, score) from retriever
# reranker: модель для переранжирования (например, cross-encoder)
scores = reranker.predict([(query, chunk[0]) for chunk in chunks])
sorted_chunks = sorted(zip(chunks, scores), key=lambda x: x[1], reverse=True)
# помещаем лучший чанк в начало
return [chunk for chunk, _ in sorted_chunks]
Недостаток: не решает проблему полностью, если контекст очень длинный (десятки чанков).
8. Решение: contextual retrieval
Contextual retrieval — это техника, при которой каждый чанк дополняется кратким контекстом (например, названием документа, соседними предложениями) перед подачей в LLM. Это помогает модели лучше понять, где находится информация, и снижает эффект lost in the middle.
Другой вариант — in-context learning с явными указателями: «Информация, которая вам нужна, находится в третьем документе». Но это требует дополнительной разметки.
9. Решение: multi-query attention
Multi-query attention (или parallel context processing) — подход, при котором LLM обрабатывает несколько частей контекста параллельно, а затем агрегирует результаты. Например, можно разбить контекст на сегменты, каждый сегмент подать в модель отдельно (с одинаковым вопросом), а затем объединить ответы через голосование или дополнительный LLM-раунд.
Это напоминает ensemble retrieval, но на уровне генерации. Реализация может быть дорогой (множественные вызовы LLM), но повышает устойчивость к lost in the middle.
10. Решение: RAPTOR и иерархическое суммирование
RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval) — метод, при котором документы сначала кластеризуются, затем для каждого кластера генерируется суммаризация, и так рекурсивно строится дерево. При запросе retrieval идёт по дереву, а в контекст попадают как листовые чанки, так и суммаризации верхних уровней.
Это позволяет модели видеть «общую картину» (суммаризации) и детали (листья), причём суммаризации обычно помещаются в начало контекста, что даёт им преимущество attention sink. Таким образом, lost in the middle смягчается за счёт иерархической структуры.
11. Практические рекомендации
| Подход | Сложность | Эффективность | Когда использовать |
|---|---|---|---|
| Переупорядочивание | Низкая | Средняя | Всегда как baseline |
| Contextual retrieval | Средняя | Высокая | Когда чанки короткие или много документов |
| Multi-query attention | Высокая | Очень высокая | Критически важные задачи, высокие требования к точности |
| RAPTOR | Высокая | Высокая | Большие корпуса с иерархической структурой |
Дополнительно: можно комбинировать подходы, например, переупорядочивание + RAPTOR.
12. Пет-проект для закрепления
Задача Создать простой RAG-пайплайн, который демонстрирует эффект lost in the middle, и реализовать одно из решений.
Инструменты Python, LangChain, FAISS, OpenAI API (или локальная модель), библиотека для эмбеддингов (sentence-transformers).
Шаги:
- Создать тестовый корпус из 20 коротких текстов (по 1-2 предложения), каждый содержит уникальный факт (например, «Цвет неба — голубой», «Столица Франции — Париж» и т.д.).
- Для каждого запроса (например, «Какая столица Франции?») вручную указать релевантный документ.
- Реализовать retrieval (BM25 или эмбеддинги), получить топ-10 чанков.
- Сформировать контекст, поместив релевантный чанк на разные позиции (1-я, 5-я, 10-я, 15-я, 20-я).
- Для каждой позиции отправить запрос в LLM и оценить, вернула ли модель правильный факт.
- Построить график точности от позиции.
- Реализовать переупорядочивание (re-ranking) и повторить эксперимент — убедиться, что точность выровнялась.
Ожидаемый результат Вы увидите U-образную кривую на шаге 6 и её сглаживание после переупорядочивания. Это наглядно подтвердит теорию.
13. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 2 | Как решаете проблему lost in the middle при работе с длинными контекстами? |
| 5 | Как оцениваете качество retrieval'а в RAG-системе? |
| 3 | Какие стратегии chunking'а вы знаете и когда какую применяете? |
| 7 | Как уменьшаете latency RAG-системы? |
| 10 | Что такое Self-RAG и когда его использовать? |
| 1 | Как бы вы спроектировали RAG-систему для 10 000 документов с разной структурой? |
14. Навигация
- Предыдущий: 633
- Следующий: 635
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 633
- Следующий: 635
- Индекс: 00. Индекс разборов