训练一个现有的 NER 模型
某个 spaCy 模型在给定数据上可能表现不佳。一个解决方案是用我们的数据对模型进行训练。在本练习中,您将练习训练一个 NER 模型,以提升其预测效果。
已提供一个 spaCy 的 en_core_web_sm 模型,可通过 nlp 访问。它目前无法在 test 字符串中将 house 正确预测为实体。
给定 training_data,请编写步骤来更新该模型,并对数据迭代两次。其他流水线已禁用,optimizer 也已就绪可用。训练轮数(epochs)已设为 2。
本练习是课程的一部分
使用 spaCy 的自然语言处理
练习说明
- 使用
optimizer对象,并在每个 epoch 中,使用random包打乱数据集并创建Example对象。 - 使用
.update方法更新nlp模型,并将sgd参数设置为使用该 optimizer。
交互式实操练习
通过完成这段示例代码来试试这个练习。
nlp = spacy.load("en_core_web_sm")
print("Before training: ", [(ent.text, ent.label_) for ent in nlp(test).ents])
other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
nlp.disable_pipes(*other_pipes)
optimizer = nlp.create_optimizer()
# Shuffle training data and the dataset using random package per epoch
for i in range(epochs):
random.____(training_data)
for text, ____ in training_data:
doc = nlp.____(____)
# Update nlp model after setting sgd argument to optimizer
example = Example.____(____, ____)
nlp.____([____], sgd = ____)
print("After training: ", [(ent.text, ent.label_) for ent in nlp(test).ents])