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)
廣告