Что такое active learning для сбора синтетических данных?

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

Active learning (активное обучение) — это итеративный процесс, в котором модель сама выбирает наиболее информативные неразмеченные примеры для последующей разметки. В контексте сбора синтетических данных метки для таких примеров генерируются не человеком, а LLM (Large Language Model). Это позволяет эффективно расширять обучающий датасет, фокусируясь на сложных, пограничных случаях, где модель ошибается или неуверенна, и тем самым повышать качество модели при минимальных затратах на ручную разметку.


1. Термин: Active Learning (активное обучение)

Active learning — парадигма машинного обучения, при которой алгоритм может запрашивать метки для определённых, специально отобранных неразмеченных данных. Цель — достичь высокой точности модели, используя как можно меньше размеченных примеров. В отличие от пассивного обучения (где данные размечиваются случайно или заранее), active learning выбирает самые «полезные» точки.

Ключевые компоненты

  • Неразмеченный пул (unlabeled pool) — большой набор данных без меток.
  • Модель-оракул (oracle) — источник истинных меток. В нашем случае оракулом выступает LLM, генерирующая синтетические метки.
  • Стратегия выборки (query strategy) — правило, по которому выбираются примеры для разметки (например, uncertainty sampling).
  • Итеративный цикл — обучение → предсказание → выборка → разметка → добавление → повтор.

2. Зачем нужен active learning для синтетических данных?

Основные проблемы при сборе данных:

  • evaluation|Ручная разметка дорога и медленна — особенно для специализированных доменов (медицина, юриспруденция).
  • LLM могут генерировать метки — но call|вызов LLM тоже стоит денег и времени, поэтому разумно тратить ресурсы только на те примеры, которые действительно улучшат модель.
  • Длинный хвост редких случаев — модель часто плохо работает на примерах, которые редко встречаются в исходном датасете. Active learning целенаправленно ищет такие примеры.

Active learning + синтетические данные решают обе проблемы: автоматически отбирают сложные примеры и дешево (относительно человека) размечают их через LLM.


3. Итеративный процесс (подробно)

Процесс состоит из пяти шагов, повторяемых циклически:

Шаг 1. Обучить модель на текущем датасете

Используется имеющийся размеченный датасет (начальный, возможно, небольшой). Обучается модель (классификатор, регрессор, model|генеративная модель).

Шаг 2. Запустить модель на неразмеченных данных

Модель делает предсказания для всех примеров из unlabeled pool. Для каждого примера получаем не только метку, но и уверенность (confidence score) — например, вероятность самого вероятного класса.

Шаг 3. Выбрать примеры, где модель неуверенна (uncertainty sampling)

Применяется одна из стратегий uncertainty sampling (см. раздел 4). Отбирается, например, top-k примеров с наименьшей уверенностью.

Шаг 4. Сгенерировать синтетические метки для этих примеров (через LLM)

Для каждого отобранного примера формируется промпт, который просит LLM дать метку (или объяснение). LLM возвращает метку, которая считается синтетической «золотой». Важно: качество меток нужно контролировать (например, через few-shot или chain-of-thought).

Шаг 5. Добавить в датасет → повторить

Новые размеченные примеры добавляются в обучающий датасет. Модель дообучается (или переобучается) на расширенном датасете. Цикл повторяется до достижения желаемого качества или исчерпания бюджета.


4. Uncertainty Sampling (выборка по неуверенности) — методы

Uncertainty sampling — самая популярная стратегия active learning. Она выбирает примеры, в которых модель наименее уверена.

МетодФормула / ОписаниеКогда использовать
Least ConfidenceВыбираем пример с минимальной максимальной вероятностью: `1 - P(ŷx)`
Margin SamplingРазница между двумя самыми вероятными классами: `P(y₁x) - P(y₂
EntropyЭнтропия распределения вероятностей: `-Σ P(yᵢx) log P(yᵢ

Пример (бинарная классификация):

  • Пример A: P(класс1)=0.51, P(класс2)=0.49 → least confidence = 0.49, margin = 0.02, entropy ≈ 0.999
  • Пример B: P(класс1)=0.99, P(класс2)=0.01 → least confidence = 0.01, margin = 0.98, entropy ≈ 0.056
  • Выбираем пример A — модель почти не различает классы.

5. Генерация синтетических меток через LLM

LLM выступает в роли оракула. Для каждого отобранного примера (например, текст или вопрос) составляется промпт:

Ты — эксперт по классификации текстов. Определи, к какой категории относится следующий текст: {текст}. 
Варианты: {список классов}. Ответь только названием класса.

Варианты улучшения качества

  • Few-shot — добавить 2-3 примера с правильными метками.
  • Chain-of-thought — попросить LLM сначала объяснить, почему текст относится к классу, а потом дать метку.
  • Majority voting — сделать несколько запросов с разными температурами и взять наиболее частый ответ.
  • Фильтрация — отбрасывать примеры, где LLM неуверен (низкая вероятность токена метки).

Риски LLM может генерировать неверные метки (галлюцинации), особенно для редких или сложных случаев. Поэтому рекомендуется периодически проводить ручную валидацию небольшой выборки.


6. Преимущества active learning + синтетические данные

  • Эффективность использования ресурсов — не нужно размечать все данные, только самые полезные.
  • Покрытие длинного хвоста — модель учится на своих ошибках, что улучшает обобщение.
  • Автоматизация — весь процесс можно запускать без участия человека (кроме начальной настройки).
  • Масштабируемость — легко добавить новые источники неразмеченных данных.

7. Риски и ограничения

РискОписаниеМитигация
Качество синтетических метокLLM может ошибаться, особенно на сложных примерахИспользовать ансамбль LLM, few-shot, ручную валидацию
Смещение выборкиActive learning может отбирать только «крайние» примеры, уводя модель от реального распределенияДобавлять случайную выборку (exploration vs exploitation)
Дрейф данныхСо временем распределение неразмеченных данных может изменитьсяПериодически пересматривать стратегию
Стоимость LLMКаждый вызов LLM стоит денег, особенно при большом количестве итерацийОптимизировать количество запросов, использовать дешёвые модели для фильтрации

8. Сравнение: Active Learning vs Пассивный сбор синтетических данных

ХарактеристикаActive LearningПассивный сбор (случайная выборка)
Отбор примеровПо неуверенности моделиСлучайный
Стоимость разметкиНиже (меньше примеров)Выше (больше примеров)
Качество моделиВыше при том же бюджетеНиже
Сложность реализацииВыше (нужен цикл, стратегия)Проще
Покрытие сложных случаевХорошееСлучайное

9. Пример реализации на Python (псевдокод)

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from openai import OpenAI

client = OpenAI(api_key="...")

# Начальные данные
X_labeled, y_labeled = load_initial_data()
X_unlabeled = load_unlabeled_pool()
model = RandomForestClassifier()

# Цикл active learning
for iteration in range(10):
    model.fit(X_labeled, y_labeled)
    
    # Получить вероятности для неразмеченных
    probs = model.predict_proba(X_unlabeled)
    
    # Uncertainty sampling: least confidence
    uncertainties = 1 - np.max(probs, axis=1)
    top_k_indices = np.argsort(uncertainties)[-100:]  # 100 самых неуверенных
    
    # Генерация синтетических меток через LLM
    synthetic_labels = []
    for idx in top_k_indices:
        text = X_unlabeled[idx]
        prompt = f"Классифицируй текст: '{text}'. Классы: {classes}. Ответь только классом."
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.0
        )
        label = response.choices[0].message.content.strip()
        synthetic_labels.append(label)
    
    # Добавляем в размеченный набор
    X_labeled = np.vstack([X_labeled, X_unlabeled[top_k_indices]])
    y_labeled = np.hstack([y_labeled, synthetic_labels])
    
    # Удаляем размеченные из пула
    X_unlabeled = np.delete(X_unlabeled, top_k_indices, axis=0)

Примечание в реальных проектах используют библиотеки modAL, ALiPy, scikit-activeml.


10. Интеграция с Agentic RAG

В архитектуре Agentic RAG active learning может быть встроен в цикл работы агента:

  • Агент получает запрос, ищет документы, генерирует ответ.
  • Если агент неуверен (низкая уверенность в ответе, противоречия в документах), он может инициировать запрос на дообучение: отправить запрос и контекст в active learning pipeline.
  • LLM генерирует синтетический пример (вопрос + правильный ответ/документ) и добавляет его в датасет для следующего цикла обучения retrieval или генератора.
  • Таким образом, система самоулучшается на сложных запросах.

11. Метрики оценки эффективности active learning

  • Accuracy на валидационном наборе — должна расти с каждой итерацией быстрее, чем при случайной выборке.
  • Coverage ошибок — доля примеров, на которых модель ошибалась, но которые были отобраны и добавлены.
  • Cost per improvement — сколько стоила каждая итерация (вызовы LLM) на единицу прироста метрики.
  • Diversity — разнообразие отобранных примеров (чтобы не зацикливаться на одном типе).

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

Задача Реализовать active learning pipeline для классификации отзывов на позитивные/негативные с синтетической разметкой через LLM.

Инструменты Python, scikit-learn (LogisticRegression), openai, pandas, numpy.

Шаги:

  1. Взять небольшой размеченный датасет отзывов (например, 100 примеров из IMDB).
  2. Обучить логистическую регрессию на TF-IDF признаках.
  3. Взять 1000 неразмеченных отзывов.
  4. На каждой итерации:
    • Получить вероятности для неразмеченных.
    • Выбрать 20 самых неуверенных (least confidence).
    • Через GPT-4 получить метки (промпт: "Определи тональность отзыва: {текст}. Ответь 'positive' или 'negative'.").
    • Добавить их в обучающий датасет.
    • Переобучить модель.
  5. Оценивать accuracy на тестовом наборе после каждой итерации. Сравнить с baseline (случайная выборка 20 примеров за итерацию).

Ожидаемый результат Модель, обученная с active learning, достигнет accuracy 85% за 5 итераций (100 новых примеров), тогда как случайная выборка — только 75%.


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

ВопросТема
695Синтетические данные: методы генерации и валидация
697Data augmentation для текстов
700Fine-tuning LLM на синтетических данных
710Оценка качества RAG-системы
720LLM as judge: автоматическая оценка ответов
735Агентные циклы: self-improvement и обратная связь

Навигация