Активное обучение
Используйте в Potato 5 стратегий активного обучения — отбор по неопределённости, BADGE, BALD, по разнообразию и гибридный ансамбль — и сократите затраты на разметку до 50%.
Активное обучение помогает размечать умнее, выводя вперёд самые информативные примеры. Вместо случайной разметки вы сосредотачиваетесь на объектах, в которых модель уверена меньше всего.
Как это работает
Активное обучение в Potato автоматически переупорядочивает объекты разметки по предсказаниям модели:
- Первичный сбор — накопить минимальное количество разметки
- Обучение — обучить классификатор на имеющейся разметке
- Предсказание — получить оценки неопределённости для неразмеченных объектов
- Переупорядочивание — вывести вперёд объекты с наибольшей неопределённостью
- Разметка — разметчики размечают приоритетные объекты
- Переобучение — периодически обновлять модель новой разметкой
Spend annotation effort where the model learns the most
Конфигурация
Базовая настройка
active_learning:
enabled: true
schema_names:
- sentiment # Which annotation schemes to use
min_annotations_per_instance: 1
min_instances_for_training: 20
update_frequency: 50 # Retrain after every 50 annotations
max_instances_to_reorder: 1000Полная конфигурация
active_learning:
enabled: true
# Which schemas to use for training
schema_names:
- sentiment
# Minimum requirements
min_annotations_per_instance: 1
min_instances_for_training: 20
# Retraining frequency
update_frequency: 50
# How many instances to reorder
max_instances_to_reorder: 1000
# Classifier configuration
classifier_name: sklearn.linear_model.LogisticRegression
classifier_params:
C: 1.0
max_iter: 1000
# Query strategy
query_strategy: uncertainty # uncertainty, diversity, badge, bald, hybrid
# Feature extraction
vectorizer:
type: TfidfVectorizer
params:
max_features: 5000
ngram_range: [1, 2]
# Model persistence
model_persistence:
enabled: true
save_dir: "models/"
max_saved_models: 5Стратегии отбора
Potato поддерживает пять стратегий отбора самых информативных объектов:
| Стратегия | Описание |
|---|---|
uncertainty | Берёт объекты, в которых модель уверена меньше всего (по умолчанию) |
diversity | Берёт объекты, максимально непохожие на уже размеченные данные |
badge | Batch Active learning by Diverse Gradient Embeddings |
bald | Bayesian Active Learning by Disagreement |
hybrid | Ансамбль, сочетающий несколько стратегий |
active_learning:
query_strategy: uncertainty # or diversity, badge, bald, hybridПоддерживаемые классификаторы
Классификаторы задаются полным путём импорта из sklearn через classifier_name:
| Классификатор | Путь в sklearn | Для чего лучше | Скорость |
|---|---|---|---|
| Логистическая регрессия | sklearn.linear_model.LogisticRegression | Бинарная и многоклассовая классификация | Быстро |
| Случайный лес | sklearn.ensemble.RandomForestClassifier | Сложные закономерности | Средне |
| SVC | sklearn.svm.SVC | Небольшие датасеты | Медленно |
| Мультиномиальный NB | sklearn.naive_bayes.MultinomialNB | Классификация текста | Очень быстро |
Примеры классификаторов
# Logistic Regression (recommended starting point)
classifier_name: sklearn.linear_model.LogisticRegression
classifier_params:
C: 1.0
max_iter: 1000
# Random Forest
classifier_name: sklearn.ensemble.RandomForestClassifier
classifier_params:
n_estimators: 100
max_depth: 10
# Support Vector Classifier
classifier_name: sklearn.svm.SVC
classifier_params:
kernel: rbf
probability: true
# Naive Bayes
classifier_name: sklearn.naive_bayes.MultinomialNB
classifier_params:
alpha: 1.0Векторизаторы
| Векторизатор | Описание |
|---|---|
TfidfVectorizer | Признаки со взвешиванием TF-IDF (рекомендуется) |
CountVectorizer | Простой подсчёт слов |
HashingVectorizer | Экономный по памяти для больших словарей |
# TF-IDF (recommended)
vectorizer:
type: TfidfVectorizer
params:
max_features: 5000
ngram_range: [1, 2]
stop_words: english
# Count Vectorizer
vectorizer:
type: CountVectorizer
params:
max_features: 3000
ngram_range: [1, 1]
# Hashing Vectorizer (for large datasets)
vectorizer:
type: HashingVectorizer
params:
n_features: 10000Интеграция с LLM
Активное обучение может при желании использовать LLM для более точного отбора объектов:
active_learning:
enabled: true
schema_names:
- sentiment
# LLM-based selection
llm_integration:
enabled: true
endpoint_type: vllm
base_url: http://localhost:8000/v1
model: meta-llama/Llama-2-7b-chat-hf
# Mock mode for testing
mock_mode: falseПоддержка нескольких схем
Активное обучение может циклически проходить по нескольким схемам разметки:
annotation_schemes:
- annotation_type: radio
name: sentiment
labels: [Positive, Negative, Neutral]
- annotation_type: radio
name: topic
labels: [Politics, Sports, Tech, Entertainment]
active_learning:
enabled: true
schema_names:
- sentiment
- topic
# Schema-specific settings
schema_config:Сохранение модели
Сохраняйте и заново загружайте обученные модели между перезапусками сервера:
active_learning:
enabled: true
schema_names:
- sentiment
model_persistence:
enabled: true
save_dir: "models/"
max_saved_models: 5 # Keep last 5 models
# Save to database instead of files
use_database: falseНаблюдение за прогрессом
Админ-панель отслеживает метрики активного обучения:
- Текущая точность модели
- Число циклов обучения
- Распределение неопределённости
- Сколько объектов осталось
- История переобучений
Доступ — через /admin с вашим админским ключом API.
Рекомендации
1. Начните со случайной выборки
Соберите первичную разметку до включения активного обучения:
active_learning:
enabled: true
min_instances_for_training: 50 # Wait for 50 annotations2. Подбирайте подходящий классификатор
- LogisticRegression: быстрый, хороший вариант по умолчанию для большинства задач
- RandomForest: лучше на сложных закономерностях, медленнее
- MultinomialNB: очень быстрый, хорош для простой классификации текста
3. Следите за распределением классов
Активное обучение может создать перекос классов. Смотрите на это в админ-панели и подумайте о стратифицированной выборке.
4. Задайте разумную частоту переобучения
Слишком частое переобучение впустую тратит ресурсы:
update_frequency: 100 # Retrain every 100 annotations5. Включите сохранение модели
Сохраняйте модели, чтобы не переобучать всё заново после перезапуска:
model_persistence:
enabled: true
save_dir: "models/"Пример: полная конфигурация
annotation_task_name: "Sentiment Analysis with Active Learning"
task_dir: "."
port: 8000
data_files:
- "data/reviews.json"
item_properties:
id_key: id
text_key: text
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment?"
labels:
- Positive
- Negative
- Neutral
active_learning:
enabled: true
schema_names:
- sentiment
min_annotations_per_instance: 1
min_instances_for_training: 30
update_frequency: 50
max_instances_to_reorder: 500
classifier_name: sklearn.linear_model.LogisticRegression
classifier_params:
query_strategy: uncertainty
vectorizer:
model_persistence:
output_annotation_dir: "output/"
export_annotation_format: "json"
user_config:
allow_all_users: trueВ сочетании с поддержкой ИИ
Используйте активное обучение вместе с помощью LLM:
active_learning:
enabled: true
schema_names:
- sentiment
min_instances_for_training: 30
ai_support:
enabled: true
endpoint_type: openai
ai_config:
model: gpt-4
api_key: ${OPENAI_API_KEY}
features:
label_suggestions:
enabled: trueТакое сочетание выводит вперёд неопределённые объекты и одновременно даёт разметчику подсказки ИИ.
Решение проблем
Обучение падает
- Убедитесь, что разметки достаточно (
min_instances_for_training) - Проверьте распределение классов — нужны примеры всех классов
- Убедитесь, что формат данных соответствует схеме
Медленно работает
- Уменьшите
max_instances_to_reorder - Увеличьте
update_frequency - Возьмите
HashingVectorizerдля больших словарей
Модель не обновляется
- Проверьте настройку
update_frequency - Убедитесь, что разметка сохраняется
- Посмотрите админ-панель на предмет ошибок
Что почитать дальше
- Поддержка ИИ — разметка с помощью LLM
- Назначение заданий — стратегии назначения
- Админ-панель — наблюдение за метриками активного обучения
Детали реализации — в исходной документации.