更改间距内的波束宽度(_W) [英] change beam_width in spacy NER

查看:10
本文介绍了更改间距内的波束宽度(_W)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要将nlp.entity.cfg Beam_Width(默认情况下为%1)更改为%3。

我尝试了nlp.entity.cfg.update({BEAM_WIDTH:3}),但在进行此更改后,NLP看起来好像坏了。 (如果我执行一个nlp(Str),它会给我一个dict,而不是像通常的那样,我把Beam_Width:1放入一个space y.tokens.doc.Doc)

我想更改它,因为在我的情况下,NER的概率会更准确(这是我自己训练的模型)。 我用在githorb.spacy/Issues中找到的代码进行了测试

with nlp.disable_pipes('ner'):
    doc = nlp(txt)

(beams, somethingelse) = nlp.entity.beam_parse([ doc ], beam_width, beam_density)

entity_scores = defaultdict(float)
for beam in beams:
    for score, ents in nlp.entity.moves.get_beam_parses(beam):
        for start, end, label in ents:
            entity_scores[(doc[start:end].text, label, start, end)] += score

波束宽度: 要考虑的备用分析的数量。越多越慢,并不一定更好--您需要在您的 有问题。(默认情况下:1)

光束密度: 这将在每个步骤中截取解决方案。我们将乘以 按该值排名靠前的操作的分数,并将结果用作 临界点。这将阻止解析器探索如下选项 不太可能,节省了一点效率。准确性还可能 改进,因为我们在贪婪的目标上进行了训练。(默认:0)

我是NLP的新手,所以我不知道什么是带有全局目标的光束搜索,也不知道如何使用它,所以如果你能像我5岁一样解释我,那就太好了!

我希望能够使用displacy(style=‘ent’)来可视化BEAM_Width=3的实体。

感谢您的答复, 埃尔韦。

推荐答案

(如果我执行一个nlp(Str),它会给我一个dict,而不是像往常一样,如果我把Beam_Width:1放入,它会给我一个dict,而不是space y.tokens.doc.Doc)

我不确定为什么会这样。真的吗?您使用的是什么版本?

我刚刚尝试了以下操作:

>>> import spacy
>>> nlp = spacy.load('en_core_web_md')
>>> nlp.entity.cfg['beam_width'] = 3
>>> doc = nlp(u'Hurrican Florence is approaching North Carolina.')
>>> doc.ents
(Hurrican Florence, North Carolina)
>>> nlp.entity.cfg['beam_width'] = 300
>>> doc = nlp(u'Hurrican Florence is approaching North Carolina.')
>>> doc.ents
(Hurrican Florence is approaching, North Carolina.)

如您所见,设置非常宽的光束会导致较差的精度,因为默认模型没有经过培训使用那样的宽光束。

至于ELI5……嗯,它很复杂:对不起-我手头没有简单的解释,这就是为什么这些是未记录的内部结构的原因之一。

这篇关于更改间距内的波束宽度(_W)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆