Skip to content
Guides2 min read

能動学習:よりスマートにアノテーションする

不確実性サンプリングを使用してアノテーションの優先順位を決め、ラベリング作業を最大50%削減する方法。

Potato Team·

能動学習:よりスマートにアノテーションする

能動学習は、次にアノテーションするアイテムをインテリジェントに選択し、最も重要な部分に人間の労力を集中させます。このガイドでは、モデルの品質を維持しながらアノテーション作業を最大50%削減する方法を紹介します。

能動学習とは?

データをランダムにサンプリングしてアノテーションする代わりに、能動学習は以下を行います:

  1. 現在のアノテーションでモデルを学習
  2. モデルが不確実なアイテムを特定
  3. そのアイテムを人間のアノテーション対象として優先
  4. これを繰り返し、継続的に効率を改善

なぜ能動学習を使うのか?

  • アノテーションコストの削減:同じモデル品質でラベル付けするアイテムを減らせる
  • 高速なイテレーション:より早く使えるモデルを取得
  • 専門知識の集中:困難なケースに人間の注意を集中
  • カバレッジの向上:エッジケースの確実な網羅

基本的な能動学習セットアップ

yaml
annotation_task_name: "Active Learning Classification"
 
data_files:
  - "data/unlabeled_pool.json"
 
# Active learning configuration
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"
 
  # Sampling settings
  max_instances_to_reorder: 1000  # Number of instances to reorder by uncertainty
  random_sample_percent: 0.1  # 10% random sampling to maintain diversity
 
annotation_schemes:
  - annotation_type: radio
    name: category
    labels: [Positive, Negative, Neutral]

不確実性サンプリングの仕組み

Potatoの能動学習は、分類器が最も自信のないアイテムを優先するために不確実性サンプリングを使用します。分類器はラベルのないインスタンスのラベルを予測し、信頼度スコアが最も低いものがアノテーション対象として最初に提示されます。

classifier_nameフィールドは、完全なモジュールパスを使用してscikit-learn互換の分類器を指定します:

yaml
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"

その他の分類器オプション:

  • sklearn.ensemble.RandomForestClassifier
  • sklearn.svm.SVCprobability=Trueを指定)
  • sklearn.naive_bayes.MultinomialNB

完全な設定

yaml
annotation_task_name: "Active Learning for Sentiment"
 
data_files:
  - "data/reviews.json"
 
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"
 
  # Sampling settings
  max_instances_to_reorder: 2000  # Reorder top N by uncertainty
  random_sample_percent: 0.1  # 10% random to maintain diversity
 
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "Classify the sentiment"
    labels:
      - name: Positive
        key_value: "1"
      - name: Negative
        key_value: "2"
      - name: Neutral
        key_value: "3"
    required: true
 
annotation_guidelines:
  text: |
    ## Sentiment Classification
 
    Items are prioritized by model uncertainty.
    You may see more difficult or ambiguous cases.
 
    Focus on accuracy over speed.

進捗のモニタリング

Potatoの組み込みログを通じてアノテーションの進捗を追跡できます。システムはどのインスタンスが選択され、その不確実性スコアがどの程度だったかを記録し、能動学習プロセスをモニタリングできます。

ベストプラクティス

コールドスタート

random_sample_percentを高めに設定して、多様なランダムサンプリングから始めます:

yaml
active_learning:
  enabled: true
  classifier_name: "sklearn.linear_model.LogisticRegression"
  random_sample_percent: 0.2  # 20% random for initial diversity

リオーダリング範囲の制御

max_instances_to_reorderを使用して、不確実性でランク付けするインスタンスの数を制御します。値が大きいほど良い選択が可能ですが、計算量が増加します:

yaml
active_learning:
  max_instances_to_reorder: 5000  # Rank top 5000 by uncertainty

多様性の維持

random_sample_percentパラメータにより、ランダムにサンプリングされたインスタンスが一定数含まれ、モデルが不確実なエッジケースのみを見ることを防ぎます:

yaml
active_learning:
  random_sample_percent: 0.1  # 10% random sampling

成功のためのヒント

  1. 多様なスタート:ランダムな初期サンプルでエッジケースをカバー
  2. 精度のモニタリング:経時的なモデル性能を追跡
  3. 過度な最適化を避ける:ランダムサンプリングでカバレッジを維持
  4. アノテーターの疲労に対処:困難なアイテムは疲れやすい
  5. モデルチェックポイントの保存:必要に応じてロールバック可能に

次のステップ


能動学習の完全なドキュメントは/docs/features/active-learningをご覧ください。