直接从打包的 tar.gz 文件加载 spacy 模型

Directly load spacy model from packaged tar.gz file

是否可以直接从 tar 文件加载打包的 spacy 模型(即 foo.tar.gz)而不是预先安装?我会想象这样的事情:

import spacy 

nlp = spacy.load(/some/path/foo.tar.gz)

不,这目前是不可能的。 .tar.gz 档案的主要目的是使它们易于通过 pip install 安装。但是,您始终可以从存档中提取模型数据,然后从路径加载它 – see here for more details.

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

使用 spacy link command 您还可以为您的模型创建 "shortcut links",即 symlinks 允许您使用自定义名称而不是完整路径或包加载模型姓名。如果您使用大型模型和多个环境(并且不想在每个环境中安装数据),这将特别有用。

python -m spacy link /path/to/model_data cool_model

上面的快捷方式 link 然后可以让您像这样加载模型:

nlp = spacy.load('cool_model')

或者,如果您真的需要从档案中加载模型,您总是可以为spacy.load编写一个简单的包装器,它获取文件,提取内容,读取上面的 model meta, gets the path to the data directory and then calls spacy.util.load_model_from_path 和 returns nlp 对象。

这不是直接的答案,但它可能有助于直接使用 SpaCy 加载压缩模型。这可以通过使用 pickle.

来完成

首先,您需要加载您的 SpaCy 模型并使用 pickle:

压缩转储它
import spacy
import pickle

s = spacy.load("en_core_web_sm", parse=False)

pickle.dump(s, open("save.p", "wb"))

之后,您可以直接在其他地方轻松加载 pickle dump 作为 SpaCy 模型:

s = pickle.load(open("save.p", "rb"))