Ein spaCy-Modell von Grund auf trainieren
spaCy bietet einen sehr klaren und effizienten Ansatz, um eigene Modelle zu trainieren. In dieser Übung trainierst du ein NER-Modell von Grund auf mit einem realen Korpus (CORD-19-Daten).
Die Trainingsdaten liegen im richtigen Format als training_data vor. In dieser Übung verwendest du eine vorgegebene Liste von Labels ("Pathogen", "MedicalCondition", "Medicine"), gespeichert in labels, zusammen mit einem leeren englischen Modell (nlp) mit einer NER-Komponente. Die vorgesehenen medizinischen labels werden zur NER-Pipeline hinzugefügt, und anschließend kannst du das Modell für eine Epoche trainieren. Du kannst die vorab importierte Klasse Example nutzen, um die Trainingsdaten in das erforderliche Format zu konvertieren. Um das Modelltraining zu verfolgen, kannst du eine losses-Liste an die Methode .update() übergeben und den Trainingsverlust prüfen.
Diese Übung ist Teil des Kurses
<Kurs>Natural Language Processing mit spaCy</Kurs>Übungsanweisungen
- Erstelle ein leeres spaCy-Modell und füge dem Modell eine NER-Komponente hinzu.
- Deaktiviere andere Pipeline-Komponenten, verwende das erstellte Objekt
optimizerund aktualisiere die Modellgewichte mit den konvertierten Daten imExample-Format.
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
# 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)