[加载Doc2Vec,而没有用于infer_vector的docs矢量

问题描述 投票:0回答:1

我有一个很大的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吗?

gensim doc2vec
1个回答
0
投票

我不喜欢delete_temporary_training_data()方法。这意味着训练状态与以后使用需要的状态之间存在更清晰的分隔。 (推论与训练非常相似,尽管推论文本不需要缓存的文档向量。)

就是说,如果您使用了该方法,则不应删除仍然是保存内容的任何辅助文件。如果它们是由.save()编写的,则按名称应由.load()书写。它们必须与主模型文件一起保存。 (在delete_temporary_training_data()调用之后,此类文件可能会更少,或者此类文件会更小-但必须保留所有已写的内容以供阅读。)

syn1neg文件绝对是推理所必需的:它是模型的隐藏到输出的权重,它是执行新的前向预测(并因此向后传播的推理调整)所必需的。在默认的wv.vectors模式下,绝对需要dm=1文件,其中字向量是文档向量计算的一部分。 (在dm=0模式下,它可能是可选的,但我不确定代码是否针对它们的缺失而装甲-不是通过内存中的修剪,而且绝对不是针对期望的文件被带外删除。) >

© www.soinside.com 2019 - 2024. All rights reserved.