Träna en befintlig NER-modell
En spaCy-modell kanske inte fungerar bra på en given datamängd. En lösning är att träna modellen på din egen data. I den här övningen tränar du en NER-modell för att förbättra dess prediktionsprestanda.
En spaCy-modell en_core_web_sm är tillgänglig som nlp. Den kan inte korrekt förutsäga house som en entitet i en test-sträng.
Givet en training_data, skriv stegen för att uppdatera den här modellen medan du itererar genom data två gånger. De övriga pipelines är redan inaktiverade och optimizer är redo att användas. Antalet epoker är redan satt till 2.
Den här övningen är en del av kursen
Naturlig språkbehandling med spaCy
Övningsinstruktioner
- Använd
optimizer-objektet och blanda för varje epok datamängden med paketetrandom, och skapa ettExample-objekt. - Uppdatera
nlp-modellen med attributet.updateoch ange argumentetsgdså att optimeraren används.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
nlp = spacy.load("en_core_web_sm")
print("Before training: ", [(ent.text, ent.label_) for ent in nlp(test).ents])
other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
nlp.disable_pipes(*other_pipes)
optimizer = nlp.create_optimizer()
# Shuffle training data and the dataset using random package per epoch
for i in range(epochs):
random.____(training_data)
for text, ____ in training_data:
doc = nlp.____(____)
# Update nlp model after setting sgd argument to optimizer
example = Example.____(____, ____)
nlp.____([____], sgd = ____)
print("After training: ", [(ent.text, ent.label_) for ent in nlp(test).ents])