🚀 Flair英文命名實體識別(Ontonotes大模型)
本項目是一個用於英文的18類命名實體識別(NER)大模型,它集成於 Flair 庫中。該模型在英文文本的實體識別任務中表現出色,能準確識別多種類型的實體。
模型指標
在Ontonotes數據集上,模型的F1分數達到了 90.93,展現了其優秀的性能。
可預測的標籤
模型能夠預測以下18種標籤:
標籤 |
含義 |
CARDINAL |
基數詞 |
DATE |
日期 |
EVENT |
事件名稱 |
FAC |
建築物名稱 |
GPE |
地理政治實體 |
LANGUAGE |
語言名稱 |
LAW |
法律名稱 |
LOC |
地點名稱 |
MONEY |
貨幣名稱 |
NORP |
關聯關係 |
ORDINAL |
序數詞 |
ORG |
組織名稱 |
PERCENT |
百分比 |
PERSON |
人名 |
PRODUCT |
產品名稱 |
QUANTITY |
數量 |
TIME |
時間 |
WORK_OF_ART |
藝術作品名稱 |
技術基礎
該模型基於文檔級的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
import torch
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}
}
🐞 問題反饋
如果遇到問題,可以在 Flair問題跟蹤器 中反饋。