是否可以根据规则\模式使用“提示”来训练\调整spacy NER模型

时间:2019-04-15 10:51:12

标签: python nlp spacy

虚拟示例: 我希望NER能够检测位置,动物和运动团体 Matcher \ PhraseMatcher \ EntityRuler(与该用例更相关的是)可用于添加“简单”规则 喜欢: 地点:纽约芝加哥 动物:公牛,鸡肉 团体:芝加哥公牛队

NER层应该能够了解到芝加哥公牛队是一个团体,而不是位置和动物(就像单独使用火柴人会给人一样) 并且位置+动物的其他组合是运动组,而不是位置动物对(即使训练集中不存在特定组合)

TLDR:我不想按原样使用基于规则的提取实体,但作为另一层的提示,它将使用它们来改善实体提取

1 个答案:

答案 0 :(得分:1)

复制我对this issue的回复:

是的,使用匹配模式来改进统计模型很有道理,实际上这是我们在注释工具Prodigy中使用的使收集训练数据更容易的方法之一。规则失败的模棱两可的示例(例如“ bulls”)实际上非常有趣,因为这些都是您希望统计模型处理的示例。

在实际的实现方面,您仍然希望您的工作流具有两个步骤:

  1. 使用匹配项来提取候选示例,然后选择要使用的示例。
  2. 使用新示例训练/更新模型并进行评估。

您的模型不仅不会在运行时进行更新,因为它不是那么有用-您通常总是需要专门的培训和评估步骤,因此您可以使用一些机器学习技巧,并确保您的模型确实在改进。 / p>

也不要忘记包含先前模型正确的实体-例如,如果您在“芝加哥公牛队”一词中还包含一个人名,则您也希望将此人也包含在训练数据中。所以您的工作流程看起来像这样:

  • 使用模式规则提取文本中的匹配项。
  • 对于每个文本,还要检查doc.ents并获取现有的实体。
  • 将两者组合在一起,并检查它们是否正确。
  • 使用这些新示例更新模型。

令人高兴的是,大多数操作都可以通过Python脚本自动执行。另请参见this docs section作为示例。

  

Matcher \ PhraseMatcher \ EntityRuler(与该用例更相关?)

EntityRuler基本上是一个更高级的组件,它使用MatcherPhraseMatcherDoc中查找匹配项,并将其自动添加到{{ 1}}。它还支持输入大型特征码文件,并在保存时将其与模型序列化。它还处理了这样一个事实,即命名实体根据定义不能重叠,因为一个令牌只能是一个实体的一部分。因此,如果您知道要查找的是实体,则doc.ents可能会更方便,因为这意味着您必须自己编写更少的代码。