标签:
- flair
- 命名实体识别
- 序列标注模型
语言: 英语
数据集:
- ontonotes
示例输入:
- 文本: "On September 1st George Washington won 1 dollar."
Flair中的英语命名实体识别(Ontonotes快速模型)
这是Flair自带的18类英语命名实体识别模型的快速版本。
F1分数: 89.3 (基于Ontonotes数据集)
可预测18种标签:
标签 |
含义 |
CARDINAL |
基数数值 |
DATE |
日期 |
EVENT |
事件名称 |
FAC |
建筑名称 |
GPE |
地理政治实体 |
LANGUAGE |
语言名称 |
LAW |
法律名称 |
LOC |
地点名称 |
MONEY |
货币名称 |
NORP |
民族/宗教/政治团体 |
ORDINAL |
序数词 |
ORG |
组织机构名称 |
PERCENT |
百分比 |
PERSON |
人名 |
PRODUCT |
产品名称 |
QUANTITY |
数量值 |
TIME |
时间 |
WORK_OF_ART |
艺术品名称 |
基于Flair词嵌入和LSTM-CRF架构。
演示:如何在Flair中使用
需要安装: Flair (pip install flair
)
from flair.data import Sentence
from flair.models import SequenceTagger
tagger = SequenceTagger.load("flair/ner-english-ontonotes-fast")
sentence = Sentence("On September 1st George Washington won 1 dollar.")
tagger.predict(sentence)
print(sentence)
print('发现以下命名实体标签:')
for entity in sentence.get_spans('ner'):
print(entity)
输出结果如下:
Span [2,3]: "September 1st" [− 标签: DATE (0.9655)]
Span [4,5]: "George Washington" [− 标签: PERSON (0.8243)]
Span [7,8]: "1 dollar" [− 标签: MONEY (0.8022)]
因此,在句子"On September 1st George Washington won 1 dollar"中识别出了"September 1st"(标记为日期)、"George Washington"(标记为人物)和"1 dollar"(标记为货币)三个实体。
训练:训练此模型的脚本
使用以下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)
embedding_types = [
WordEmbeddings('en-crawl'),
FlairEmbeddings('news-forward-fast'),
FlairEmbeddings('news-backward-fast'),
]
embeddings = StackedEmbeddings(embeddings=embedding_types)
from flair.models import SequenceTagger
tagger = SequenceTagger(hidden_size=256,
embeddings=embeddings,
tag_dictionary=tag_dictionary,
tag_type=tag_type)
from flair.trainers import ModelTrainer
trainer = ModelTrainer(tagger, corpus)
trainer.train('resources/taggers/ner-english-ontonotes-fast',
train_with_dev=True,
max_epochs=150)