我有一个很大的gensim Doc2vec模型,当我从其他来源加载训练文档向量时,我只需要推断向量。没有大的npy文件,是否可以按原样加载它
我做了
编辑:
from gensim.models.doc2vec import Doc2Vec
model_path = r'C:\model/model'
model = Doc2Vec.load(model_path)
model.delete_temporary_training_data(keep_doctags_vectors=False, keep_inference=True)
model.save(model_path)
删除文件(model.trainables.syn1neg.npy,model.wv.vectors.npy)
手动
model = Doc2Vec.load(model_path)
但它要求
Traceback (most recent call last):
File "<ipython-input-5-7f868a7dbe0c>", line 1, in <module>
model = Doc2Vec.load(model_path)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\gensim\models\doc2vec.py", line 1113, in load
return super(Doc2Vec, cls).load(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\gensim\models\base_any2vec.py", line 1244, in load
model = super(BaseWordEmbeddingsModel, cls).load(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\gensim\models\base_any2vec.py", line 603, in load
return super(BaseAny2VecModel, cls).load(fname_or_handle, **kwargs)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\gensim\utils.py", line 427, in load
obj._load_specials(fname, mmap, compress, subname)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\gensim\utils.py", line 458, in _load_specials
getattr(self, attrib)._load_specials(cfname, mmap, compress, subname)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\gensim\utils.py", line 469, in _load_specials
val = np.load(subname(fname, attrib), mmap_mode=mmap)
File "C:\ProgramData\Anaconda3\envs\py\lib\site-packages\numpy\lib\npyio.py", line 428, in load
fid = open(os_fspath(file), "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\model/model.trainables.syn1neg.npy'
注意:这些文件在目录中不存在,模型在服务器上运行,并从存储中下载模型文件我的问题是,模型是否必须具有这些文件以进行推断?我想运行它尽可能低的内存消耗。谢谢。
编辑:模型权重是文件model.trainables.syn1neg.npy吗?运行推理是否需要文件model.wv.vectors.npy吗?
我不喜欢delete_temporary_training_data()
方法。这意味着训练状态与以后使用需要的状态之间存在更清晰的分隔。 (推论与训练非常相似,尽管推论文本不需要缓存的文档向量。)
就是说,如果您使用了该方法,则不应删除仍然是保存内容的任何辅助文件。如果它们是由.save()
编写的,则按名称应由.load()
书写。它们必须与主模型文件一起保存。 (在delete_temporary_training_data()
调用之后,此类文件可能会更少,或者此类文件会更小-但必须保留所有已写的内容以供阅读。)
syn1neg
文件绝对是推理所必需的:它是模型的隐藏到输出的权重,它是执行新的前向预测(并因此向后传播的推理调整)所必需的。在默认的wv.vectors
模式下,绝对需要dm=1
文件,其中字向量是文档向量计算的一部分。 (在dm=0
模式下,它可能是可选的,但我不确定代码是否针对它们的缺失而装甲-不是通过内存中的修剪,而且绝对不是针对期望的文件被带外删除。) >