我有一个简单的命令:
python -m spacy download en_core_web
而且我一辈子都不知道它下载到哪里。我搜索"en_core_web",但在任何地方都找不到任何东西。我一辈子都不知道该搜索什么来理解这个命令背后的语法。
你把这条线叫什么?python命令行参数?我找不到要搜索的内容来指定下载位置。
请帮忙!
我偶然发现了同样的问题,可以使用模型类变量找到加载的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
希望能帮助
我似乎找不到任何证据表明spacy关注$SPACY_DATA_DIR
环境变量,在尝试将模型下载到特定位置时,我也无法获得上述--data-path
或model.path
(--model.path
?(参数。对我来说,这是一个问题,因为我试图将模型排除在Docker映像之外,这样它们就可以在不重建映像的情况下被持久化或轻松更新。
我最终得出了以下使用预训练模型的解决方案:
- 正常运行下载代码(即
python -m spacy.download en_core_web_lg
( - 在Python中:
import spacy
,然后是nlp = spacy.load('en_core_web_lg')
- 现在将其保存到您想要的位置:
nlp.to_disk('path/to/dir')
您现在可以通过nlp=spacy.load('path/to/dir')
从本地文件加载此文件。文档中有一个建议,您可以手动下载模型:
您可以将模型数据目录放置在本地文件系统的任何位置。要将其与spaCy一起使用,只需为数据目录创建一个快捷链接,即可为其指定一个名称。但我不明白这在实践中意味着什么(我已经向spaCy提交了一个"问题"(。
希望这能帮助其他试图做类似事情的人。
将上面提出的所有解决方案放在一起,为了控制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))