GEO

Семантическое разбиение (Semantic Chunking)

Семантическое разбиение - это техника деления документа, которая разрезает текст по смысловым границам, а не по фиксированному числу символов или токенов. Она использует встраивания, чтобы определить, когда соседние предложения меняют тему, и затем размещает разрез именно там, чтобы каждый получившийся фрагмент был внутренне связным и извлекался как единая идея.

Семантическое разбиение - это техника деления документа, которая разрезает текст по смысловым границам, а не по фиксированному числу символов или токенов. Она использует встраивания, чтобы определить, когда соседние предложения меняют тему, и затем размещает разрез именно там, чтобы каждый получившийся фрагмент был внутренне связным и извлекался как единая идея.

Почему это важно

Наивное разбиение режет каждые N токенов или по разрывам абзацев, не обращая внимания на смысл. Это регулярно рассекает единый довод пополам, помещая посылку в один фрагмент, а вывод в другой, - так что поисковик возвращает обрывки, которые не имеют смысла. Семантическое разбиение исправляет это, уважая смены темы. Отчёты по бенчмаркам LlamaIndex и LangChain за 2024-2025 годы показывают, что семантическое разбиение улучшает качество ответов RAG на 8-20% в открытодоменных вопросно-ответных задачах по сравнению с делением фиксированного размера, причём наибольший прирост - на длинных технических документах.

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

1. Разделение на предложения: используйте токенизатор предложений, чтобы получить атомарные единицы.

2. Встраивание каждого предложения: небольшая модель встраивания выдаёт по одному вектору на предложение.

3. Вычисление сходства соседних предложений: для каждой пары предложений измеряйте косинусное сходство между встраиваниями.

4. Поиск точек разрыва: когда сходство падает ниже порога (или находится в нижнем процентиле), отмечайте это как смену темы.

5. Группировка предложений между разрывами во фрагменты: каждый фрагмент тематически связен.

6. Необязательные ограничения размера: объединяйте крошечные фрагменты или дробите огромные, чтобы поиск оставался практичным.

Семантическое против фиксированного против рекурсивного разбиения

СтратегияКак делитСвязностьСтоимостьКогда применять
Фиксированного размераКаждые N токеновНизкаяБесплатноПрототипирование, логи
РекурсивноеАбзац -> предложение -> словоСредняяБесплатноУниверсальный вариант по умолчанию
СемантическоеГраницы по сходству встраиванийВысокаяСтоимость встраиванийТехнические документы, длинные статьи
АгентноеLLM решает для каждого документаНаивысшаяОчень высокаяВысокие ставки, малый объём

Семантическое разбиение находится между "дёшево и тупо" и "дорого и умно" - хороший вариант по умолчанию, когда вы перерастаете рекурсивное деление.

Регуляторы настройки

Порог сходства: низкий порог -> больше фрагментов, более плотная тематическая связность, хуже непрерывность контекста. Высокий порог -> меньше и длиннее фрагменты. Начните примерно с 15-25-го процентиля сходства соседних предложений.

Модель встраивания: дешёвой небольшой модели встраивания обычно достаточно - вы измеряете относительные сдвиги, а не абсолютный смысл.

Минимальный размер фрагмента: очень короткие фрагменты (одно предложение) плохо извлекаются, потому что им не хватает контекста. Задайте нижнюю границу.

Максимальный размер фрагмента: ограничивайте фрагменты так, чтобы ни один не превышал последующее контекстное окно.

Перекрытие: небольшое перекрытие в 1-2 предложения между соседними фрагментами спасает пограничные случаи, где граница неоднозначна.

Когда это не помогает

Короткие документы: если весь документ помещается в один фрагмент, любое деление - это лишние накладные расходы.

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

Структурированный контент: таблицы, код и JSON следует делить по структуре, а не по смыслу.

Когда поиск не является узким местом: если галлюцинация возникает из-за дизайна промпта или реранжирования, исправление разбиения не поможет.

Источники: