首页 > 解决方案 > 在训练模型上使用“Spacy 包”:错误“无法定位模型数据”

问题描述

我正在尝试在 SpaCy 中训练 NER 以识别一组新实体。一切正常,直到我尝试保存并重新加载模型。

我正在尝试遵循https://spacy.io/usage/training#saving-loading中的 SpaCy 文档建议,因此我一直在保存:

model.to_disk("save_this_model")

然后转到命令行并尝试使用以下命令将其变成一个包:

python -m spacy package save_this_model saved_model_package

所以我可以使用

spacy.load('saved_model_package') 

将模型拉回。

但是,当我尝试从命令行使用 spacy 包时,我不断收到错误消息“无法找到模型数据”

我查看了 save_this_model 文件,那里有一个 meta.json,以及各种管道的文件夹(我已经尝试过保存所有管道并禁用非 NER 管道,两者都不起作用)。

有谁知道我在这里可能做错了什么?

我非常缺乏经验,所以我认为我很有可能试图错误地制作一个包或犯一些其他基本错误。非常感谢您提前提供的帮助!

标签: spacy

解决方案


该命令将根据您的模型数据spacy package创建可安装和可加载的Python 包pip install,然后您可以将其存储在单个.tar.gz文件中。如果你只是想加载一个你已经保存的模型,你通常甚至不需要打包它——你可以简单地将模型目录的路径传递给spacy.load. 例如:

nlp = spacy.load('/path/to/save_this_model')

spacy.load可以采用模型目录的路径、模型包名称或快捷链接的名称(如果可用)。

如果您是 spaCy 的新手并且只是在试验训练模型,那么从目录加载它们通常是最简单的解决方案。如果您想与其他人共享您的模型(因为您可以将它作为一个可安装文件共享),或者如果您想将它集成到您​​的 CI 工作流程或测试套件中(因为模型可以是您的应用程序,就像它依赖的任何其他包一样)。

因此,如果您确实想要一个 Python 包,您首先需要通过在以下创建的目录中运行包设置来构建它spacy package

cd saved_model_package
python setup.py sdist

您可以在文档中找到更多详细信息。上面的命令将.tar.gz在目录中创建一个存档/dist,然后您可以将其安装在您的环境中。

pip install /path/to/en_example_model-1.0.0.tar.gz

pip list如果模型安装正确,它应该会在您运行或运行时显示在已安装的包中pip freeze。要加载它,您可以spacy.load使用包名进行调用,通常是语言代码加上您在打包模型时指定的名称。在这个例子中,en_example_model

nlp = spacy.load('en_example_model')

推荐阅读