繁体   English   中英

spacy 如何将模式添加到现有的实体标尺?

[英]spacy how to add patterns to existing Entity ruler?

我的 spacy 版本是 2.3.7。 我有一个现有的训练有素的自定义 NER 模型,带有 NER 和 Entity Ruler 管道。 我想更新和重新训练这个现有的管道。

创建实体标尺管道的代码如下 -

ruler = EntityRuler(nlp)
for i in patt_dict:
  ruler.add_patterns(i)
nlp.add_pipe(ruler, name = "entity_ruler")

patt_dict是我制作的原始模式字典。

现在,在完成训练之后,现在我有更多的输入数据,并且想用新的输入数据更多地训练模型。

当我稍后加载 spacy 模型并想用更多输入数据重新训练它时,如何修改上述代码以向实体标尺添加更多模式字典?

通常最好从头开始重新训练。 如果您只对新数据进行训练,您可能会遇到“灾难性遗忘”,即模型会忘记新数据中没有的任何内容。

这篇 spaCy 博客文章对此进行了详细介绍。 从 v3 开始,该方法在 spaCy 中可用,但仍处于试验阶段,需要一些工作。 无论如何,它仍然是一种解决方法,最好的办法是使用所有数据从头开始训练。

我还建议 polm23 建议在这种情况下全面重新训练。

原因如下:我们要求模型根据将输入数据与标签/类/任何内容一遍又一遍地匹配而得出的权重来产生推论。 这些权重通过反向传播来切换,以减少相对于标签/类/其他的误差梯度。 当给定任何数据的权重产生尽可能接近 0 的误差时,最终损失达到平衡,或者您只需通过超参数(时期)调用它。

但是,通过仅使用新数据,您只会针对该特定数据进行优化。 该模型的泛化能力很差,但实际上只是因为它正在学习您要求它学习的内容,而不是其他任何东西。 当您完全添加再培训通常不是世界末日时,它只是一种最佳实践。

(这是我对灾难性遗忘问题的不完全理解,如果其他人有更深入的知识,很高兴了解更多)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM