spaCy - 更新神经网络模型

在本章中,我们将学习如何在 spaCy 中更新神经网络模型。

更新的原因

以下是更新现有模型的原因 −

  • 更新后的模型将在您的特定领域提供更好的结果。

  • 在更新现有模型时,您可以学习针对问题的分类方案。

  • 更新现有模型对于文本分类至关重要。

  • 它对于命名实体识别特别有用。

  • 对于 POS 标记和依赖解析来说,它不那么重要。

更新现有模型

借助 spaCy,我们可以更新现有模型预训练模型使用更多数据。例如,我们可以更新模型以改进其对不同文本的预测。

如果您想改进模型已经知道的类别,更新现有的预训练模型非常有用。例如,"人"或"组织"。我们还可以更新现有的预训练模型以添加新类别。

建议始终使用新类别的示例以及模型先前正确预测的其他类别的示例来更新现有的预训练模型。如果不这样做,改进新类别可能会损害其他类别。

设置新管道

从下面给出的示例中,让我们了解如何从头开始设置新管道以更新现有模型 −

  • 首先,我们将使用 spacy.blank 方法从空白英语模型开始。它仅具有语言数据和标记化规则,没有任何管道组件。

  • 之后,我们将创建一个空白实体识别器并将其添加到管道中。接下来,我们将使用 add_label 将新的字符串标签添加到模型中。

  • 现在,我们可以通过调用 nlp.begin_training 使用随机权重初始化模型。

  • 接下来,我们需要在每次迭代中随机打乱数据。这是为了获得更好的准确性。

  • 打乱后,使用 spaCy 的 minibatch 函数将示例分成批次。最后,用文本和注释更新模型,然后继续循环。

示例

下面给出了一个使用spacy.blank从空白英语模型开始的示例−

nlp = spacy.blank("en")

以下是创建空白实体识别器并将其添加到管道的示例−

ner = nlp.create_pipe("ner")
nlp.add_pipe(ner)

以下是使用add_label添加新标签的示例−

ner.add_label("GADGET")

以下是使用 nlp.begin_training 开始训练的示例

nlp.begin_training()

这是一个迭代训练并在每次迭代中打乱数据的示例。

for itn in range(10):
random.shuffle(examples)

这是一个使用 minibatch 实用函数 for batch in spacy.util.minibatch(examples, size=2)将示例分成批次的示例。

texts = [text for text, comment in batch]
annotations = [annotation for text, annotation in batch]]

下面给出了使用文本和注释更新模型的示例 −

nlp.update(texts, annotations)