Gensim:加载doc2vec模型时出错?

时间:2020-04-15 08:31:58

标签: python-3.x doc2vec

训练后将我的Doc2Vec模型存储到磁盘中,然后当我尝试从磁盘中加载模型时,它显示了一些错误

from gensim.models.doc2vec import Doc2Vec
from gensim.test.utils import get_tmpfile

def save_d2v_to_disk(model,fname):
    fn = get_tmpfile(fname)
    model.save(fn)

def load_d2v_from_disk(fname):
    fn = get_tmpfile(fname)
    model = Doc2Vec.load(fname)
    return model

错误给了我

    >>> model = load_d2v_from_disk("model_d2v_version_002")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 3, in load_d2v_from_disk
      File "/usr/lib64/python2.7/site-packages/gensim/models/doc2vec.py", line 1113, in load
        return super(Doc2Vec, cls).load(*args, **kwargs)
      File "/usr/lib64/python2.7/site-packages/gensim/models/base_any2vec.py", line 1244, in load
        model = super(BaseWordEmbeddingsModel, cls).load(*args, **kwargs)
      File "/usr/lib64/python2.7/site-packages/gensim/models/base_any2vec.py", line 603, in load
        return super(BaseAny2VecModel, cls).load(fname_or_handle, **kwargs)
      File "/usr/lib64/python2.7/site-packages/gensim/utils.py", line 426, in load
        obj = unpickle(fname)
      File "/usr/lib64/python2.7/site-packages/gensim/utils.py", line 1386, in unpickle
        return _pickle.loads(f.read())
    cPickle.UnpicklingError: invalid load key, '-'.
    >>>

我在Google中搜索了此错误,但未找到任何内容,请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可能不希望以这种方式使用gensim.test.utils.get_tmpfile函数。它只是在系统的“临时”目录内创建一个文件名-在某些情况下,该文件名可能会随着时间的推移而更改,并且在某些系统上,有时会自动清除较旧的文件。如果您需要保存模型以供将来重用,最好将其保存在您控制的明确位置。

也就是说,如果只是短暂需要,则该位置应该可以正常工作,例如在以短期顺序创建,保存,加载和删除文件的全周期测试中。但是,在这种情况下,您应该保留保存例程创建的确切文件路径,然后重新使用该确切名称-而不是两次调用get_tmpfile()

如果Doc2Vec .save()正确地完成了操作,那么我不会马上看到这种错误。

您确定"model_d2v_version_002"文件是使用.save()保存的,没有错误吗? (您是否有保存时间的日志记录输出,确认成功?)

保存后,是否可以通过列出该目录中的所有文件来验证其在选定位置的存在(以及可能的支持文件)?