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

时间:2018-07-25 14:28:19

标签: machine-learning nlp stanford-nlp spacy ner

我的话说的可能不好,但是基本上我一直在使用spaCy for 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"]]}]

1 个答案:

答案 0 :(得分:2)

您是正确的,因为问题是您没有向系统显示不是实体的任何东西。但是,您不想添加“垃圾值”。 Spacy希望您的训练字符串是在上下文中具有实体的字符串,而不仅仅是实体的单个示例。因此,一个培训示例应该更像:

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

这将使您的系统能够训练以识别上下文中的实体,并识别出的实体不仅仅是您提供的具体训练示例(例如,训练有素的系统将能够识别“克莱斯勒”和“丰田”为汽车制造商除了福特和菲亚特)。 Spacy更深入examples来训练自定义实体,所以我建议您检查一下。