🚀 Flairによる英語の固有表現認識 (Ontonotes大規模モデル)
これは、Flair とともに提供される英語用の18クラスの大規模固有表現認識(NER)モデルです。
F1スコア: 90.93 (Ontonotes)
以下の18種類のタグを予測します:
タグ |
意味 |
CARDINAL |
基数値 |
DATE |
日付値 |
EVENT |
イベント名 |
FAC |
建物名 |
GPE |
地理政治的な主体 |
LANGUAGE |
言語名 |
LAW |
法律名 |
LOC |
場所名 |
MONEY |
金額名 |
NORP |
所属関係 |
ORDINAL |
序数値 |
ORG |
組織名 |
PERCENT |
パーセント値 |
PERSON |
人名 |
PRODUCT |
製品名 |
QUANTITY |
数量値 |
TIME |
時間値 |
WORK_OF_ART |
芸術作品名 |
このモデルは、ドキュメントレベルのXLM - R埋め込みと FLERT に基づいています。
🚀 クイックスタート
✨ 主な機能
- 英語の18クラスの固有表現認識を行うことができます。
- ドキュメントレベルのXLM - R埋め込みとFLERTを利用しています。
📦 インストール
このモデルを使用するには、Flair が必要です。以下のコマンドでインストールできます。
pip install flair
💻 使用例
基本的な使用法
from flair.data import Sentence
from flair.models import SequenceTagger
tagger = SequenceTagger.load("flair/ner-english-ontonotes-large")
sentence = Sentence("On September 1st George won 1 dollar while watching Game of Thrones.")
tagger.predict(sentence)
print(sentence)
print('The following NER tags are found:')
for entity in sentence.get_spans('ner'):
print(entity)
このコードは以下の出力を生成します。
Span [2,3]: "September 1st" [− Labels: DATE (1.0)]
Span [4]: "George" [− Labels: PERSON (1.0)]
Span [6,7]: "1 dollar" [− Labels: MONEY (1.0)]
Span [10,11,12]: "Game of Thrones" [− Labels: WORK_OF_ART (1.0)]
つまり、文 "On September 1st George Washington won 1 dollar while watching Game of Thrones" から、"September 1st"(日付とラベル付け)、"George"(人名とラベル付け)、"1 dollar"(金額とラベル付け)、"Game of Thrones"(芸術作品名とラベル付け)のエンティティが検出されます。
🔧 技術詳細
モデルのトレーニング
このモデルをトレーニングするために使用されたFlairのスクリプトは以下の通りです。
from flair.data import Corpus
from flair.datasets import ColumnCorpus
from flair.embeddings import WordEmbeddings, StackedEmbeddings, FlairEmbeddings
corpus: Corpus = ColumnCorpus(
"resources/tasks/onto-ner",
column_format={0: "text", 1: "pos", 2: "upos", 3: "ner"},
tag_to_bioes="ner",
)
tag_type = 'ner'
tag_dictionary = corpus.make_tag_dictionary(tag_type=tag_type)
from flair.embeddings import TransformerWordEmbeddings
embeddings = TransformerWordEmbeddings(
model='xlm-roberta-large',
layers="-1",
subtoken_pooling="first",
fine_tune=True,
use_context=True,
)
from flair.models import SequenceTagger
tagger = SequenceTagger(
hidden_size=256,
embeddings=embeddings,
tag_dictionary=tag_dictionary,
tag_type='ner',
use_crf=False,
use_rnn=False,
reproject_embeddings=False,
)
from flair.trainers import ModelTrainer
trainer = ModelTrainer(tagger, corpus, optimizer=torch.optim.AdamW)
from torch.optim.lr_scheduler import OneCycleLR
trainer.train('resources/taggers/ner-english-ontonotes-large',
learning_rate=5.0e-6,
mini_batch_size=4,
mini_batch_chunk_size=1,
max_epochs=20,
scheduler=OneCycleLR,
embeddings_storage_mode='none',
weight_decay=0.,
)
📄 ライセンス
このモデルを使用する際は、以下の論文を引用してください。
@misc{schweter2020flert,
title={FLERT: Document-Level Features for Named Entity Recognition},
author={Stefan Schweter and Alan Akbik},
year={2020},
eprint={2011.06993},
archivePrefix={arXiv},
primaryClass={cs.CL}
}