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

15

是否有可能直接从打包的spacy模型文件(即foo.tar.gz)中加载模型,而不必事先安装它?我想像的是:

可以直接从tar文件中加载spacy模型吗(例如foo.tar.gz),而不需要预先安装它?我会想到类似这样的东西:

import spacy 

nlp = spacy.load(/some/path/foo.tar.gz)
2个回答

14

不,目前还不可能。 .tar.gz 档案的主要目的是通过 pip install 轻松安装它们。但是,您总是可以从存档中提取模型数据,然后从路径加载它 - 在此处查看更多详细信息

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

使用spacy link命令,您还可以为您的模型创建“快捷链接”,即符号链接,让您使用自定义名称而不是完整路径或软件包名称加载模型。如果您正在处理大型模型和多个环境(并且不想在每个环境中安装数据),这将非常有用。

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

上面的快捷链接将允许您像这样加载您的模型:

nlp = spacy.load('cool_model')

或者,如果您真的需要从归档中加载模型,您可以编写一个简单的包装器来调用spacy.load函数,该函数可以接受文件,提取内容,读取模型元数据,获取数据目录的路径,然后在其上调用spacy.util.load_model_from_path函数,并返回nlp对象。


3
我执行了 python -m spacy link ... 命令,它提示我可以使用 spacy.load('cool_model') 加载模型。但是当我尝试加载时,它报错说在 venv/lib/python3.7/site-packages/spacy/data/cool_model/ 路径下找不到 __init__.py 文件。 - Logan Yang

2

这不是直接的答案,但它可能有助于直接使用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"))

Bless you my friend - Adit Saxena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接