固有表現抽出
固有表現抽出(NER)とは何か、よく使われるラベルセット、そして色付きスパンラベルとツールチップを使って Potato で NER アノテーションタスクを構築する方法を解説します。
固有表現抽出(NER)は、テキスト中の名前を持つもの、すなわち人物・組織・場所・日付などを見つけて分類するタスクです。エンティティ型のラベルセットを持つスパンアノテーションタスクの一種です。 NER は検索、知識グラフ、秘匿化、情報抽出の基盤となる要素です。
背景については固有表現抽出を参照してください。
ラベルセットの選び方
標準的なスキームから始め、対象ドメインに合わせて削っていきます。
- CoNLL-2003:
PER、ORG、LOC、MISC。最小構成の手堅い既定値です。 - OntoNotes:日付・金額・パーセンテージを含む 18 種類。より細かいニーズ向け。
- ドメイン固有:生物医学(遺伝子、疾患)、法律(法令、当事者)、金融など。
種類が少なく、定義が明確なほど一致度は高くなります。下流の実際の用途が必要とするときだけ種類を追加してください。
Potato でのタスク構築
yaml
annotation_schemes:
- annotation_type: span
name: entities
description: "Highlight each named entity and select its type."
labels: [PERSON, ORGANIZATION, LOCATION, DATE, MISC]
label_colors:
PERSON: "#3b82f6"
ORGANIZATION: "#10b981"
LOCATION: "#f59e0b"
DATE: "#8b5cf6"
MISC: "#6b7280"
tooltips:
PERSON: "Names of people, e.g. 'Ada Lovelace'."
ORGANIZATION: "Companies, agencies, teams, e.g. 'United Nations'."
LOCATION: "Cities, countries, landmarks, e.g. 'Paris'."
DATE: "Dates and time expressions, e.g. 'next Monday'."
MISC: "Named entities that fit none of the above."
allow_overlapping: false
sequential_key_binding: true固有表現抽出のショーケースでは、この設定をサンプルデータで実行しています。
不一致を防ぐ境界ルール
NER の不一致の多くは、エンティティが何かではなく、どこで始まりどこで終わるかに関するものです。次の点を決めて文書化しましょう。
- 敬称・肩書きは含めるか?(「Dr. Jane Smith」か「Dr. Jane Smith」か。)
- 「the United Nations」の「the」を含めるか?
- 「Bank of England」のような入れ子のエンティティはどう付けるか?必要なら
allow_overlapping: trueを設定します。
ラベルからモデルへ
CoNLL や spaCy 形式にエクスポートします。これらは BIO/IOB タグでエンティティを表現します。機械学習向けのアノテーションのエクスポートを参照してください。
さらに読む
- スパンアノテーション
- エンティティリンキング、エンティティを知識ベースに結び付ける
- 関係・イベント抽出