ComenzarEmpieza gratis

Entrenar un modelo NER existente

Es posible que un modelo de spaCy no funcione bien con ciertos datos. Una solución es entrenar el modelo con nuestros propios datos. En este ejercicio, practicarás el entrenamiento de un modelo de NER para mejorar su rendimiento de predicción.

Tienes un modelo de spaCy en_core_web_sm, accesible como nlp, que no es capaz de predecir correctamente house como entidad en una cadena test.

Dado un training_data, escribe los pasos para actualizar este modelo iterando por los datos dos veces. El resto de componentes del pipeline ya están deshabilitados y el optimizer está listo para usarse. El número de épocas ya está fijado en 2.

Este ejercicio forma parte del curso

Procesamiento del Lenguaje Natural con spaCy

Ver curso

Instrucciones del ejercicio

  • Usa el objeto optimizer y, para cada época, baraja el conjunto de datos con el paquete random y crea un objeto Example.
  • Actualiza el modelo nlp usando el método .update y establece el argumento sgd para usar el optimizador.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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])
Editar y ejecutar código