Вопрос с собеседования · AI и LLM

Как разбивать документы на фрагменты для RAG?

MiddleRAG
Ещё спрашивают так:
  • Что такое chunking?
  • Какой размер чанка выбрать?
  • Зачем нужно перекрытие фрагментов?
Коротко

Фрагмент должен быть самодостаточным по смыслу и достаточно коротким, чтобы точно находиться поиском; режут по структуре документа, а не по символам.

  • Слишком мелко — теряется контекст; слишком крупно — эмбеддинг размывается, контекст забивается шумом
  • Перекрытие соседних фрагментов, заголовок раздела и метаданные в каждом

А ещё Размер подбирают экспериментом на своих вопросах, а не по совету из статьи

Подробно

Почему это важно. Поиск возвращает фрагменты, а не документы. Если ответ разрезан пополам или утонул в длинном куске, качество RAG падает, как бы хороша ни была модель.

Стратегии:

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

Что добавлять к фрагменту:

  • заголовок документа и раздела — иначе кусок «Срок — 30 дней» непонятен;
  • метаданные: источник, дата, версия, права доступа — для фильтров и ссылок;
  • перекрытие с соседями, чтобы мысль на границе попала целиком.

Продвинутые приёмы: искать по маленьким фрагментам, а в контекст отдавать родительский раздел целиком; хранить для фрагмента сгенерированные вопросы или краткое описание.

Как выбирать — собрать набор вопросов с известными правильными фрагментами и сравнить варианты по полноте поиска (recall@k).

Что хотят услышать

  • Компромисс размера: точность поиска против полноты контекста.
  • Деление по структуре документа.
  • Перекрытие, заголовки, метаданные.
  • Подбор по метрикам на своих данных.

Частые ошибки

  • Резать по фиксированному числу символов без учёта структуры.
  • Терять заголовки, из-за чего фрагменты непонятны без контекста.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Резать строго по 500 символов — размер не зависит от документов
  • ✗Строго по 500 символов без учёта структуры: одинаковый размер даёт сопоставимые эмбеддинги, и поиск работает ровнее
  • ✗Один документ — один фрагмент, чтобы не терять контекст
  • ✓По структуре документа, с перекрытием и заголовком; размер — экспериментом

Что спросят дальше

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования