LoslegenKostenlos loslegen

Ein vorhandenes NER-Modell trainieren

Ein spaCy-Modell funktioniert auf gegebenen Daten eventuell nicht gut. Eine Lösung ist, das Modell auf unseren Daten zu trainieren. In dieser Übung trainierst du ein NER-Modell, um seine Vorhersageleistung zu verbessern.

Ein spaCy-en_core_web_sm-Modell ist als nlp verfügbar und kann house in einem test-String nicht korrekt als Entität vorhersagen.

Gegeben ist ein training_data. Schreibe die Schritte, um dieses Modell zu aktualisieren, während du zweimal über die Daten iterierst. Die anderen Pipelines sind bereits deaktiviert, und der optimizer ist ebenfalls bereit zur Verwendung. Die Anzahl der Epochen ist bereits auf 2 gesetzt.

Diese Übung ist Teil des Kurses

Natural Language Processing mit spaCy

Kurs anzeigen

Anleitung zur Übung

  • Verwende das optimizer-Objekt und mische in jeder Epoche den Datensatz mit dem Paket random, und erstelle ein Example-Objekt.
  • Aktualisiere das nlp-Modell mit dem Attribut .update und setze das Argument sgd, um den Optimizer zu verwenden.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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])
Code bearbeiten und ausführen