TGViewer
Сибирские Нейросети: Речевая аналитика и малые безопасные языковые модели для бизнеса Сибирские Нейросети: Речевая аналитика и малые безопасные языковые модели для бизнеса @dialoger_tech · 256 subscribers
Post #204 540

Forwarded from Ivan Bondarenko

Всем привет!

Я иногда занимаюсь построением RAG-пайплайнов и столкнулся с проблемой чанкинга. Часто чанкинг выполняется весьма примитивно: текст разбивается на группы токенов одинакового размера без учёта семантики. Люди же для повышения читабельности текстов делают свой "человеческий" чанкинг совершенно по-другому: на абзацы, то есть семантически однородные текстовые отрезки из одного или нескольких предложений ("сверхфразовые единства", как назвали бы это лингвисты).

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

Алгоритм умного чанкинга состоит из следующих шагов.

Шаг 1. Весь текст разбивается на отдельные предложения. Если язык текста - английский, то для разбиения на предложения используется функция sent_tokenize из библиотеки nltk, а если язык текста - русский, то для этой цели применяется функция sentenize из библиотеки razdel. Кроме того, дополнительным критерием завершения предложения может выступать наличие символа перехода на новую строку (опционально).

Шаг 2. Генерируется множество вариантов разбиения текста на два чанка:

вариант 1: первый чанк включает в себя первое предложение, а второй чанк - оставшиеся предложения со второго по последнее;
вариант 2: первый чанк включает в себя первое и второе предложение, а второй чанк - оставшиеся предложения с третьего по последнее;
вариант 3: первый чанк включает в себя первое, второе и третье предложения, а второй чанк - оставшиеся предложения с четвёртого по последнее;
и так далее…

Шаг 3. С помощью кросс-энкодера (например, BAAI/bge-reranker-v2-m3 или Alibaba-NLP/gte-multilingual-reranker-base) для каждого из вариантов разбиения текста на пару чанков считается семантическое сходство между первым и вторым чанками.

Шаг 4. Итоговым вариантом разбиения текста на два чанка считается такой вариант, для которого семантическое сходство между первым и вторым чанками минимально.

Для каждого из двух выделенных чанков описанная процедура повторяется рекуррентно до тех пор, пока чанки не получатся достаточно маленькими (меньше, чем наперёд заданная максимально допустимая длина чанка).

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

Делал для себя, но если вдруг кому-то ещё этот умный чанкер окажется полезным, то буду рад 😊

https://github.com/bond005/smart_chunker
GitHub GitHub - bond005/smart_chunker: This is a smart chunker for efficient preparing of long document for RAG This is a smart chunker for efficient preparing of long document for RAG - bond005/smart_chunker
  • 🔥 7
  • 👍 4
  • ❤ 1
More from @dialoger_tech
  1. Jul 1, 2026🚀 Мы на Hugging Face! Друзья, мы завели официальную страничку нашей компании Siberian Neu…
  2. May 8, 2026Интересная статья про победу наших коллег под руководством Ивана Бондаренко на IBM-овском…
  3. Mar 11, 2026💬 Встреча 💬 Тема: Почему ChatGPT ошибается? Галлюцинации генеративных моделей языка и ме…
  4. Feb 24, 2026✍️Локальный AI-ассистент Василиса — работает даже на парковке! 😱 Знаете этот страх — загр…
  5. Feb 23, 2026✍️🚀 Встречайте asr_eval: наш новый открытый инструментарий для оценки и сравнения ASR-мод…
  6. Dec 25, 2025🎉 Год прорыва: «Сибирские нейросети» в топе мировой науки! Подводим итоги 2025 года: наша…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →