Почему очистка данных LLM ломается на масштабе
На демонстрационной выборке в пару тысяч примеров корпус выглядит чистым, а на полном объёме дообучение ведёт себя непредсказуемо: проверочная метрика растёт, а в работе модель повторяет формулировки из инструкций и теряет формат ответа. Причина почти всегда не в архитектуре, а в том, как выполнена очистка данных — дефекты обучающего корпуса не видны при выборочном просмотре глазами.
Дубликаты в выборке — первый и самый дорогой дефект. Точные копии ловятся нормализацией и хешированием, но почти-дубликаты остаются: одна инструкция с разными вводными, перепечатки из того же источника. Модель видит один и тот же пример десятки раз, переобучается на него, а редкие, но важные случаи тонут в повторах. Рядом — шум в разметке: обрывки служебных тегов, непарные кавычки, поля, оставшиеся от автоматического сбора, ответы не на тот вопрос.
Отдельная категория — скрытые шаблоны. Если девять из десяти ответов начинаются одинаковой вводной фразой или содержат маркер источника, модель выучивает шаблон вместо решения задачи и уверенно воспроизводит его на пользовательских запросах.
Утечка эталонных примеров бьёт по доверию к метрикам: пока контрольная выборка пересекается с обучающей, замеры показывают качество, которого в работе нет. Падение качества дообучения всплывает уже после выката, когда переучивать дороже всего, — разбираем, как очистка данных LLM закрывает это до старта обучения.
Что даёт контролируемое качество корпуса для дообучения
Контроль качества данных начинается не с чистки, а с измеримости: пока доля отбракованных примеров не считается по каждому классу дефектов, невозможно отличить улучшение корпуса от случайного колебания. Профиль дефектов ведём как отчёт по каждому прогону — сколько дубликатов, шаблонных вставок, битых кодировок, обрезанных диалогов и пересечений с оценочными наборами ушло в отбраковку и по какому правилу.
Профиль дефектов показывает, какие правила работают, а какие вырезают лишнее. Порог на повторы и языковой фильтр настраиваются по домену: там, где редкие конструкции ценны для целевого сценария, правило смягчается, а не отключается — иначе редкий класс просто исчезает из корпуса, и модель теряет на нём устойчивость.
Воспроизводимость обучения держится на версионировании: набор получает манифест с контрольными суммами, составом фильтров и разбиением на части. Прогон повторяется через месяц с тем же результатом, а сравнение двух обучений сводится к разнице в правилах, а не к шуму в данных. Для дедупликации и фильтрации на больших объёмах берём NeMo Curator, а метрики считаем своими скриптами.
Устойчивость модели на редких сценариях — прямое следствие аккуратной очистки: избыточная фильтрация убирает именно длинный хвост, а метрики на общем наборе при этом растут. Поэтому долю редких классов до и после фильтрации сверяем и держим не ниже исходной.
Поток или разовая выгрузка: чем отличаются подходы
Режим подготовки корпуса влияет не только на сроки первого прогона, но и на то, как корпус живёт дальше: разовая выгрузка корпуса даёт хороший снимок на дату, регулярная пакетная переработка держит его в актуальном состоянии, непрерывный поток ловит свежие данные почти сразу. Разница проявляется позже — в стоимости надзора, воспроизводимости версий и в том, насколько больно откатывать испорченный прогон.
| Вариант | Когда подходит | Ограничения режима |
|---|---|---|
| Разовая выгрузка корпуса | Первый прогон, проверка гипотезы, источник с редкими изменениями | Снимок устаревает; воспроизводимость держится только на архиве версии |
| Регулярная пакетная переработка | Данные меняются предсказуемо: раз в сутки, неделю, месяц | Нужен регламент обновления данных и сверка только новых фрагментов, иначе дубликаты |
| Непрерывная потоковая обработка | Живой поток событий или обратной связи от пользователей | Сложнее откат, дубликаты на границах окон, выше требования к надзору |
На практике чаще берут комбинацию: поток валидирует записи и складывает их в буфер, а пакетная переработка раз в согласованный интервал пересобирает цельную версию корпуса — с повторной дедупликацией, нормализацией и разметкой персональных данных. Регламент обновления данных фиксирует, что считается новой версией, какой минимум чистых записей нужен для пересборки и по какому правилу откатываются неудачные прогоны. Так потоковая обработка не превращается в неконтролируемый рост, а каждая версия корпуса остаётся прослеживаемой до источника.
Как строится очистка корпуса: этапы инженерных работ
Очистка корпуса строится не вокруг готовой библиотеки, а вокруг конкретных данных и задачи модели. Сначала договариваемся, что считаем шумом именно здесь: битые кодировки, вставки из посторонних источников, шаблонные блоки, машинный перевод, одинаковые инструкции с разной разметкой. Дальше работа идёт этапами, и каждый оставляет проверяемый артефакт — отчёт, правило или тест.
- Аудит корпуса — стратифицированная выборка по источникам и языкам, ручная разметка классов шума и их доли. Это задаёт порядок работ: первым убираем то, что даёт основную массу мусора.
- Правила фильтрации — каждое правило записываем как проверяемое условие: доля служебных символов, длина в токенах, совпадение с шаблонами. Пороги подбираем по разметке и версионируем набор.
- Дедупликация примеров — сравнение по сигнатурам близости, а не по точному совпадению: так ловятся перефразировки и склейки. Отдельно проходим пары «инструкция — ответ»: дубль вопроса с разными ответами вреднее полного повтора.
- Сборка конвейера — шаги оформляем как воспроизводимую цепочку с логированием: сколько примеров отсеял каждый фильтр. Меняем порог и сразу видим последствия, а не перезапускаем вслепую.
- Контрольная выборка — прогон на отложенном наборе, который не участвовал в подборе правил: доля ложных удалений, остаточный шум, сохранность редких, но ценных примеров.
- Передача конвейера — конфигурации, тесты, отчёты по метрикам и инструкция по запуску. Команда заказчика прогоняет очистку сама на новом срезе данных.
Конфигурации, схемы и регламенты подготовки корпуса
Каждый шаг подготовки корпуса фиксируется в артефактах, которые остаются в вашем контуре, а не в переписке с исполнителем. По ним новый инженер воспроизводит сборку с нуля, аудитор видит происхождение каждой записи, а повторный запуск даёт тот же результат на тех же входных данных.
- Схема прохождения данных — путь записи от источника до финального корпуса: узлы обработки, точки ветвления, карантин отбракованного, проверки на каждом переходе.
- Настройки конвейера — декларативные файлы конфигурации: правила нормализации, пороги фильтров по языку и дублям, окна дедупликации, ограничения на длину и кодировку записи.
- Версионирование корпуса — снимки датасета с контрольными суммами и журналом изменений: видно, какая сборка ушла в дообучение и на какую версию откатиться.
- Политики доступа к корпусу — роли и уровни чувствительности, маскирование персональных полей, журнал обращений к данным, порядок выдачи и отзыва доступа.
- Регламент переработки — что происходит с отбракованными записями: карантин, повторная разметка, срок хранения, порядок удаления по запросу владельца данных.
- Документация по данным — паспорт корпуса: состав и доля языков, объём, источники и права на использование, отчёт по метрикам чистоты.
- Чек-лист приёмки — воспроизводимые проверки: контрольный прогон на фиксированной выборке и пороги, при которых сборка считается годной.
Пакет передаём вместе с запуском на вашей инфраструктуре: инженеры заказчика правят конфигурацию самостоятельно, а конвейер остаётся управляемым без нас.
Кейс: как сократили долю брака в обучающем корпусе
Что пришло на вход
Заказчик — продуктовая команда, которая дообучает ассистента поддержки: корпус на 4,2 млн документов собирали из обращений, переписок и внутренней базы знаний. Замеры перед работой показали 34% почти одинаковых записей, 11% обрывков — фрагментов, обрезанных по лимиту поля, — и разнобой в служебной разметке. Дообучение из-за этого перезапускали по 5–6 раз: модель с одинаковой уверенностью воспроизводила и рабочие ответы операторов, и мусорные заготовки.
Что изменили
Собрали конвейер подготовки корпуса: нормализация текста и переносов, снятие служебной разметки, дедупликация по нечёткому совпадению шинглов — расчёт распределённый, на Apache Spark. Дальше фильтры качества: отсев коротких и обрывочных фрагментов, проверка языка, отсев шаблонных приветствий, маскирование персональных данных. Метрики считали на контрольных наборах после каждого шага — так видно вклад отдельного фильтра, а не общий результат.
Метрики до и после
| Метрика | До | После |
|---|---|---|
| Доля дублей | 34% | 6% |
| Обрывки и битые фрагменты | 11% | 1,4% |
| Объём обучающей выборки | 4,2 млн документов | 2,6 млн |
| Повторные прогоны дообучения | 5–6 | 1–2 |
Конвейер остался у команды как регулярный прогон: новые выгрузки проходят те же проверки, отчёт по качеству корпуса собирается автоматически, доля дублей держится на уровне 6% и не растёт вместе с объёмом. Повторные прогоны дообучения сократились с 5–6 до 1–2 — правки в данных теперь видно до запуска обучения, а не после.
Что делать, если корпус уже собран и частично размечен?
Первый шаг — инвентаризация готового корпуса: считаем долю примеров с разметкой, действующую схему меток, сколько примеров размечали несколько человек и где расхождения выше порога согласия. Переиспользуется обычно больше, чем ожидает заказчик: если схема меток не менялась, размеченное ядро идёт в дообучение как есть, а спорные примеры уходят в арбитраж, а не на переразметку с нуля.
Частичная разметка не мешает работе. Размеченная часть работает как посев: на ней калибруем автоматическую разметку, проверяем её на отложенной выборке и доразмечаем вручную только то, где уверенность низкая. Так корпус растёт без пропорционального роста ручного труда.
Переразметка примеров нужна там, где менялась схема меток или правило отнесения к классу. Строим таблицу соответствия старых меток новым, прогоняем миграцию разметки и проверяем результат на контрольной выборке: доля примеров, потерявших метку, должна быть видна до старта дообучения. Прежнюю разметку не удаляем — она остаётся отдельной ревизией, к которой можно вернуться при откате.
История изменений данных — обязательная часть, а не надстройка. Каждое изменение примера фиксируем с автором, причиной и версией, а корпус держим ревизиями, чтобы дообучение на любой из них воспроизводилось. Это даёт сравнить метрики до и после правок и не запускать обучение вслепую после массовой переразметки.
Технические сомнения по качеству корпуса
Пригодность корпуса мы проверяем не на глаз, а по набору измеряемых признаков: доля точных дублей и почти-дублей, разброс длины документов, доля фрагментов на другом языке, плотность служебной разметки и битого текста, покрытие целевых тематических кластеров. Пороги фиксируем до старта работ — тогда приёмка превращается в сверку с числами, а не в спор о вкусах. Если после фильтрации остаётся 60–70% исходного объёма и он покрывает все нужные темы, корпус пригоден; если меньше — пересобираем источники, а не ужесточаем правила.
Не потеряем ли редкие примеры при жёсткой очистке?
Потеряем, если фильтры применяются одной волной. Поэтому редкие классы не удаляем, а помечаем и уводим в отдельный набор: дедупликация по ним идёт с пониженным порогом, а при обучении их вес поднимается. Контроль — по частотному распределению меток: ни один класс не должен исчезнуть после очистки, даже если его доля — доли процента.
Как измерять качество, если эталонной разметки нет?
Собираем «золотую сотню»: небольшую выборку, размеченную вручную по инструкции, и калибруем на ней все автоматические правила. Остальной корпус оцениваем косвенно — согласием двух независимых разметчиков на контрольных фрагментах и поведением модели на удержанном наборе до и после дообучения. Если качество ответов не растёт, проблема чаще в правилах отбора, чем в объёме.
Насколько сложна разметка и сколько времени занимает подготовка?
Основное время уходит не на фильтрацию — она занимает дни, — а на разметку и разбор спорных случаев: она идёт неделями и требует письменной инструкции с примерами граничных ситуаций. Плюс закладываем одну-две итерации: после первой проверки на удержанном наборе правила почти всегда приходится уточнять. Эти сроки мы называем до начала работ, а не по факту.
Обсудим задачу: что нужно для оценки корпуса
Оценка объёма работ по очистке корпуса зависит от того, что уже есть на входе, поэтому обсуждение задачи начинаем с вводных, а не с общих обещаний. Ниже — то, что сильнее всего влияет на расчёт сроков и состав этапов.
- Цели дообучения: какой класс ответов должна выдавать модель и на каких примерах корректность проверяется.
- Источники корпуса: откуда взяты тексты, в каком виде они лежат сейчас, примерный объём в документах и диалогах.
- Разметка и эталоны: есть ли вручную проверенные примеры, кто и по каким правилам их отбирал.
- Известный шум: повторы, обрывки, смешение языков, служебные вставки, следы автогенерации.
- Ограничения по данным: персональные сведения, коммерческая тайна, требования к хранению и доступу.
- Критерии приёмки: по каким метрикам вы поймёте, что корпус готов к обучению.
- Режим работы: разовая очистка или регулярный поток с обновлениями и повторной проверкой.
Опишите задачу своими словами — вернёмся с оценкой объёма, планом работ и распределением ролей по этапам. Если часть вводных пока не собрана, начнём с их уточнения: это надёжнее, чем переразмечать корпус после того, как модель уже обучена.







