Как разбивать документы на фрагменты для RAG?
- Что такое chunking?
- Какой размер чанка выбрать?
- Зачем нужно перекрытие фрагментов?
Фрагмент должен быть самодостаточным по смыслу и достаточно коротким, чтобы точно находиться поиском; режут по структуре документа, а не по символам.
- Слишком мелко — теряется контекст; слишком крупно — эмбеддинг размывается, контекст забивается шумом
- Перекрытие соседних фрагментов, заголовок раздела и метаданные в каждом
А ещё Размер подбирают экспериментом на своих вопросах, а не по совету из статьи
Подробно
Почему это важно. Поиск возвращает фрагменты, а не документы. Если ответ разрезан пополам или утонул в длинном куске, качество RAG падает, как бы хороша ни была модель.
Стратегии:
- фиксированный размер (например, несколько сотен токенов) с перекрытием — просто, но режет посреди мысли;
- по структуре — заголовки, абзацы, пункты, строки таблиц; для кода — функции и классы. Обычно лучший вариант;
- рекурсивное деление — сначала по разделам, если кусок велик — по абзацам, затем по предложениям;
- семантическое — граница там, где меняется тема (по эмбеддингам предложений).
Что добавлять к фрагменту:
- заголовок документа и раздела — иначе кусок «Срок — 30 дней» непонятен;
- метаданные: источник, дата, версия, права доступа — для фильтров и ссылок;
- перекрытие с соседями, чтобы мысль на границе попала целиком.
Продвинутые приёмы: искать по маленьким фрагментам, а в контекст отдавать родительский раздел целиком; хранить для фрагмента сгенерированные вопросы или краткое описание.
Как выбирать — собрать набор вопросов с известными правильными фрагментами и сравнить варианты по полноте поиска (recall@k).
Что хотят услышать
- Компромисс размера: точность поиска против полноты контекста.
- Деление по структуре документа.
- Перекрытие, заголовки, метаданные.
- Подбор по метрикам на своих данных.
Частые ошибки
- Резать по фиксированному числу символов без учёта структуры.
- Терять заголовки, из-за чего фрагменты непонятны без контекста.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Резать строго по 500 символов — размер не зависит от документов
- ✗Строго по 500 символов без учёта структуры: одинаковый размер даёт сопоставимые эмбеддинги, и поиск работает ровнее
- ✗Один документ — один фрагмент, чтобы не терять контекст
- ✓По структуре документа, с перекрытием и заголовком; размер — экспериментом
Что спросят дальше
Разбор темы
- RAG — ответы по своим документам
Как модель отвечает по документам компании — эмбеддинги, разбиение на фрагменты, векторный и гибридный поиск, реранкинг.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.