如何训练 NER 识别单词不是实体?

How to train NER to recognize that a word is not an entity?

我的问题可能措辞不当,但基本上我一直在使用 spaCy 为 NER 训练新模型。我已经训练了一些自定义实体,当我测试它时,它做得非常好。但是,当我向它发送一些不应该被识别为实体的东西时,它似乎无论如何都会猜测其中一个实体。我猜这是因为我从来没有训练过它 = O(我认为斯坦福就是这样做的)。

这是我的训练数据样本,看起来对吗?我是否只需要添加垃圾值并将实体设置为 O?

[ "644663" , {"entities": [[0,6, "CARDINAL"]]}],
[ "871448" , {"entities": [[0,6, "CARDINAL"]]}],
[ "6/26/1967" , {"entities": [[0,9, "DATE"]]}],
[ "1/21/1969" , {"entities": [[0,9, "DATE"]]}],
[ "GORDON GARDIN" , {"entities": [[0,13, "PERSON"]]}],
[ "CANDRA CARDINAL" , {"entities": [[0,15, "PERSON"]]}],
[ "FIAT" , {"entities": [[0,4, "CARMAKE"]]}],
[ "FORD" , {"entities": [[0,4, "CARMAKE"]]}]

你是对的,问题是你没有向系统显示任何不是实体的东西。但是,您不想添加 "trash values" 。 Spacy 希望您的训练字符串是在上下文中包含实体的字符串,而不仅仅是实体的单个示例。所以一个训练示例应该看起来更像:

[ "My uncle drives a Ford" , {"entities": [(18,22, "CARMAKE")]}]

这将允许您的系统训练以识别上下文中的实体,并识别比您提供的特定训练示例更多的实体(例如,训练有素的系统将能够识别 "Chrysler" 和 "Toyota" 除了福特和菲亚特之外的汽车制造)。 Spacy 对自定义实体的训练有更深入的 examples,因此我建议您检查一下。