スパンアノテーション
スパンアノテーションの完全ガイド。テキスト領域のハイライト、重なり合うスパンと入れ子のスパン、ラベルの色、BIO/IOB タグ付け、そして Potato でのスパンタスクの作り方を解説します。
スパンアノテーションとは、項目全体にラベルを付けるのではなく、項目の内部にある領域を印付けることです。アノテーターはひと続きのテキスト(または音声の一区間)をハイライトし、そこにラベルを割り当てます。 これは固有表現抽出、エラーの印付け、抽出型質問応答、音声イベント検出の土台であり、いずれもラベルセットが異なるだけのスパンタスクです。
スパンとは、ラベルの付いた部分列のことです。開始位置、終了位置、そしてカテゴリからなります。機械学習では通常、これは系列ラベリングとして定式化され、各トークンにタグが付与されます。
基本的なスパンタスク
ラベルを定義し、アノテーターにハイライトさせるだけです。色とツールチップによって、インターフェースは素早く、説明不要なものになります。
annotation_schemes:
- annotation_type: span
name: entities
description: "Highlight each named entity and choose its type."
labels: [PERSON, ORGANIZATION, LOCATION, DATE, MISC]
label_colors:
PERSON: "#3b82f6"
ORGANIZATION: "#10b981"
LOCATION: "#f59e0b"
DATE: "#8b5cf6"
MISC: "#6b7280"
sequential_key_binding: true
allow_overlapping: false固有表現抽出のデザインはまさにこのタスクで、そのまま実行できます。
重なり合うスパンと入れ子のスパン
デフォルトでは、1 つの文字はたかだか 1 つのスパンにしか属しません。タスクによっては、それ以上が必要です。
- 重なり合うスパン:2 つのアノテーションが同じテキストの一部を覆う場合。たとえば、感情のスパンが固有表現のスパンの上に重なるケースです。
- 入れ子のスパン:あるスパンが別のスパンの内側に収まる場合。たとえば "[University of [Michigan]]" では、地名が組織名の中に入れ子になっています。
ガイドラインが求めるときは allow_overlapping: true を設定してください。これは早めに決めましょう。アノテーターが境界をどう捉えるかに影響するからです。
BIO/IOB タグ付け、エクスポートはどう見えるか
スパンアノテーションは学習用にエクスポートする際、通常 BIO スキーム(IOB とも呼ばれます)のトークンタグとして出力されます。B- はエンティティの最初のトークンを、I- はその内部のトークンを、O はどのエンティティにも属さないトークンを表します。
Barack B-PERSON
Obama I-PERSON
visited O
Paris B-LOCATION
Potato はスパンを CoNLL や spaCy の形式にエクスポートでき、これらはこのタグ付けをそのまま使います。機械学習向けのアノテーションのエクスポートを参照してください。
境界を正しく決める
スパン作業で最も難しいのは、スパンがどこで始まりどこで終わるかについて合意することです。役に立ついくつかのルールを挙げます。
- 周囲の句読点、敬称("Dr.")、末尾の所有格を含めるかどうかを決め、それを書き留めておきましょう。
- 一致度は文書レベルだけでなくスパンレベルでも測りましょう。そうすれば境界の不一致が表に出てきます。アノテーター間一致度を参照してください。
- ツールチップを使って、境界のルールをアノテーターの目の前に常に置いておきましょう。
NER の枠を超えたスパンタスク
同じ仕組みが、多くのタスクを支えています。
- エラースパン:翻訳やモデル出力の誤りを、MQM 方式で印付けします。ハルシネーションの検出を参照してください。
- 抽出型 QA:ある一節の中で、質問に対する答えをハイライトします。
- 音声イベント検出:波形上で、ある音がいつ生じるかを印付けします。音声アノテーションを参照してください。
- 関係と共参照:複数のスパンを結びつけます。関係・イベント抽出と共参照解析を参照してください。