首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用spaCy训练NER时损失排齐

用spaCy训练NER时损失排齐
EN

Stack Overflow用户
提问于 2019-02-14 11:16:46
回答 1查看 1.7K关注 0票数 5

我正在(从头开始)训练一组新的实体,并按照spaCy教程中所描述的那样做,然而,我的损失是停滞不前的,大量的时代并没有帮助。

我的数据:

9个不同实体,15000个培训数据(句子)。20年代以后的损失:

代码语言:javascript
复制
Loaded model 'en'
Losses {'ner': 25461.3508122763}
Losses {'ner': 17003.450728844182}
Losses {'ner': 15725.198527784352}
Losses {'ner': 15315.754479839785}
Losses {'ner': 14980.468680851985}
Losses {'ner': 14716.52629194191}
Losses {'ner': 14346.623731715972}
Losses {'ner': 14463.972966984807}
Losses {'ner': 14195.106732198006}
Losses {'ner': 14058.390174787504}
Losses {'ner': 13875.850727875884}
Losses {'ner': 13859.096326599261}
Losses {'ner': 13614.887464660655}
Losses {'ner': 13512.779816124807}
Losses {'ner': 13388.69595626908}
Losses {'ner': 13496.388241585315}
Losses {'ner': 13530.602194116611}
Losses {'ner': 13245.709490846923}
Losses {'ner': 13219.483523900466}
Losses {'ner': 13189.088232180386}

问题1:

如果一个句子中有几个实体,那么组织培训数据的最佳方法是什么?我应该把所有的实体合并到一个列表中还是最好用一个单一的实体来训练?

例如:

代码语言:javascript
复制
("Horses and dogs are too tall and they pretend to care about your feelings", {'entities': [(0, 6, 'ANIMAL'), (11, 15, 'ANIMAL')]})

或者说最好是分开:

代码语言:javascript
复制
("Horses and dogs are too tall and they pretend to care about your feelings", {'entities': [(0, 6, 'ANIMAL')]}),

("Horses and dogs are too tall and they pretend to care about your feelings", {'entities': [(11, 15, 'ANIMAL')]})

问题2:

我是否也应该包括空句子(没有实体)?

代码语言:javascript
复制
("The new electric cars is great!", {'entities': []})

显然,模型预测不太糟糕(f1~0.7),但是我想知道微调模型的最佳实践是什么(除了在这个训练有素的模型之上使用神童)。

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 18:15:03

spaCy和Prodigy期望不同形式的培训数据: spaCy需要一个“黄金”注释,其中每个实体都有标记。注释格式在spaCy文档中进行了描述。如果您只是在训练一个NER模型,您可以简单地从字典中省略依赖项和POS键。这样的培训是有意义的:在预测的时候,模型将需要为它看到的每一个单词生成实体标签。

相比之下,神童可以接受有标记的例子,这些例子只有一个带有提议实体标签的跨度,再加上一个人为的决定,判断这个跨度是否是实体标签的实例。这对于训练来说有点棘手,因为模型不知道句子中的其他单词是一个整体还是一个实体。

我的直觉是,如果将句子中的所有实体合并成一个训练示例(问题1),该模型会更好地工作。这给模型提供了更多关于句子的信息,并使其能够了解文本中不同实体之间的关系。(想一想,比如一个短语“她拜访了X和Y”)。如果X是一个地方,Y几乎肯定是一个地方。如果X是一个人,Y也很可能是)。不过,从经验上看,这将是相当容易和有趣的事情。

关于问题2,包括没有实体的句子,应该对模型很有帮助。

附带注意:当我训练NER模型时,性能通常在大约20世纪后保持平稳,而F1为0.7也不算太糟糕,所以你发现的是正确的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54689162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档