🚀 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问题跟踪器 中反馈。