Обучение NER на своих данных и упаковка ее в сервис на Flask

Добрый день!

Пробую обучить NER на своих данных. Вроде обучилась и модель сохранилась. Есть следующие вопросы:

  1. Как теперь вызвать именно эту модель и сделать инференс на незнакомых данных?
  2. Можно ли и как сериализовать файл с моделью?
  3. Как упаковать эту модель в сервис на фласк, чтобы получать предикт? Не загружая весь диппавлов и не подгружая предобученные модели, а только свою?
  1. Как теперь вызвать именно эту модель и сделать инференс на незнакомых данных?

В конфигурационном файле модели есть параметры save_path и load_path, они должны указывать на именно вашу модель. Затем, по примерам из документации модель можно использовать из python:

from deeppavlov import configs, build_model
ner_model = build_model(YOUR_CONFIG_FILE)
ner_model(['Bob Ross lived in Florida'])
  1. Можно ли и как сериализовать файл с моделью?
  2. Как упаковать эту модель в сервис на фласк, чтобы получать предикт? Не загружая весь диппавлов и не подгружая предобученные модели, а только свою?

DeepPavlov может запустить serving обученной модели (используется uvicorn+fastapi) с помощью команды:

python -m deeppavlov riseapi YOUR_CONFIG

Больше информации (описание доп параметров) есть в документации.
При этом используется DeepPavlov и только нужная модель.

Если вы собираетесь хостить модель не у себя локально, то удобно указать в конфиге в секции downloads url до сохраненной модели (можно использовать s3), пример секции downloads есть, например, в этом конфиге: https://github.com/deepmipt/DeepPavlov/blob/master/deeppavlov/configs/ner/ner_rus_bert_torch.json#L150

Тогда команда

python -m deeppavlov riseapi YOUR_CONFIG -d

скачает модель и запустит сервис готовый к инференсу модели.

2 Likes

Юрий, добрый день.
По первому пункту. Пытаюсь так же сделать. Сначала учу модель ner_ontonotes_bert_mult_torch, проверяю - работает хорошо, сущности определяет отлично.
Сохраняю (два варианта пробовал - просто копировать из папки указанной в конфиге save_path и второй вариант ner_model.save() - в той же папке тот же файл model.pth.tar)
Затем в новом окружении пытаюсь инициализировать эту модель
Прописываю путь к файлу .tar в конфиге

config_dict[‘chainer’][‘pipe’][2][‘load_path’] = ‘путь к модели’
config_dict[‘chainer’][‘pipe’][2][‘save_path’] = ‘путь к модели’

Затем
ner_model = build_model(config_dict)
Тогда возникакет ошибка type_mismatch не соответствие классов обученной модели и модели основной.
Если поставить параметр download=True, то модель создается, веса подгружаются из моего пути из сохраненных весов, но модель в итоге работает ужасно. Все сущности перепутаны, сплошной дурдом. Хотя перед сохранением все было красиво. Проверял на одних и тех же текстах.
Что в итоге делать надо? Модель дообучаю, все хорошо, но дальше использовать не получается.