Entraîner un modèle NER existant
Un modèle spaCy peut ne pas bien fonctionner sur un jeu de données donné. Une solution consiste à l'entraîner sur vos propres données. Dans cet exercice, vous allez pratiquer l'entraînement d'un modèle NER afin d'améliorer ses performances de prédiction.
Un modèle spaCy en_core_web_sm, accessible sous nlp, n'arrive pas à prédire correctement house comme entité dans une chaîne test.
Étant donné un training_data, écrivez les étapes pour mettre à jour ce modèle en parcourant les données deux fois. Les autres composants du pipeline sont déjà désactivés et l'optimizer est prêt à être utilisé. Le nombre d'époques est déjà fixé à 2.
Cette activité fait partie du cours
Traitement du langage naturel avec spaCy
Instructions de l’exercice
- Utilisez l'objet
optimizeret, pour chaque époque, mélangez l'ensemble de données avec le modulerandomet créez un objetExample. - Mettez à jour le modèle
nlpà l'aide de l'attribut.updateet définissez l'argumentsgdpour utiliser l'optimizer.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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])