Семантическое разбиение (Semantic Chunking)
Семантическое разбиение - это техника деления документа, которая разрезает текст по смысловым границам, а не по фиксированному числу символов или токенов. Она использует встраивания, чтобы определить, когда соседние предложения меняют тему, и затем размещает разрез именно там, чтобы каждый получившийся фрагмент был внутренне связным и извлекался как единая идея.
Семантическое разбиение - это техника деления документа, которая разрезает текст по смысловым границам, а не по фиксированному числу символов или токенов. Она использует встраивания, чтобы определить, когда соседние предложения меняют тему, и затем размещает разрез именно там, чтобы каждый получившийся фрагмент был внутренне связным и извлекался как единая идея.
Почему это важно
Наивное разбиение режет каждые N токенов или по разрывам абзацев, не обращая внимания на смысл. Это регулярно рассекает единый довод пополам, помещая посылку в один фрагмент, а вывод в другой, - так что поисковик возвращает обрывки, которые не имеют смысла. Семантическое разбиение исправляет это, уважая смены темы. Отчёты по бенчмаркам LlamaIndex и LangChain за 2024-2025 годы показывают, что семантическое разбиение улучшает качество ответов RAG на 8-20% в открытодоменных вопросно-ответных задачах по сравнению с делением фиксированного размера, причём наибольший прирост - на длинных технических документах.
Как это работает
1. Разделение на предложения: используйте токенизатор предложений, чтобы получить атомарные единицы.
2. Встраивание каждого предложения: небольшая модель встраивания выдаёт по одному вектору на предложение.
3. Вычисление сходства соседних предложений: для каждой пары предложений измеряйте косинусное сходство между встраиваниями.
4. Поиск точек разрыва: когда сходство падает ниже порога (или находится в нижнем процентиле), отмечайте это как смену темы.
5. Группировка предложений между разрывами во фрагменты: каждый фрагмент тематически связен.
6. Необязательные ограничения размера: объединяйте крошечные фрагменты или дробите огромные, чтобы поиск оставался практичным.
Семантическое против фиксированного против рекурсивного разбиения
| Стратегия | Как делит | Связность | Стоимость | Когда применять |
|---|---|---|---|---|
| Фиксированного размера | Каждые N токенов | Низкая | Бесплатно | Прототипирование, логи |
| Рекурсивное | Абзац -> предложение -> слово | Средняя | Бесплатно | Универсальный вариант по умолчанию |
| Семантическое | Границы по сходству встраиваний | Высокая | Стоимость встраиваний | Технические документы, длинные статьи |
| Агентное | LLM решает для каждого документа | Наивысшая | Очень высокая | Высокие ставки, малый объём |
Семантическое разбиение находится между "дёшево и тупо" и "дорого и умно" - хороший вариант по умолчанию, когда вы перерастаете рекурсивное деление.
Регуляторы настройки
Порог сходства: низкий порог -> больше фрагментов, более плотная тематическая связность, хуже непрерывность контекста. Высокий порог -> меньше и длиннее фрагменты. Начните примерно с 15-25-го процентиля сходства соседних предложений.
Модель встраивания: дешёвой небольшой модели встраивания обычно достаточно - вы измеряете относительные сдвиги, а не абсолютный смысл.
Минимальный размер фрагмента: очень короткие фрагменты (одно предложение) плохо извлекаются, потому что им не хватает контекста. Задайте нижнюю границу.
Максимальный размер фрагмента: ограничивайте фрагменты так, чтобы ни один не превышал последующее контекстное окно.
Перекрытие: небольшое перекрытие в 1-2 предложения между соседними фрагментами спасает пограничные случаи, где граница неоднозначна.
Когда это не помогает
Короткие документы: если весь документ помещается в один фрагмент, любое деление - это лишние накладные расходы.
Сильно повторяющийся текст: логи, списки товаров и таблицы имеют низкий естественный дрейф темы - семантическое разбиение вырождается в фиксированное.
Структурированный контент: таблицы, код и JSON следует делить по структуре, а не по смыслу.
Когда поиск не является узким местом: если галлюцинация возникает из-за дизайна промпта или реранжирования, исправление разбиения не поможет.
Источники: