Обработка естественного языка

Text classification

Классификация текстов

актуальноТекущий рабочий стандарт

Направления: Прикладные направления · NLP

Отнесение документа к одной или нескольким категориям: от спам-фильтра до маршрутизации тикетов.

Ключевые тезисы

  • + ставится за минуты.
  • обычно даёт заметный прирост качества.
  • требует взвешивания и метрик за пределами .

Какую задачу решает

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

Спектр решений широк: от с логистической регрессией (минуты на обучение, миллисекунды на предсказание) до дообученного и большой модели. Разрыв в качестве между крайними точками на типичной задаче — единицы процентов, а разрыв в стоимости — три порядка. Правильный выбор определяется объёмом разметки, требованиями к и ценой ошибки.

Порядок построения решения

1) Постройте плюс за полчаса и запишите метрику — это ваша точка отсчёта. 2) Проверьте согласованность разметки: дайте 100 примеров двум людям и посчитайте согласие. Если оно 80%, потолок модели примерно там же, и переход на ничего не даст. 3) Только если недостаточна, а разметка согласована, дообучайте энкодер. 4) Большую модель берите, если разметки нет вовсе или категорий десятки и они меняются. Пропуск первых двух шагов — самая частая причина потраченных впустую недель.

Подробный разбор

2 подтемы — объяснения, формулы, примеры и интерактивные графики.

  1. : (слова + символьные n-граммы) и .
  2. Быстрое улучшение: линейная модель на предобученных .
  3. Максимум качества: BERT-подобной модели с головой-классификатором.
  4. Всегда: стратифицированная и метрики по каждому классу.
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(
    TfidfVectorizer(ngram_range=(1, 2), min_df=3, sublinear_tf=True),
    LogisticRegression(max_iter=1000, class_weight="balanced"),
)
Бейзлайн, который на многих задачах отстаёт от трансформера всего на несколько процентов

  • Смотрите отчёт по классам (classification_report), а не общий .
  • Взвешивание классов в — первый и самый дешёвый шаг.
  • Редкие классы: объединяйте в «прочее» или решайте отдельной моделью.
  • Иерархическая классификация (сначала группа, затем класс внутри) часто работает лучше плоской.
0.000.250.500.751.00оценка моделипорогкласс 0класс 1
Precision0.941
Recall0.841
F10.888
Accuracy0.936
TP / FP / FN252 / 16 / 48
Для каждого класса порог можно подбирать отдельно — это заметно поднимает macro-F1

Где применяется

  • Маршрутизация обращенийАвтоматическое направление тикета в нужную команду.
  • Модерация контентаФильтрация нежелательных сообщений с настраиваемым порогом.
  • Анализ отзывовТональность и темы в масштабе, недоступном ручному разбору.
  • Разметка документовКатегоризация входящей почты, договоров, заявок.

Плюсы, минусы и альтернативы

Плюсы

  • Хорошо изученная задача с проверенными рецептами на каждом уровне бюджета.
  • Простая часто даёт 90% результата за 1% усилий.
  • Метрики понятны, а оценка качества прямолинейна.
  • Легко встраивается в существующие процессы.

Минусы

  • Требует разметки, а её качество определяет потолок.
  • Категории со временем меняются, и модель устаревает.
  • Дисбаланс почти всегда присутствует и требует отдельной работы.
  • Границы между близкими категориями размыты и для людей тоже.

Брать, если

  • Категории заданы и стабильны.
  • Есть или можно собрать размеченные примеры.
  • Объём достаточен, чтобы автоматизация имела смысл.

Не брать, если

  • Категории плохо определены — сначала разберитесь с ними, иначе разметка будет противоречивой.
  • Нужен свободный ответ, а не метка.

Чем заменяют

Связанные темы

Работа с корпусами текстов · Прикладные задачи NLP

Topic Modeling75%

Тематическое моделирование · Обработка естественного языка

Автоматическое выделение тем в коллекции документов: от классического LDA до кластеризации эмбеддингов.

Summarization75%

Суммаризация · Обработка естественного языка

Сжатие текста с сохранением смысла: извлекающая (выбор предложений) и абстрактивная (генерация).

LLM Evaluation75%

Оценка языковых моделей · Генеративный ИИ

Как измерять качество генерации: бенчмарки, оценка моделью-судьёй и человеческие сравнения.

Perplexity75%

Перплексия · Метрики

Экспонента кросс-энтропии языковой модели: между сколькими равновероятными вариантами она в среднем выбирает.

Clustering75%

Кластеризация · Обучение без учителя

Разбиение объектов на группы похожих без заранее известных меток.

NER75%

Извлечение именованных сущностей · Обработка естественного языка

Разметка последовательности: находим в тексте имена, организации, даты, суммы.

Sentiment Analysis75%

Анализ тональности · Обработка естественного языка

Определение эмоциональной окраски текста — от бинарной оценки до аспектной тональности.

BERT75%

BERT · Обработка естественного языка

Двунаправленный энкодер, предобученный на восстановлении замаскированных токенов.

Embeddings75%

Эмбеддинги · Обработка естественного языка

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

F175%

F1-мера · Метрики

Гармоническое среднее точности и полноты — компромисс между ними одним числом.

Precision75%

Точность · Метрики

Какая доля объектов, предсказанных положительными, действительно положительна.

Recall75%

Полнота · Метрики

Какая доля реально положительных объектов найдена моделью.

Проверить себя

Тема встречается в тесте по направлениям — ошибки приведут обратно на эту страницу.

Следующий шагПроверить себя: NLPТема встречается в этом тесте 1 раз. Ошибка приведёт обратно на эту страницу — с объяснением, что именно не сошлось.Перейти →

Глава «Обработка естественного языка» последний раз правилась . Нашли ошибку — напишите.