使用自定义数据集训练SpaCy NER

时间:2020-06-25 22:33:43

标签: python-3.x nlp spacy ner

我已遵循this SpaCy教程来训练自定义数据集。我的数据集是一个地名词典。因此,我的训练数据如下。

TRAIN_DATA = [
("Where is Abbess",{"entities":[(9, 15,"GPE")]}),
("Where is Abbey Pass",{"entities":[(9, 19,"LOC")]}),
("Where is Abbot",{"entities":[(9, 14,"GPE")]}),
("Where is Abners Head",{"entities":[(9, 29,"LOC")]}),
("Where is Acheron Flat",{"entities":[(9, 21,"LOC")]}),
("Where is Acheron River",{"entities":[(9, 22,"LOC")]})
]

我使用'en_core_web_sm'进行训练,而不是空白模型。

model = 'en_core_web_sm'
output_dir=Path(path)
n_iter=20

训练了20次后,我试图用训练后的模型进行预测。以下是我得到的输出。

test_text = "Seven people, including teenagers, have been taken to hospital after their car crashed in the mid-Canterbury town of Rakaia."

Seven people, including teenagers 0 33 GPE
the mid-Canterbury town of Rakaia.. 90 125 GPE

我使用'en_core_web_sm'对相同的test_text进行了预测。输出如下。

Seven 0 5 CARDINAL
mid-Canterbury 94 108 DATE
Rakaia 117 123 GPE

有人可以指导我培训SpaCy时出现的错误吗?

1 个答案:

答案 0 :(得分:0)

结果不佳的原因是由于一个名为catastrophic forgetting的概念。您可以获取更多信息here

tl; dr

在使用新实体训练en_core_web_sm模型时,它会忘记先前学习的内容。

为了确保不会忘记旧的知识,在重新训练期间,您还需要提供其他类型实体的模型示例。通过这样做,您将确保该模型不会自我调整和倾斜以预测要训练的新实体时的一切。

您可以阅读有关here可以实现的解决方案