Загружать Doc2Ve c без векторов документов только для infer_vector - PullRequest
0 голосов
/ 22 апреля 2020

У меня большая модель Gensim Doc2ve c, мне нужно только определять векторы, пока я загружаю векторы обучающих документов из другого источника. Можно ли загрузить его как есть без большого файла 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 для выполнения логического вывода?

1 Ответ

1 голос
/ 23 апреля 2020

Я не фанат метода delete_temporary_training_data(). Это подразумевает более четкое разделение между состоянием тренировки и тем, что необходимо для последующего использования. (Логический вывод очень похож на обучение, хотя для обучения текстам не нужны векторы do c в кэше.)

Тем не менее, если вы использовали этот метод, вам не следует удаление любых побочных файлов, которые все еще были частью сохранения. Если они были написаны .save(), их будет ожидать, по имени, .load(). Они должны храниться вместе с основным файлом модели. (После вызова delete_temporary_training_data() таких файлов может быть меньше или таких файлов меньше - но все записанные данные должны быть сохранены для чтения.)

Файл syn1neg абсолютно необходим для вывода: это модель весовые коэффициенты скрытого к выводу, необходимые для выполнения новых прямых прогнозов (и, следовательно, также для обратных выводов-корректировок). Файл wv.vectors определенно необходим в режиме по умолчанию dm=1, где векторы слов являются частью вычисления do c -vector. (Это может быть необязательным в режиме dm=0, но я не уверен, что код защищен от их отсутствия - не путем обрезки в памяти и, безусловно, не против ожидаемого удаления файла вне диапазона.)

...