從零開始訓練一個 spaCy 模型
spaCy 提供一套乾淨又高效的方式,讓你訓練自己的模型。在這個練習中,你會從零開始,使用真實語料(CORD-19 資料)訓練一個 NER 模型。
訓練資料已用正確格式放在 training_data。在本練習中,你會使用一組既定的標籤(「Pathogen」、「MedicalCondition」、「Medicine」)並存於 labels,搭配含有 NER 元件的空白英文模型(nlp)。會先把目標醫學 labels 加入 NER 管線,接著你可以訓練模型 1 個 epoch。你可以使用預先匯入的 Example 類別,將訓練資料轉成所需格式。為了追蹤模型訓練,你可以在 .update() 方法中加入 losses 清單,並查看訓練損失。
本練習屬於課程
使用 spaCy 的自然語言處理
練習說明
- 建立一個空白的 spaCy 模型,並將 NER 元件加入模型。
- 停用其他管線元件,使用建立好的
optimizer物件,並以轉換為Example格式的資料來更新模型權重。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Load a blank English model, add NER component, add given labels to the ner pipeline
nlp = spacy.____("____")
ner = nlp.____("ner")
for ent in labels:
ner.add_label(ent)
# Disable other pipeline components, complete training loop and run training loop
other_pipes = [____ for pipe in nlp.____ if ____ != "____"]
nlp.disable_pipes(*____)
losses = {}
optimizer = nlp.begin_training()
for text, annotation in training_data:
doc = nlp.____(text)
example = Example.____(doc, annotation)
nlp.____([example], sgd=____, losses=losses)
print(losses)