Gensim: ошибка при загрузке модели doc2ve c? - PullRequest
0 голосов
/ 15 апреля 2020

Я сохранил свою модель Doc2Ve c после обучения на диск, а затем, когда я попытался загрузить модель обратно с диска, она показала мне некоторую ошибку

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 голосов
/ 15 апреля 2020

Возможно, вы не захотите использовать функцию gensim.test.utils.get_tmpfile таким образом. Он просто создает имя файла внутри системного «временного» каталога - который в некоторых случаях может меняться со временем, а в некоторых системах иногда будет автоматически очищаться от старых файлов. Если вам нужно сохранить модель для повторного использования в будущем, было бы лучше сохранить ее в явном месте под вашим контролем.

Тем не менее, местоположение должно работать нормально, если просто нужно кратко, как в тесте полного цикла, который создает, сохраняет, загружает и удаляет файлы в короткие сроки. Однако в этом случае вам следует сохранить в стороне точный путь к файлу, который был создан подпрограммой сохранения, а затем повторно использовать это точное имя - вместо того, чтобы дважды вызывать get_tmpfile().

Если Doc2Vec .save() сделано правильно, сразу же, я бы не ожидал увидеть такую ​​ошибку.

Вы уверены, что файл "model_d2v_version_002" был сохранен с использованием .save(), без ошибок? (Есть ли у вас запись в журнале времени сохранения, подтверждающего успех?)

После сохранения вы можете проверить его существование (вместе с возможными вспомогательными файлами) в выбранном месте, перечислив все файлы в этом каталог?

...