Обработка естественного языка
Классификация текста
Компания получает 50 000 отзывов в день на разных языках. Нужно автоматически определять: positive/negative/neutral, тема (доставка/качество/сервис), приоритет (срочное/обычное). Три задачи классификации. Один BERT или ансамбль специализированных моделей? Этот выбор определяет $20K/мес разницу в infrastructure стоимости.
- **Gmail spam filter**: комбинация Naive Bayes (быстрый pre-filter) + более сложных моделей. Обрабатывает >300 миллиардов писем в день. Naive Bayes всё ещё в core pipeline из-за скорости.
- **Twitter/X content moderation**: LLM + fine-tuned BERT ensemble для определения hate speech, spam, misinformation. Многоуровневая архитектура: быстрый классификатор -> детальный анализ для пограничных случаев.
- **Яндекс.Маркет**: классификация пользовательских отзывов по аспектам (цена, качество, доставка). ruBERT fine-tuned на миллионах размеченных отзывов. Multi-label classification - один отзыв может касаться нескольких аспектов.
Предварительные знания
- Векторизация текста: Bag of Words и TF-IDF
- Основы классификации в ML: обучающая и тестовая выборки, метрики
- Базовый Python и работа с scikit-learn
От наивного Байеса до fastText
Классификация текста стала первой массовой задачей прикладного NLP. Ранние спам-фильтры опирались на наивный байесовский классификатор: простая вероятностная модель, считавшая, насколько слова письма характерны для спама. В 1998 году Торстен Йоахимс показал, что метод опорных векторов отлично работает на тексте, потому что хорошо справляется с разреженными признаками высокой размерности, которые даёт TF-IDF. Это надолго сделало SVM стандартом для классификации документов. В 2016 году команда Facebook AI под руководством Армана Жулена выпустила fastText: библиотека обучала линейный классификатор на эмбеддингах слов и их частей, давая качество близкое к глубоким сетям при скорости в тысячи раз выше. fastText показал, что для многих задач простая и быстрая модель важнее громоздкой.
Naive Bayes: вероятностная классификация
**Naive Bayes** для текста работает через теорему Байеса: P(класс|текст) пропорционально P(текст|класс) * P(класс). 'Naive' - потому что предполагает независимость слов. На практике это предположение нарушается, но модель остаётся сильным baseline для spam detection и sentiment анализа.
**Где Naive Bayes бьёт нейросети**: spam filtering (Gmail использует варианты NB), первичная классификация при дефиците данных (работает с 100+ примерами), real-time системы где BERT слишком медленный. На SpamAssassin датасете NB даёт 99%+ accuracy при 1000x меньшей latency чем BERT.
Почему Naive Bayes называют 'наивным', если он хорошо работает на практике?
SVM: максимальный зазор для текста
**Support Vector Machine (SVM)** находит гиперплоскость с максимальным зазором между классами. Для текста с TF-IDF признаками linear SVM работает исключительно хорошо: пространство высокоразмерное (50K+ признаков), но разреженное - это идеально для SVM.
**SVM vs Naive Bayes**: SVM обычно превосходит NB на задачах классификации документов с разнообразным вокабуляром. NB быстрее и лучше при малых данных. Для production text classification с 1000+ примерами: LinearSVC + TF-IDF является strong baseline, который BERT превосходит лишь на 2-5%.
Почему LinearSVC особенно эффективен для text classification с TF-IDF признаками?
CNN для текста: локальные паттерны
**TextCNN** (Kim, 2014): применить 1D свёртки к последовательности эмбеддингов. Фильтры разных размеров (2,3,4 слова) захватывают n-gram паттерны. Max-pooling выбирает наиболее сильный сигнал из каждого фильтра. Классическая архитектура, быстрая и эффективная на sentiment analysis.
**Когда TextCNN практичен**: edge devices, real-time классификация (<5ms), когда BERT слишком дорог по inference. IMDb sentiment: TextCNN достигает 89%, BERT - 94%. Разница 5% стоит 100x медленнее и дороже? Зависит от задачи.
Зачем TextCNN использует фильтры разных размеров (2, 3, 4 слова) вместо одного?
Fine-Tuning BERT для классификации
**BERT fine-tuning** для классификации: добавить linear classifier поверх [CLS] токена, дообучить весь трансформер на размеченных данных. Стандартный подход даёт SOTA на большинстве задач классификации текста при наличии 1000+ примеров.
**Выбор базовой модели**: для русского языка - ruBERT (DeepPavlov), ruRoBERTa. Для английского - BERT, RoBERTa, DeBERTa-v3. DeBERTa-v3-base бьёт BERT на большинстве задач при сопоставимом размере. Для production без GPU - DistilBERT (40% быстрее, 97% качества BERT).
Для любой задачи классификации текста нужен BERT - более простые методы устарели
Naive Bayes и LinearSVC конкурентоспособны при малых данных и high-throughput требованиях. BERT оправдан при >1000 примерах и когда качество важнее latency
BERT при inference: 50-200ms на CPU, требует GPU для production throughput. LinearSVC: <1ms. Для spam filter на 10М писем/час - linear model. Для анализа отзывов с нюансами - BERT.
При fine-tuning BERT learning rate обычно ставят 2e-5, намного меньше чем 1e-3 при обучении с нуля. Почему?
Ключевые идеи
- **Naive Bayes**: вероятностная модель, быстрая, работает с малыми данными. Лучший baseline для spam/toxic detection. Alpha (Laplace smoothing) - главный гиперпараметр.
- **LinearSVC + TF-IDF**: strong baseline для document classification. Высокоразмерное разреженное пространство - идеальные условия. Обычно 93-95% от BERT качества при 100x скорости.
- **TextCNN**: фильтры разных размеров захватывают n-gram паттерны. Быстрый и эффективный для edge devices. Хороший выбор когда BERT слишком тяжёлый.
- **BERT fine-tuning**: [CLS] токен + linear head. LR 2e-5, 3 эпохи, warmup. SOTA на большинстве задач при >1000 примерах.
- **Выбор метода**: данные < 500 примеров -> NB/SVM. Данные > 1000, нет latency constraint -> BERT. Production high-throughput -> DistilBERT или LinearSVC.
Связанные темы
Классификация - базовый строительный блок NLP систем:
- Named Entity Recognition — NER можно рассматривать как токен-уровневую классификацию - те же модели (BERT) применяются на уровне токенов
- RAG: Retrieval-Augmented Generation — Классификатор определяет intent запроса в RAG - что именно пользователь хочет найти
Вопросы для размышления
- Датасет сильно несбалансированный: 95% негативных, 5% позитивных отзывов. Как это влияет на выбор метода и метрики оценки?
- BERT fine-tuning на 1000 примерах дал 88% accuracy. Через месяц собрали 10 000 примеров. Какой прирост ожидать и как это изменит выбор архитектуры?
- Классификатор нужно объяснять клиентам - почему конкретный отзыв классифицирован как негативный. Какой метод наиболее интерпретируем?
Связанные уроки
- nlp-03 — TF-IDF признаки питают классификаторы Naive Bayes и SVM
- nlp-12 — Дообученный BERT вытеснил классические классификаторы
- nlp-09 — Анализ тональности - частный случай классификации текста
- ml-15-naive-bayes — Naive Bayes - классический базовый классификатор
- ml-13-svm — Линейный SVM доминировал в классификации до глубокого обучения
- prob-04-bayes — Теорема Байеса лежит в основе наивного байесовского классификатора
- ml-05-evaluation