使用新实体训练 Spacy 模型后,训练好的 NER 模型保存在哪里

Where is the trained NER model saved after training the Spacy model with new Entities

我仍在学习 Python 和创建模型,我对使用 Spacy 的 NLP 还很陌生。我使用 https://spacy.io/usage/training#ner 来训练 Spacy 的现有模型 - 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 和 tokenizerner 子文件夹有 cfg、moves、model.

根据上面提到的网站,要加载新模型,我需要使用整个文件夹(输出目录),即

nlp2 = spacy.load(output_dir)

是否需要整个目录(是模型)还是 ner 子文件夹中名为 model 的二进制文件?

一般来说,我们建议将整个模型保存为一个文件夹,以确保所有内容都以一致的方式加载回来。单独加载 model 文件是行不通的。它只包含神经网络的权重。需要一些其他文件来定义 NLP 管道及其不同组件的参数和设置。例如,你总是需要词汇数据等

您可以做的一件事是禁用您不感兴趣的组件。这将减小磁盘上的文件夹大小并删除您不需要的冗余文件夹。例如,如果你只对 NER 感兴趣,你可以这样做:

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

或者,如果您加载了整个模型,您可以只将其中的一部分存储到磁盘:

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