タスク割り当て
Potato がアノテーション項目をアノテーターにどう配分するかを制御します。すべての割り当て戦略を網羅し、複数ラウンドの繰り返し研究向けのカスタム Batch 戦略や、Prolific や QC でブロックされたワーカーから放棄された割り当てを再回収する方法も扱います。
タスク割り当ては、各アノテーターがどの項目を見るか、いくつ完了するか、各項目が何件のアノテーションを受け取るか、そして項目が現れる順序を制御します。 このページでは、Potato の割り当て戦略、複数ラウンドの繰り返し研究設計向けのカスタム Batch 戦略、そしてクラウドワーカーによって放棄された割り当てを再回収する方法を解説します。
割り当て戦略
assignment_strategy を次のいずれかに設定します。
| 戦略 | 動作 |
|---|---|
random | 項目をランダムに割り当てます(デフォルト)。 |
fixed_order | データセットの順序で項目を割り当てます。 |
least_annotated | これまでのアノテーション件数が最も少ない項目を優先します。 |
max_diversity | 既存のアノテーション間で最も意見の不一致が大きい項目を優先します。 |
diversity_clustering | 項目を埋め込んでクラスタリングし、クラスタ間でラウンドロビン方式に配信します。 |
batch | 割り当てを明示的なアノテーター/項目のコホートに限定します(下記参照)。 |
priority | 最も優先度の高い項目を先に配信します。トリアージキュー を参照してください。 |
active_learning | モデルを使って不確実な項目を優先します。 |
assignment_strategy: random
max_annotations_per_user: 10 # -1 for unlimited
max_annotations_per_item: 3 # -1 for unlimitedカスタム Batch 割り当て
batch 戦略は、あらかじめ定義された項目のバッチを特定のアノテーターに割り当てます。これは複数ラウンドの繰り返し研究設計のために作られており、第1ラウンドのバッチを見た同じアノテーターが、対応する第2ラウンドのバッチを受け取らなければならない場合に使います。
assignment_strategy: batch
num_annotators_per_item: 4
batch_assignment:
groups:
- name: round1_batch_a
annotators: ["u1", "u2", "u3", "u4"]
instances: ["r2_item_001", "r2_item_002"]長いバッチの場合は、インスタンスのリストを別のデータファイル(json、jsonl、csv、tsv、または parquet)に移します。ID は item_properties.id_key で読み込まれます。
batch_assignment:
groups:
- name: round1_batch_a
annotators: ["u1", "u2", "u3", "u4"]
instances_file: batches/round1_batch_a.csv項目側で許可するアノテーターを直接指定することもできます。これは第2ラウンドのデータが第1ラウンドのアノテーションから生成される場合に便利です。
assignment_strategy: batch
batch_assignment:
annotator_key: round1_annotators設定されたコホートの外にいるユーザーは、この戦略では項目を受け取りません。
放棄された割り当ての再回収
クラウドソーシングのバッチでは、ワーカーが項目を割り当てられた後に返却したり、タイムアウトしたり、品質チェックに失敗したりすることがあります。instance_reclaim を有効にすると、Potato は割り当て済みで未アノテーションの項目をプールに戻し、再び割り当てられるようにします。
instance_reclaim:
enabled: true
timeout_hours: 24
preserve_completed_annotations: true再回収は次の場合に自動的に実行されます。割り当て実行時に古くなった割り当てに対して、提出が RETURNED、TIMED-OUT、または REJECTED になった Prolific ワーカーに対して、そして注意チェックの失敗によってブロックされたユーザー(未アノテーションの項目を即座に解放します)に対して。
再回収されたワーカーの完了済みアノテーションを保持するかどうかは、理由ごとに決められます。これにより、タイムアウトした Prolific ワーカーの部分的な作業は信頼しつつ、品質管理によってブロックされたワーカーのすべてを破棄するといった運用が可能になります。
instance_reclaim:
enabled: true
timeout_hours: 24
preserve_completed_annotations: true # default for reasons not overridden below
prolific:
status_policies:
TIMED-OUT:
preserve_completed_annotations: true
RETURNED:
preserve_completed_annotations: true
REJECTED:
preserve_completed_annotations: false
quality_control:
preserve_completed_annotations: falsepreserve_completed_annotations が false の場合、Potato はそのユーザーが割り当てられた項目に対するアノテーションを消去し、アノテーターとしてのクレジットを取り消し、その項目をプールに戻します。ブロックを引き起こした失敗した注意チェックの回答は決して保持されません。
関連項目
- 不均一なカバレッジ — 項目ごとのアノテーター上限とオーバーラップサンプリング
- クラウドソーシング — MTurk と Prolific の連携
- シグナルベースのトリアージキュー —
priority戦略
実装の詳細については、ソースドキュメント を参照してください。