Как я обучил русский RAG-сплиттер, который режет документы по индексам, а не по тексту

Автор обучил русский RAG-сплиттер, который не переписывает текст, а возвращает индексы границ чанков. Такой подход сохраняет исходный документ байт-в-байт, сокращает вывод до короткого JSON и не разрывает таблицы, если парсер заранее выделил их как отдельные блоки.

Документ сначала делится на нумерованные юниты: предложения, заголовки, таблицы и блоки кода. Модель возвращает JSON со списком границ, после чего хост режет оригинал по этим индексам и проверяет их валидность. Текст остаётся неизменным, поэтому не ломаются цитирование, подсветка фрагментов и оффсеты.

Основой стала T-lite-it-2.1 с более экономным для русского токенайзером: в тесте автора она использовала 1,74 токена на слово против 2,71 у Qwen2.5-7B и 3,17 у Llama-2. Модель обучили через bf16 LoRA на RTX 5090 за примерно 3,5 часа, а затем развернули в GGUF Q5_K_M на AMD Strix Halo через llama.cpp Vulkan. На одном тестовом документе из девяти юнитов полный проход занял около 1,2 секунды при 35 токенах вывода.

Метрика boundary-F1@±1 достигла 0,821 на сравнении с разметкой модели-учителя DeepSeek-V4-Flash, но это не оценка качества RAG. Downstream-тестов по hit-rate и faithfulness пока нет; кроме того, модель иногда пере-сегментирует, а очень большие таблицы требуют отдельного retrieval-пайплайна с саммари, группами строк и parent-document retrieval.

Коротко

  • Сплиттер возвращает индексы границ чанков, а исходный текст режет хост, поэтому результат совпадает с документом байт-в-байт.
  • В тесте автора T-lite-it-2.1 кодировала русский текст в 1,74 токена на слово против 2,71 у Qwen2.5 и 3,17 у Llama-2.
  • Обучение bf16 LoRA заняло около 3,5 часа на RTX 5090, пиковое потребление памяти составило 25,4 ГБ VRAM.
  • GGUF Q5_K_M размером около 5,9 ГБ работал на AMD Strix Halo через Vulkan без CUDA и обрабатывал тестовый документ примерно за 1,2 секунды.
  • Boundary-F1@±1 равен 0,821 относительно разметки учителя, но downstream-оценки качества retrieval и faithfulness ещё не проводились.

FAQ

Зачем возвращать индексы границ вместо готового текста чанков и какую проблему это решает в RAG-пайплайне?

Модель не переписывает документ и не меняет символы, пробелы или кавычки. Это сохраняет точные цитаты и оффсеты, а также сокращает объём генерации до короткого JSON.

Почему таблицы сохраняются целиком и при каком условии эта гарантия перестаёт работать?

Таблица заранее становится одним атомарным юнитом, поэтому граница может пройти только до неё или после неё. Если upstream-парсер неправильно распознал структуру таблицы, сплиттер восстановить её не сможет.

Доказывает ли boundary-F1@±1 = 0,821, что новый сплиттер улучшает ответы RAG-системы?

Нет. Метрика показывает согласие с границами модели-учителя, а не рост hit-rate, faithfulness или качества конечных ответов; для этого нужен отдельный downstream-eval.

Читайте также

  1. Как перенести расчёт абсолютных валютных курсов на Kaggle и автоматизировать обзоры через Gemini API
  2. Три четверти сотрудников рекламных агентств готовы уйти из-за тендеров
  3. Waze получит несколько новых функций на базе искусственного интеллекта
  4. ИИ-агенты для бизнеса в России: обзор 10 локальных платформ и решений
  5. Как дообучить LLM: пошаговый разбор
Ключевые инсайты из новости (по версии ChatGPT)
  • Нарезка RAG-документов по индексам границ: LLM-сплиттер может возвращать не переписанные чанки, а индексы юнитов, после которых проходит граница. Хост затем режет исходный документ сам, что сохраняет текст байт-в-байт и не ломает цитирование, подсветку фрагментов и оффсеты.
    [RAG и поиск по знаниям]
Для получения полного доступа оформите подписку PubMag PRO.
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Инсайты автоматически генерируются с помощью искусственного интеллекта на основе текста статьи.
← Назад в лентуЧитать оригинал →
✈️ Подписывайтесь на мой Telegram-канал — там еще больше интересного про AdTech, MarTech, AI и многое другое!