您的位置:首页 > 大数据 > 人工智能

工具篇Flair之使用预训练模型教程

2019-01-17 15:36 946 查看
版权声明:转载请注明出处,谢谢~~ https://blog.csdn.net/m0_37306360/article/details/86525530

更多实时更新的个人学习笔记分享,请关注:
知乎:https://www.zhihu.com/people/yuquanle/columns
微信订阅号:AI小白入门
ID: StudyForAI

Flair工具使用教程

使用预训练模型进行标记

  • 让我们使用预先训练的模型进行命名实体识别(NER)。 该模型通过英语CoNLL-03任务进行训练,可识别4种不同的实体类型。

  • 使用tagger的predict()方法。 这会将预测标签添加到句子中的标记中。

from flair.models import SequenceTagger

tagger = SequenceTagger.load('ner')
sentence = Sentence('George Washington went to Washington .')

# predict NER tags
tagger.predict(sentence)

# print sentence with predicted tags
print(sentence.to_tagged_string())

George <B-PER> Washington <E-PER> went to Washington <S-LOC> .
  • 许多序列标记方法注释由多个单词组成,例如我们的例句中的“George Washington”。 您可以直接获得这样的跨度标记句子,如下所示:
for entity in sentence.get_spans('ner'):
print(entity)

PER-span [1,2]: "George Washington"
LOC-span [5]: "Washington"

这表明“乔治华盛顿”是一个人(PER),“华盛顿”是一个位置(LOC)。

目前提供以下预训练模型:

  • 您可以通过SequenceTagger类的load()方法来选择加载的预训练模型。

语义框架检测

  • 对于英语,现在还提供一个预训练模型,用于检测文本中的语义框架,使用Propbank 3.0框架进行训练。

  • 这为框架提供了一种词义消歧方法

例子:

# load model
tagger = SequenceTagger.load('frame')

# make German sentence
sentence_1 = Sentence('George returned to Berlin to return his hat .')
sentence_2 = Sentence('He had a look at different hats .')

# predict NER tags
tagger.predict(sentence_1)
tagger.predict(sentence_2)

# print sentence with predicted tags
print(sentence_1.to_tagged_string())
print(sentence_2.to_tagged_string())

George returned <return.01> to Berlin to return <return.02> his hat .
He had <have.LV> a look <look.01> at different hats .

正如我们所看到的,框架检测器在句子1中区分单词“return”的两个不同含义。 'return.01’表示返回某个位置,而’return.02’表示返回某个位置。

类似地,在句子2中,框架检测器找到一个轻音动词结构,其中’have’是轻动词。

标记句子列表

  • 通常,您可能希望标记整个文本语料库。 在这种情况下,您需要将语料库拆分为句子并将Sentence对象列表传递给.predict()方法。

  • 例如,您可以使用segtok的句子拆分器来拆分文本:

  • 使用.predict()方法的mini_batch_size参数,可以设置传递给标记器的批次的大小。

# your text of many sentences
text = "This is a sentence. This is another sentence. I love Berlin."

# use a library to split into sentences
from segtok.segmenter import split_single
sentences = [Sentence(sent, use_tokenizer=True) for sent in split_single(text)]

# predict tags for list of sentences
tagger: SequenceTagger = SequenceTagger.load('ner')
tagger.predict(sentences)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐