Named Entity Recognition (NER)
固有表現認識(NER)は、テキスト内の人名、組織名、地名、日付、金額を検出し、それぞれにエンティティの種類を割り当てます。
固有表現認識(NER)は、実世界の対象を指すテキスト範囲を見つけ、人物、組織、場所、日付、金額などの種類を各範囲に付与する自然言語処理(NLP)タスクです。「Marie Curie taught at the University of Paris from 1906」という文では、NERモデルは「Marie Curie」を人物、「University of Paris」を組織、「1906」を日付として識別します。これにより、メール、レポート、契約書、文字起こしを、検索エンジン、ナレッジグラフ、分析ツール、プライバシーツールが利用できる構造化レコードに変換できます。1990年代のMessage Understanding Conferencesによって、NERは標準的な評価タスクとなり、CoNLL-2003共有タスクでは、今もベンチマークで使われている4種類、人物、場所、組織、その他が定められました。OntoNotes 5.0などのより大規模な体系では、日付、数量、製品、イベントなどを含む18種類が定義されています。
NERの仕組み#
NERは通常、系列ラベリングとして扱われます。トークナイザーがテキストをトークンに分割し、モデルはBIOスキームに従って各トークンにタグを割り当てます。B-はエンティティの開始、I-はエンティティ内のトークン、Oはどのエンティティにも属さないトークンを示すため、「University of Paris」のような複数語の名前もまとまりとして扱えます。このコードは、モデルが予測したタグをエンティティ範囲に変換します。
# Token-level BIO tags, as predicted by an NER model for one sentence
tokens = ["Marie", "Curie", "taught", "at", "the", "University", "of", "Paris", "from", "1906", "."]
tags = ["B-PER", "I-PER", "O", "O", "O", "B-ORG", "I-ORG", "I-ORG", "O", "B-DATE", "O"]
# Merge each B- tag with the I- tags that follow it into one entity span
entities = []
for token, tag in zip(tokens, tags):
if tag.startswith("B-"):
entities.append([token, tag[2:]])
elif tag.startswith("I-") and entities and entities[-1][1] == tag[2:]:
entities[-1][0] += f" {token}"
print(entities)構造化された出力であり、下流システムが保存してクエリする[['Marie Curie', 'PER'], ['University of Paris', 'ORG'], ['1906', 'DATE']]が出力されます。
タグを予測するモデルは、過去30年間で変化してきました。初期のシステムでは、手書きルールや既知の名前のリストであるガゼッティアが使われていました。隠れマルコフモデルや条件付き確率場などの統計的タグ付け器は、大文字表記や単語の接尾辞など、手作業で設計された特徴量を使ってアノテーション済みテキストから学習しました。2016年には、CRF出力層を備えた双方向LSTMネットワークが特徴量を自ら学習するようになり、その後、ファインチューニングされたTransformerが登場しました。BERTはCoNLL-2003テストセットでF1スコア92.8を達成しました。自己注意機構により、これらのモデルは文全体を文脈として利用できます。そのため、「Apple released a new phone」では「Apple」が組織としてタグ付けされ、「I ate an apple」ではタグ付けされません。システムはエンティティ単位の適合率、再現率、F1スコアで評価され、予測範囲と種類の両方が参照データと完全に一致した場合にのみ正解となります。
新しいモデルでは、固定されたラベルセットを使いません。GLiNERは、コンパクトな双方向Transformerで、エンティティの種類名を入力として受け取り、学習時に見ていない種類についても一致する範囲を見つけます。また、大規模言語モデルは、スキーマをプロンプトで指定し、構造化出力を求めることでエンティティを抽出します。
NERと関連タスクの比較#
- エンティティリンキング:認識した各言及を、Wikidataなどのナレッジベース内の特定の項目に結び付けます。そのため、「Paris」が都市を指すのか、Paris Hiltonを指すのかを特定できます。
- 関係抽出:どの人物がどの組織に所属しているかなど、エンティティ間のつながりを見つけます。多くの場合、NERの出力を基に処理します。
- 感情分析:テキストが表す意見を測定します。NERはレビューが何について述べているかを特定し、感情分析は書き手がそれについてどう感じているかを測定します。
- 物体検出:NERにおける画像の対応タスクで、画像内の領域を特定し、それぞれにクラスラベルを付与します。
GLiNERのオープンラベルの考え方は、ビジョン分野にも直接対応するものがあります。YOLOE-26は、Ultralytics YOLO26のオープンボキャブラリー版です。推論時にクラス名をテキストプロンプトとして受け取り、学習カテゴリに含まれないクラスも含め、該当するクラスの物体を検出・セグメンテーションします。
実際のアプリケーション#
文書処理では、固有表現認識(NER)と光学文字認識(OCR)を組み合わせます。請求書、契約書、フォームをスキャンし、OCRでテキストを読み取り、NERでベンダー、日付、合計金額などのフィールドを抽出して、会計・コンプライアンスシステムに渡します。本番パイプラインでは、不確かな予測を人に確認してもらい、修正結果から学習します。
- 個人識別情報(PII)のマスキング:MicrosoftのオープンソースPresidioなどのプライバシーツールは、NERとパターンルールを組み合わせ、テキストの共有や学習への利用に先立って、氏名、住所、口座番号を検出してマスキングします。
- 臨床テキストマイニング:臨床NERは、医師の記録から薬剤、投与量、症状、診断を抽出するため、病院や研究者が大量の記録を検索・分析できます。
- 検索とレコメンデーション:ニュースサイトやコンテンツプラットフォームは、記事に登場する人物、企業、場所のタグを付けます。これにより、エンティティ検索や関連記事の推薦が可能になります。










