Spacy 简明教程
spaCy - Updating Neural Network Model
在本章中,我们将了解如何在 spaCy 中更新神经网络模型。
Reasons to update
以下是更新现有模型的原因 −
-
更新后的模型将在您的特定领域提供更好的结果。
-
在更新现有模型的同时,您可以了解特定问题的分类方案。
-
更新现有模型对于文本分类至关重要。
-
它对命名实体识别特别有用。
-
它对词性标注和依存关系分析也不是至关重要的。
Updating an existing model
借助 spaCy,我们可以使用更多数据更新现有的预训练模型。例如,我们可以更新模型以改进其在不同文本上的预测。
更新现有预训练模型非常有用,如果你想对其已知的类别进行改进。例如,“人”或“组织”。我们还可以更新现有预训练模型以添加新类别。
我们建议始终用新类别的示例以及该模型之前正确预测的其他类别的示例更新现有预训练模型。如果不这样做,那么改进新类别可能会损害其他类别。
Setting up a new pipeline
从以下给定的示例中,让我们了解如何从头开始设置一个新管道以更新现有模型-
-
首先,我们将使用以下 spacy.blank 方法从空白英语模型开始。它只包含语言数据和标记规则,并且没有任何管道组件。
-
然后,我们将创建一个空白实体识别器并将它添加到管道中。接下来,我们将使用以下 add_label ,将新的字符串标签添加到模型中。
-
现在,我们可以通过调用以下 nlp.begin_training ,用随机权重初始化该模型。
-
接下来,我们需要在每次迭代中随机对数据进行混洗。这是为了提高准确性。
-
一旦打乱顺序,就使用spaCy的微批处理函数将示例分成批次。最后,使用文本和注释更新模型,然后继续循环。
Examples
下面是 starting with blank English model by using spacy.blank 的一个示例-
nlp = spacy.blank("en")
以下是 creating blank entity recognizer and adding it to the pipeline 的一个示例-
ner = nlp.create_pipe("ner")
nlp.add_pipe(ner)
这是 adding a new label by using add_label 的一个示例-
ner.add_label("GADGET")
starting the training by using nlp.begin_training is as follows 的一个示例-
nlp.begin_training()
这是一个 training for iterations and shuffling the data on each iteration 的示例。
for itn in range(10):
random.shuffle(examples)
这是一个 dividing the examples into batches using minibatch utility function for batch in spacy.util.minibatch(examples, size=2) 的示例。
texts = [text for text, annotation in batch]
annotations = [annotation for text, annotation in batch]
下面是 updating the model with texts and annotations 的一个示例-
nlp.update(texts, annotations)