spacy语言模型下载在哪里?

27

我有一个简单的命令:

python -m spacy download en_core_web

我真的无法弄清楚下载到哪里了。我搜索了"en_core_web"但是没有找到任何东西。而且我也不知道该搜索什么来理解这个命令背后的语法。

你怎么称呼这一行?Python命令行参数吗?我找不到指定下载位置的搜索词。

请帮帮我!

3个回答

21

我偶然发现了同样的问题,可以使用模型类变量找到加载的spaCy模型的路径。

例如,在命令行完成模型下载后:

python -m spacy download en_core_web_sm

然后在Python shell中执行以下操作:

import spacy
model = spacy. load("en_core_web_sm")
model._path

这将向您展示模型在系统中的安装位置。

如果您想要下载到不同的位置,我相信您可以在命令行中输入以下内容:
python -m spacy.en.download en_core_web_sm --data-path /some/dir

希望这能帮到您。


3
在Spacy 3中,它是model.path - Thomas Luechtefeld
2
没有这个选项:--data-path。你使用的是哪个版本? - Miguel
1
我正在使用3.0.6,model.pathmodel._path都可以正常工作。 - Matt

11
我似乎找不到任何证据表明spacy关注$SPACY_DATA_DIR环境变量,当尝试下载模型到特定位置时,上述--data-path或model.path(--model.path?)参数也无法正常工作。对我来说,这是一个问题,因为我想将模型保留在Docker图像之外,以便可以轻松地进行更新而不需要重建图像。
最终,我找到了以下使用预训练模型的解决方案:
1. 像平常一样运行下载代码(即python -m spacy.download en_core_web_lg)。 2. 在Python中导入spacy,然后nlp = spacy.load('en_core_web_lg')。 3. 现在将其保存到所需位置:nlp.to_disk('path/to/dir')。
现在您可以通过nlp=spacy.load('path/to/dir')从本地文件加载它。文档中提出了一个建议,可以手动下载模型:
您可以将模型数据目录放置在本地文件系统上的任何位置。要在spaCy中使用它,请通过为数据目录创建快捷链接来为其命名。
但我无法理解这在实践中意味着什么(已向spaCy提交了“问题”)。希望这能帮助任何试图做类似事情的人。

7
将上述提出的所有解决方案综合起来,以控制spacy下载位置,可以采用以下方法:
cache_dir=os.getenv("cache_dir", "../../models")
model_path="en_core_web_sm"
try:
    nlp = spacy.load(os.path.join(cache_dir,model_path))
except OSError:
    spacy.cli.download(model_path)
    nlp = spacy.load(model_path)
    nlp.to_disk(os.path.join(cache_dir,model_path))

因此,从第二次执行开始,请求的位置下将可用该模型。

nlp = spacy.load(os.path.join(cache_dir,model_path))

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