Skip to content

能動学習

不確実性サンプリングを使用して価値の高い例のアノテーションを優先する。

能動学習

能動学習は、最も情報量の多い例を優先することで、よりスマートにアノテーションを行うことを支援します。ランダムにアノテーションする代わりに、モデルが最も不確実なインスタンスに焦点を当てます。

仕組み

Potatoの能動学習は、機械学習の予測に基づいてアノテーションインスタンスを自動的に並べ替えます:

  1. 初期収集 - 最小限のアノテーションを収集する
  2. 学習 - 既存のアノテーションで分類器を訓練する
  3. 予測 - 未アノテーションインスタンスの不確実性スコアを取得する
  4. 並べ替え - 不確実性が最も高いインスタンスを優先する
  5. アノテーション - アノテーターが優先されたインスタンスにラベルを付ける
  6. 再学習 - 新しいアノテーションで定期的にモデルを更新する

設定

基本設定

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

ベクトライザー

ベクトライザー説明
TfidfVectorizerTF-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: 10000

LLM統合

能動学習は、インスタンス選択を強化するためにオプションで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 annotations

2. 適切な分類器を選択する

  • LogisticRegression:高速、ほとんどのタスクに適したデフォルト
  • RandomForest:複雑なパターンに適しているが低速
  • MultinomialNB:非常に高速、単純なテキスト分類に適している

3. クラス分布を監視する

能動学習はクラスの不均衡を引き起こす可能性があります。管理者ダッシュボードで監視し、層化サンプリングを検討してください。

4. 適切な再学習頻度を設定する

頻繁すぎる再学習はリソースを浪費します:

yaml
update_frequency: 100  # Retrain every 100 annotations

5. モデルの永続化を有効にする

再起動時にゼロから再学習することを避けるためにモデルを保存する:

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: true

AIサポートとの組み合わせ

能動学習と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の設定を確認する
  • アノテーションが保存されていることを確認する
  • 管理者ダッシュボードでエラーを確認する

関連情報

実装の詳細については、ソースドキュメントを参照してください。