Где обученная модель NER сохраняется после обучения пространственной модели с новыми объектами

#python #model #nlp #spacy #named-entity-recognition

#python #Модель #nlp #пространственная #распознавание именованных объектов

Вопрос:

Я все еще изучаю Python и создание моделей и очень новичок в NLP с использованием Spacy. Я использовал https://spacy.io/usage/training#ner для обучения существующей модели Спейси — en_core_web_sm.

Я обучил эту модель с объектами, специфичными для моего домена.

 def main(model="en_core_web_sm", new_model_name="new_ner_model", output_dir='/content/drive/My Drive/Data/new_model', n_iter=100):
.
.
(code to train the model)
.
.
    # save model to output directory
    if output_dir is not None:
        output_dir = Path(output_dir)
        if not output_dir.exists():
            output_dir.mkdir()
        nlp.meta["name"] = new_model_name  # rename model
        nlp.to_disk(output_dir)
        print("Saved model to", output_dir)
  

Теперь я предположил, что найду один файл модели в выходном каталоге. Вместо этого у меня есть 4 вложенные папки — vocab, ner, tagger, parser. И 2 файла meta.json и tokenizer.
Подпапка ner содержит cfg, moves, model.

Согласно упомянутому выше веб-сайту, для загрузки новой модели мне нужно использовать всю папку (выходной каталог), т.е.

nlp2 = spacy.load(output_dir)

Нужен ли весь каталог (это модель) или это двоичный файл с именем model в подпапке ner?

Ответ №1:

В общем, мы советуем сохранить всю модель в виде папки, чтобы убедиться, что все загружается обратно последовательно. просто загрузить model файл сам по себе не получится. Он просто содержит веса нейронной сети. Некоторые другие файлы необходимы для определения параметров и настройки вашего конвейера NLP и его различных компонентов. Например, вам всегда нужны данные vocab и т. Д.

Одна вещь, которую вы могли бы сделать, это отключить компоненты, которые вас не интересуют. Это уменьшит размер папки на вашем диске и удалит ненужные ненужные папки. Например, если вас интересует только NER, вы могли бы сделать:

 nlp = spacy.load("en_core_web_sm", disable=["parser", "tagger"])`
  

Или, если вы загрузили всю модель, вы можете сохранить только ее части на диске:

 nlp.to_disk(output_dir, exclude=["parser", "tagger"])
  

Комментарии:

1. Спасибо @sofie-vl. Это действительно помогло! Это уменьшило размер до 3-го от того, что было.

2. Рад это слышать!