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

<center> </center>

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)