中文翻译暂不可用,显示俄语原文。

Как вы решаете проблему «lost in the middle» при работе с длинными контекстами?

Краткий тезис

Проблема «lost in the middle» — это явление, когда LLM хорошо помнит информацию из начала и конца длинного контекста, но проваливает середину. Это связано с архитектурой внимания и softmax. Решения: переупорядочивание контекста (важное — в начало/конец), обогащение чанков метаданными (retrieval|contextual retrieval), двухуровневое хранение (chunks|multi-vector retrieval) или иерархическое суммирование (RAPTOR).


1. Термин: Lost in the middle (потеря в середине)

Что это Экспериментально обнаруженный феномен (Liu et al., 2023), когда LLM демонстрирует U-образную кривую recall'а: высокая точность для информации в начале контекста (primacy effect), высокая для конца (recency effect), но низкая для середины.

Почему происходит

ПричинаОбъяснение
Softmax attentionAttention weights — распределение вероятностей. Первые токены имеют больше шансов получить вес, последние — recency bias
Позиционные эмбеддинги (RoPEОтносительные позиции хорошо работают для близких токенов, но могут ослабевать для середины
Ограниченное контекстное окноМодель не может одинаково хорошо обработать все 128k токенов

Экспериментальные данные GPT-4 находит «иголку в стоге сена» (Haystack|needle in a haystack) с точностью ~90% для информации в начале или конце, но только ~60% для середины (на контексте 32k токенов).

Термин «иголка в стоге сена» (Haystack|Needle in a Haystack Бенчмарк, где в случайную позицию длинного текста вставляется один факт («любимый цвет — синий»), а затем модель спрашивают об этом факте. Чем длиннее контекст, тем хуже модель находит середину.


2. Решение 1: Lost in the Middle Prompting (переупорядочивание контекста)

Суть Простое и эффективное решение — переставить релевантные чанки в начало или конец промпта, а не оставлять их в середине.

Как это работает в RAG

  1. Найденные retrieval'ем чанки сортируются не по relevance score, а стратегически
  2. Самые важные чанки — в начало или конец контекста
  3. Менее важные — в середину

Пример промпта

Контекст (важные документы в начале):
[Документ А: полное описание политики возврата, страница 5]
[Документ Б: условия гарантии, раздел 2]

Контекст (менее важные детали):
[Документ В: контакты поддержки]
[Документ Г: общие вопросы]

Вопрос: Какая политика возврата для электроники?

Почему это работает

  • Модель уделяет больше внимания первым токенам (primacy effect)
  • И последним токенам (recency effect)
  • Середина получает меньше внимания

Термин «Primacy effect» Психологический феномен — люди лучше запоминают информацию, представленную в начале списка. Модели LLM демонстрируют аналогичное поведение.

Термин «Recency effect» Люди лучше запоминают информацию, представленную в конце списка. LLM тоже.


3. Решение 2: Contextual Retrieval (обогащение контекстом)

Суть При поиске retrieval возвращает не только сам чанк, но и метаинформацию о контексте — из какого документа этот чанк, где он находится, какие заголовки над ним, какова общая тема документа.

Проблема без contextual retrieval Чанк: «возврат в течение 14 дней» Модель не знает: это политика интернет-магазина, юридический договор или внутренняя инструкция.

С contextual retrieval Чанк обогащается:

[Документ: Политика_возврата_2025.pdf, страница 3, раздел «Возврат товаров надлежащего качества», тема документа: юридические условия интернет-магазина]
Содержание: «возврат в течение 14 дней с момента получения»

Как это помогает lost in the middle

  • Модель не теряет информацию о том, откуда пришел чанк
  • Даже если чанк находится в середине, модель знает его важность (по source, по типу документа)
  • Анкерная информация (заголовок, страница) помогает модели «зацепиться» за позицию

Термин «Анкерная информация» (Anchoring Ключевые маркеры, помогающие модели ориентироваться в длинном контексте (заголовки, номера страниц, разделы).

Пример использования (кейс

«Я использовал contextual retrieval в проекте юридического RAG для договоров. Каждый чанк содержал номер раздела и название документа. Это помогло модели не путать одинаковые фразы из разных договоров и правильно отвечать на вопросы о конкретных документах, даже когда в контексте было 50 страниц текста.»


4. Решение 3: Multi-vector Retrieval (двухуровневое хранение)

Суть Храним два типа чанков:

  • Маленькие чанки — для точного поиска (поисковая индексация)
  • Большие чанки (родительские — для передачи в LLM (генерация)

Как это работает

  1. Документ разбивается на большие родительские чанки (например, 2000 токенов)
  2. Каждый родительский чанк разбивается на маленькие дочерние (например, по 200 токенов)
  3. Индексируются маленькие чанки (поиск по ним точнее)
  4. При поиске: находится релевантный маленький чанк
  5. Возвращается его родительский большой чанк (с полным контекстом)

Пример:

Родительский чанк (2000 токенов): полный раздел договора
Дочерние чанки (200 токенов): отдельные параграфы

Запрос: "условия возврата"
→ Найден дочерний чанк (параграф 3.1)
→ Возвращаем родительский чанк (весь раздел 3)
→ LLM видит полный контекст, а не только один параграф

Как это помогает lost in the middle

  • LLM получает большой контекст, где важная информация не теряется в середине
  • Чанк-родитель может быть структурирован так, что важное — в начале или конце

Термин «Parent document retriever» Такой подход называется "родительский ретривер" — сначала ищем среди детей, возвращаем родителя.

Инструменты LangChain имеет ParentDocumentRetriever, LlamaIndexHierarchicalNodeParser.


5. Решение 4: RAPTOR (иерархическое суммирование)

Термин RAPTOR Recursive Abstractive Processing for Tree-Organized Retrieval — метод, при котором документ разбивается на иерархию: токены → предложения → абзацы → разделы → суммаризации.

Как это работает

Уровень 1 (исходные чанки):      [чанк1] [чанк2] [чанк3] [чанк4]
                                  ↓        ↓        ↓        ↓
Уровень 2 (кластеризация):      [кластер A (чанк1+2)] [кластер B (чанк3+4)]
                                  ↓                      ↓
Уровень 3 (суммаризация):       [суммаризация кластера A] [суммаризация кластера B]

При поиске

  1. Сначала ищем среди суммаризаций верхнего уровня (быстро, грубо)
  2. Затем спускаемся в релевантный кластер, ищем среди чанков
  3. Возвращаем исходные чанки с нужным уровнем детализации

Как это помогает lost in the middle

  • Суммаризации вытягивают ключевую информацию из середины наверх
  • LLM видит сначала суммаризации (короткие, важные), а потом детали
  • Информация из середины исходного документа не теряется, потому что попадает в суммаризацию

Пример из исследования RAPTOR На задачах с многостраничными документами (20+ страниц), RAPTOR улучшает recall на 15-20% по сравнению с плоским chunking'ом.

Термин «Кластеризация» (Clustering Группировка похожих чанков вместе (по embedding similarity). Позволяет объединять семантически связанные куски документа, даже если они далеко друг от друга.

Термин «Абстрактивная суммаризация» (Abstractive Summarization Суммаризация, которая перефразирует и обобщает, а не просто вырезает куски текста (в отличие от экстрактивной).


6. Сравнение решений

РешениеСложность реализацииЭффективность для lost in the middleКогда использовать
Lost in the Middle promptingОчень низкаяСредняя (зависит от задачи)Быстрый фикс для production
Contextual retrievalНизкаяВысокая (анкеры помогают)Юридические/медицинские домены
Multi-vector retrievalСредняяОчень высокаяКогда важны точность и полнота
RAPTORВысокаяСамая высокаяОчень длинные документы (100+ страниц)

7. Практический кейс (пример для собеседования)

«В проекте по созданию AI-ассистента для юридических договоров мы столкнулись с тем, что модель не могла найти важные условия из середины 50-страничного договора. Мы применили комбинацию contextual retrieval и multi-vector retrieval.

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

Дополнительно использовали parent document retriever: индексировали параграфы (маленькие чанки), а в LLM передавали целые разделы (большие родительские чанки). Благодаря этому модель видела полный контекст каждого параграфа.

Результат: точность ответов на вопросы о середине документа выросла с 55% до 88%.»


8. Пет-проект для закрепления

Задача Сравнить 3 метода борьбы с lost in the middle на длинном документе (50+ страниц).

Инструменты Python, LangChain, LlamaIndex, любой LLM с окном 32k+ (например, Llama-3-8B через Ollama)

Шаги

  1. Взять длинный публичный документ (например, исследование 50+ страниц)
  2. Искусственно вставить в случайные позиции 5 фактов (в начало, середину, конец)
  3. Реализовать 3 подхода:
    • Базовый: чанки в порядке relevance
    • Lost in the Middle prompting: важные чанки в начало/конец
    • Multi-vector retrieval: parent-child chunks
    • Contextual retrieval: обогащенные чанки
  4. Для каждого подхода: задать 10 вопросов о фактах в разных позициях
  5. Замерить recall для начала, середины, конца
  6. Сравнить метрики

Ожидаемый результат График U-образной кривой для базового подхода и её выпрямление для улучшенных методов.


Связь с другими вопросами

ВопросТема
1Chunking стратегии, retrieval, reranking
3Детали chunking для длинных документов
14Обрезка контекста когда retrieved docs > context window
18Multi-vector retrieval (ColBERT)
66Управление контекстным окном для длинных диалогов
86Решение проблемы "я знаю, что ответ есть, но retrieval не находит"
143Agentic RAG (агент решает, нужен ли поиск)
626-650Long Context & Reasoning (целая категория)

2 Как вы решаете проблему lost in the middle при работе с длинными контекстами|2 Как вы решаете проблему lost in the middle при работе с длинными контекстами|2 Как вы решаете проблему lost in the middle при работе с длинными контекстами|2 полностью разобран. Переходим к вопросу 3, когда будете готовы|Вопрос 2 полностью разобран. Переходим к вопросу 3, когда будете готовы]]


Навигация