spaCy - 更新神经网络模型



本章将学习如何更新 spaCy 中的神经网络模型。

更新的原因

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

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

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

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

  • 它对命名实体识别尤其有用。

  • 对于词性标注和依存句法分析,它的重要性较低。

更新现有模型

借助 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, annotation in batch]
annotations = [annotation for text, annotation in batch]

下面是一个使用文本和注释更新模型的示例:

nlp.update(texts, annotations)
广告