НачатьНачать бесплатно

Обучение существующей модели NER

Модель spaCy не всегда корректно работает с конкретными данными. Одно из решений — дообучить модель на собственных данных. В этом упражнении вы потренируетесь обучать модель NER, чтобы улучшить качество её предсказаний.

Модель spaCy en_core_web_sm доступна как nlp. В текущем виде она не распознаёт слово house как именованную сущность в строке test.

Используя training_data, выполните шаги для обновления модели, пройдя по данным два раза. Остальные компоненты конвейера уже отключены, объект optimizer готов к использованию, а количество эпох задано равным 2.

Это упражнение является частью курса

Обработка естественного языка с помощью spaCy

Посмотреть курс

Инструкции к упражнению

  • Используйте объект optimizer и для каждой эпохи перемешайте набор данных с помощью пакета random, затем создайте объект Example.
  • Обновите модель nlp с помощью атрибута .update, передав оптимизатор в аргумент sgd.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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])
Редактировать и запускать код