Предобработка: что чистить, а что портить нельзя

Обработка естественного языка (NLP) · Урок 2 / 24

Каждое удаление символа — это гипотеза

Типовой скрипт очистки текста выглядит одинаково в сотне репозиториев: нижний регистр, выбросить пунктуацию, выбросить цифры, выбросить стоп-слова, схлопнуть пробелы. Каждая строка этого скрипта — утверждение, что удаляемое не несёт информации для вашей задачи. Половина этих утверждений обычно ложна, и обнаруживается это на продакшене.

Что чистят почти всегда

  • Служебная разметка. HTML-теги, остатки markdown, подписи писем, цитируемая история переписки. В обращении в поддержку три четверти символов бывают цитатой предыдущего письма, и модель обучается на ней вместо нового вопроса.
  • Невидимые символы. Неразрывный пробел, мягкий перенос, нулевой пробел, разные виды кавычек и тире. Они превращают одно слово в два разных токена и ломают точные совпадения.
  • Дубликаты. Один и тот же текст, попавший в выборку сорок раз, перекашивает и обучение, и оценку. Особенно опасен дубликат, разошедшийся между обучением и тестом.
  • Кодировочный мусор. Битая кириллица, двойное перекодирование, случайные последовательности вопросительных знаков — признак сломанного источника, а не текста.

Что портить нельзя

Регистр несёт информацию: в письме, набранном капсом, содержится тональность, а «МТС» и «мтс» после нижнего регистра неотличимы от предлога в некоторых контекстах. Пунктуация несёт границы предложений, а восклицательные знаки и многоточия — эмоцию; для тональности их удаление стоит нескольких пунктов качества. Цифры несут суть в финансовых и медицинских текстах: убрав их, вы уравняли счёт на девять тысяч и на девять миллионов. Стоп-слова содержат отрицание: удалив «не» и «без», вы превратили «не работает» в «работает». Эмодзи в отзывах и переписке — сильный сигнал тональности, а не шум.

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

Правило порядка

Чистка идёт до токенизации и должна быть одинаковой на обучении и на инференсе — расхождение здесь даёт самый неприятный класс багов: метрики на тесте отличные, в проде хуже, а различие невидимо глазом. Способ проверить: возьмите сто случайных документов, прогоните через конвейер и посмотрите на них до и после в двух колонках. За полчаса такого чтения обычно находится три ошибки, которые иначе жили бы месяцами.

Инсайт. Современная модель общего назначения переваривает грязный текст лучше, чем классический конвейер: ей не нужны нижний регистр и удаление стоп-слов. Агрессивная чистка перед такой моделью чаще вредит, чем помогает.
Частая ошибка. Копировать функцию очистки из чужого проекта вместе со списком стоп-слов. Стандартные русские списки содержат «не», «нет», «без», и вместе с ними из корпуса уходит отрицание — вместе с половиной смысла жалоб.
Про-совет. Сохраняйте сырой текст рядом с очищенным, а не вместо него. Когда через месяц выяснится, что чистка съела нужное, переразметка обойдётся в одну строку, а не в новый сбор данных.

Шпаргалка

  • Каждая операция очистки — проверяемая гипотеза о том, что удаляемое не информативно.
  • Цитаты писем, невидимые символы и дубликаты убирают почти всегда.
  • Регистр, отрицания, цифры и эмодзи удаляют только с доказательством, что они не нужны.
  • Конвейер очистки идентичен на обучении и в проде, иначе метрики врут.
1. Чем опасно удаление стандартных стоп-слов в русском корпусе жалоб?
2. Почему конвейер очистки должен совпадать на обучении и на инференсе?
3. Как обычно относиться к агрессивной чистке перед моделью общего назначения?
Задание — проверяет ИИ

Прогоните сто случайных документов своего корпуса через текущую очистку и выложите их в две колонки: до и после. Найдите и опишите минимум пять случаев, где чистка удалила значимое, и минимум три случая, где мусор остался. Для каждой операции конвейера напишите одну строку: какая гипотеза за ней стоит и подтверждается ли она на вашем корпусе. Укажите, какие операции вы после этого убрали или добавили.

← Назад

🔒 Ответьте на вопрос верно, чтобы перейти к следующему уроку.

Предобработка: что чистить, а что портить нельзя — Обработка естественного языка (NLP) — Skilvy