喂食 Spacy NER 模型负样本以改进训练

Feeding Spacy NER model negative examples to improve training

我已经为 spacy 的 ner 模型提供了一组 GoldParse 对象来训练。

我现在想做的是评估它在新句子上的结果,并将每个识别出的实体标记为 'good' 或 'bad',然后将这些信息合并到新的一批训练中。

这可能吗? ner模型如何从负样本中学习?

是的,可以从反例中学习 -- 它在 spaCy 中实现,因为它是我们商业注释工具 Prodigy 的一个关键特性:https://prodi.gy

要将 span 标记为 "not PERSON",您可以将其标记为 !PERSON。这应该是您需要做的全部。目前没有简单的方法来编码像 "not PERSON and not ORG" 这样的约束——你必须在 spacy/syntax/ner.pyx

内自定义成本函数

模型可以从像 "not PERSON" 这样的注释中学习,因为 spaCy 的 NER 和解析器都使用 transition-based 模仿学习算法。在每个词中,我们都试图预测要采取的行动,以改变当前状态。监督来自一个神谕,它告诉我们哪些行为会引入新的错误。如果我们知道某些文本跨度不是人,则 oracle 可以使用它来将某些操作标记为代价高昂。我们将有多个 zero-cost 动作,但这是正常的 --- 无论如何在正常训练中它经常发生。

您可以在此视频中详细了解实体识别器的工作原理:https://www.youtube.com/watch?v=sqDHBH9IjRU