Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#940

Что такое Active Learning для NLP? Как уменьшить стоимость разметки датасета?

Краткий тезис

Active Learning (активное обучение) — это итеративная стратегия обучения модели, при которой она самостоятельно выбирает наиболее информативные (неопределённые) примеры из неразмеченного пула и запрашивает их разметку у эксперта. Такой подход позволяет достичь целевого качества модели при разметке всего 30–50% данных по сравнению со случайным отбором, экономя до 70% трудозатрат. Метод особенно эффективен для задач NLP с высокой стоимостью аннотации — NER, классификация текстов, анализ тональности.

2. Стратегии отбора: Least Confidence, Margin Sampling, Entropy

Выбор метрики неопределённости определяет эффективность Active Learning. Рассмотрим три классические стратегии для задач классификации (бинарной или многоклассовой). Пусть модель возвращает вероятности классов $P(y=c|x)$.

СтратегияФормула (для бинарного случая)Суть
Least Confidence (LC)$1 - \max_c P(y=cx)$
Margin Sampling$P(y=c_1x) - P(y=c_2
Entropy$H(x) = -\sum_c P(y=cx) \log P(y=c

Пример расчёта на Python (с использованием гипотетической модели):

import numpy as np

def select_uncertain_examples(probas, strategy='entropy', n=10):
    if strategy == 'least_confidence':
        uncertainty = 1 - probas.max(axis=1)
    elif strategy == 'margin':
        # сортируем вероятности по убыванию вдоль оси классов
        sorted_probas = np.sort(probas, axis=1)[:, ::-1]
        uncertainty = 1 - (sorted_probas[:, 0] - sorted_probas[:, 1])
    elif strategy == 'entropy':
        eps = 1e-12
        probas = np.clip(probas, eps, 1 - eps)
        uncertainty = -np.sum(probas * np.log(probas), axis=1)
    # индексы n самых неопределённых
    return np.argsort(uncertainty)[-n:][::-1]

Эмпирически для классификации текстов лучший прирост качества даёт Entropy (устойчив к мультиклассовости), а для NER часто комбинируют LC с condition на редкие классы (см. библиотека spaCy с модификацией min_confidence).


3. Применение в NLP: NER и классификация

3.1 NER (распознавание именованных сущностей)

Аннотация сущностей вручную — одна из самых дорогих задач NLP. Active Learning для NER обычно использует:

  • Token-level uncertainty: модель неуверена в границе сущности или её типе. Например, BERT-based NER возвращает вероятность токенов. Высокая энтропия на последовательных токенах сигнализирует о спорной метке (например, “iPhone” — то ли продукт, то ли торговая марка).
  • Sentence-level selection: выбираются предложения, в которых хотя бы один токен имеет low confidence. Экономия по числу размеченных предложений — до 60% для доменных корпусов (медицина, юриспруденция).

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

Active Learning чаще всего применяется в бинарной и многоклассовой классификации. Наиболее эффективен для задач с несбалансированными классами: модель быстро учится на популярных классах, а активный запрос добирает редкие. Пример: модерация комментариев (токсичные — редкий класс). После 3–4 итераций F1 по редкому классу достигает значений, которые при случайной разметке потребовали бы в 3 раза больше данных.

3.3 Другие задачи NLP

  • Question Answering (QA): выбор вопросов, на которые модель отвечает с низкой уверенностью.
  • Sentiment Analysis: амбивалентные тексты (нейтральные или смешанные) — основные кандидаты для разметки.
  • Summarization (редко): если модель-генератор выдаёт низкую вероятность для ключевых фраз.

4. Экономия ресурсов: до 70% разметки

Количественные результаты, подтверждённые в исследованиях:

Метод отбора% размеченных данных для F1=0.85 (NER)Экономия относительно случайного
Случайный (baseline)100%—
Least Confidence38%62%
Margin Sampling34%66%
Entropy31%69%
Комбинация (uncertainty+разнообразие)27%73%

Источник: Settles (2009), Active Learning Literature Survey; практическое подтверждение в spaCy v3 Active Learning.

Экономия не всегда составляет 70% — зависит от сложности задачи, размера пула и модели. Но даже 40–50% экономии при промышленной аннотации (стоимость разметки 1 млн токенов — $100–500) приводит к существенному сокращению бюджета. Главное правило: Active Learning выгоден, когда стоимость разметки многократно превышает затраты на вычисления модели и циклы обучения.


Пет-проект для закрепления

Задача: Реализовать Active Learning для бинарной классификации отзывов (положительный/отрицательный) на неразмеченном датасете, чтобы убедиться в экономии времени.

Инструменты:

  • Python 3.10+, библиотеки pandas, numpy, scikit-learn, modAL (или написать цикл вручную).
  • Датасет: отзывы с IMDB (можно взять неразмеченные 2000 примеров, случайно назначив метки для симуляции эксперта, но потом разметить вручную хотя бы 100).
  • Базовая модель: LogisticRegression (bag-of-words или TF-IDF).

Шаги:

  1. Собрать 2000 неразмеченных отзывов (например, из open‑source 50k IMDB). Разделить на пул (1900) и тестовый (100) готовых размеченных для оценки.
  2. Вручную разметить 50 случайных отзывов — стартовый тренировочный набор.
  3. Обучить LogisticRegression на этих 50 примерах. Замерить accuracy на тесте.
  4. Запустить цикл Active Learning (5 итераций):
    • Вычислить энтропию предсказаний модели для каждого примера в пуле.
    • Выбрать 10 примеров с максимальной энтропией.
    • «Эксперт» (вы, проставив истинные метки) размечает их.
    • Добавить к тренировочным данным, переобучить модель, оценить accuracy.
  5. Параллельно построить baseline: добавить случайные 10 примеров на каждой итерации (без учёта неопределённости).
  6. Сравнить: сколько итераций нужно Active Learning, чтобы достичь accuracy = 0.85, и сколько — случайному отбору.

Ожидаемый результат:

  • Active Learning достигнет accuracy 0.85 после 4–5 итераций (размечено ~100 примеров).
  • Случайный отбор потребует 10+ итераций (размечено >150 примеров). Экономия — не менее 33% примеров.
  • Практически вы убедитесь, что рутина разметки сокращается при сохранении качества.

Связь с другими вопросами

ВопросТема
531. ...Обучение с шумом и semi-supervised learning для NLP

Навигация

  • Предыдущий: 939
  • Следующий: 941
  • Индекс: 00. Индекс разборов