能動学習
不確実性サンプリングを使用して価値の高い例のアノテーションを優先する。
能動学習
能動学習は、最も情報量の多い例を優先することで、よりスマートにアノテーションを行うことを支援します。ランダムにアノテーションする代わりに、モデルが最も不確実なインスタンスに焦点を当てます。
仕組み
Potatoの能動学習は、機械学習の予測に基づいてアノテーションインスタンスを自動的に並べ替えます:
- 初期収集 - 最小限のアノテーションを収集する
- 学習 - 既存のアノテーションで分類器を訓練する
- 予測 - 未アノテーションインスタンスの不確実性スコアを取得する
- 並べ替え - 不確実性が最も高いインスタンスを優先する
- アノテーション - アノテーターが優先されたインスタンスにラベルを付ける
- 再学習 - 新しいアノテーションで定期的にモデルを更新する
設定
基本設定
yaml
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完全な設定
yaml
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:
type: LogisticRegression
params:
C: 1.0
max_iter: 1000
# 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サポートされる分類器
| 分類器 | 最適な用途 | 速度 |
|---|---|---|
LogisticRegression | 二値/多クラス分類 | 高速 |
RandomForestClassifier | 複雑なパターン | 中速 |
SVC | 小規模データセット | 低速 |
MultinomialNB | テキスト分類 | 非常に高速 |
分類器の例
yaml
# Logistic Regression (recommended starting point)
classifier:
type: LogisticRegression
params:
C: 1.0
max_iter: 1000
# Random Forest
classifier:
type: RandomForestClassifier
params:
n_estimators: 100
max_depth: 10
# Support Vector Classifier
classifier:
type: SVC
params:
kernel: rbf
probability: true
# Naive Bayes
classifier:
type: MultinomialNB
params:
alpha: 1.0ベクトライザー
| ベクトライザー | 説明 |
|---|---|
TfidfVectorizer | TF-IDF重み付き特徴量(推奨) |
CountVectorizer | 単純な単語カウント |
HashingVectorizer | 大規模語彙に対してメモリ効率が良い |
yaml
# 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: 10000LLM統合
能動学習は、インスタンス選択を強化するためにオプションでLLMを使用できます:
yaml
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マルチスキーマサポート
能動学習は複数のアノテーションスキーマを循環できます:
yaml
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:
sentiment:
min_instances_for_training: 30
update_frequency: 50
topic:
min_instances_for_training: 50
update_frequency: 100モデルの永続化
サーバー再起動後も訓練済みモデルを保存して再読み込みする:
yaml
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進捗の監視
管理者ダッシュボードで能動学習のメトリクスを追跡できます:
- 現在のモデル精度
- 学習サイクル数
- 不確実性の分布
- 残りのインスタンス
- 再学習履歴
管理者APIキーで/adminからアクセスできます。
ベストプラクティス
1. ランダムサンプリングから始める
能動学習を有効にする前に初期アノテーションを取得する:
yaml
active_learning:
enabled: true
min_instances_for_training: 50 # Wait for 50 annotations2. 適切な分類器を選択する
- LogisticRegression:高速、ほとんどのタスクに適したデフォルト
- RandomForest:複雑なパターンに適しているが低速
- MultinomialNB:非常に高速、単純なテキスト分類に適している
3. クラス分布を監視する
能動学習はクラスの不均衡を引き起こす可能性があります。管理者ダッシュボードで監視し、層化サンプリングを検討してください。
4. 適切な再学習頻度を設定する
頻繁すぎる再学習はリソースを浪費します:
yaml
update_frequency: 100 # Retrain every 100 annotations5. モデルの永続化を有効にする
再起動時にゼロから再学習することを避けるためにモデルを保存する:
yaml
model_persistence:
enabled: true
save_dir: "models/"例:完全な設定
yaml
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:
type: LogisticRegression
params:
C: 1.0
max_iter: 1000
vectorizer:
type: TfidfVectorizer
params:
max_features: 3000
ngram_range: [1, 2]
model_persistence:
enabled: true
save_dir: "models/"
max_saved_models: 3
output_annotation_dir: "output/"
output_annotation_format: "json"
allow_all_users: trueAIサポートとの組み合わせ
能動学習とLLMアシスタンスの両方を使用する:
yaml
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この組み合わせにより、不確実なインスタンスを優先しながら、AIヒントでアノテーターを支援します。
トラブルシューティング
学習の失敗
- 十分なアノテーションがあることを確認する(
min_instances_for_training) - クラス分布を確認する - すべてのクラスの例が必要
- データ形式がスキーマと一致していることを確認する
パフォーマンスが遅い
max_instances_to_reorderを減らすupdate_frequencyを増やす- 大規模語彙には
HashingVectorizerを使用する
モデルが更新されない
update_frequencyの設定を確認する- アノテーションが保存されていることを確認する
- 管理者ダッシュボードでエラーを確認する
関連情報
- AIサポート - LLM支援アノテーション
- タスク割り当て - 割り当て戦略
- 管理者ダッシュボード - 能動学習メトリクスの監視
実装の詳細については、ソースドキュメントを参照してください。