Ошибка молоточка Gensim? Не удается загрузить сохраненную модель более одного раза

Я пытаюсь загрузить сохраненный молоток gensim lda:

 ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, corpus=corpus, num_topics=n_topics,id2word=id2word)
 ldamallet.save('ldamallet')

При тестировании этого для нового запроса (с исходным корпусом и словарем) все выглядит нормально для первой загрузки.

ques_vec = [dictionary.doc2bow(words) for words in data_words_list]
for i, row in enumerate(lda[ques_vec]):
    row = sorted(row, key=lambda x: (x[1]), reverse=True)

При последующем выполнении того же кода выскакивает именно эта ошибка:

java.io.FileNotFoundException: /tmp/9f371_corpus.mallet (нет такого файла или каталога) в java.io.FileInputStream.open0 (собственный метод) в java.io.FileInputStream.open (FileInputStream.java:195) в java.io .FileInputStream. (FileInputStream.java:138) в cc.mallet.types.InstanceList.load (InstanceList.java:787) в cc.mallet.classify.tui.Csv2Vectors.main (Csv2Vectors.java:131) Исключение в потоке " main "java.lang.IllegalArgumentException: не удалось прочитать список экземпляров из файла /tmp/9f371_corpus.mallet в cc.mallet.types.InstanceList.load (InstanceList.java:794) в cc.mallet.classify.tui.Csv2Vectors.main (Csv2Vectors.java:131) Traceback (последний вызов последним): файл topic_modeling1.py, строка 406, в topic = get_label (text, id2word, first, ldamallet) Файл «topic_modeling1.py», строка 237, в get_label для i строка в перечислении (lda [ques_vec]): File "/home/user/sjha/anaconda3/envs/conda_env/lib/python3.6/site- packages / gensim / models / wrappers / ldamallet.py ", строка 308, в файле getitem self.convert_input (bow, infer = True)" / home / user / sjha / anaconda3 / envs / conda_env / lib / python3.6 / site-packages / gensim / models / wrappers / ldamallet.py ", строка 256, в файле convert_input check_output (args = cmd, shell = True)" / home / user / sjha / anaconda3 / envs / conda_env /lib/python3.6/site-packages/gensim/utils.py ", строка 1806, в подпроцессе check_output вызвать ошибку .CalledProcessError: Command '/home/user/sjha/projects/topic_modeling/mallet-2.0.8/bin/ файл импорта молотка --preserve-case --keep-sequence --remove-Stopwords --token-regex "\ S +" --input /tmp/9f371_corpus.txt --output /tmp/9f371_corpus.mallet.infer - use-pipe-from /tmp/9f371_corpus.mallet 'вернул ненулевой статус выхода 1.

Содержимое моего /tmp/ каталога:

/tmp/9f371_corpus.txt  /tmp/9f371_doctopics.txt /tmp/9f371_doctopics.txt.infer  /tmp/9f371_inferencer.mallet  /tmp/9f371_state.mallet.gz  /tmp/9f371_topickeys.txt

Кроме того, похоже, что файлы /tmp/9f371_doctopics.txt.infer и /tmp/9f371_corpus.txt изменяются каждый раз, когда я загружаю модель. Что могло быть возможным источником ошибки? Или это какая-то ошибка в обертке молоточка gensim?


person Saurav--    schedule 10.08.2018    source источник
comment
Есть ли прогресс по этому @saurav? У меня такая же проблема!   -  person him229    schedule 24.04.2019
comment
Код в этом вопросе решил мою проблему: stackoverflow.com/questions/55091094/   -  person user2409194    schedule 20.08.2020
comment
Код в этом вопросе решил эту проблему для меня. stackoverflow.com/questions/55091094/   -  person user2409194    schedule 20.08.2020


Ответы (1)


mallet любит хранить важные файлы модели (корпус и т. д.) в / tmp, если префикс не установлен, а затем, когда / tmp очищается (скажем, перезапуском), он срабатывает, потому что ему нужны эти файлы для запуска. удаление модели и повторный запуск алгоритма не решает проблему - сначала необходимо переустановить gensim ...

eg

conda uninstall gensim
conda install gensim

или любой другой менеджер по установке, который вы предпочитаете. затем удалите сохраненные модели (извините, их корпус и т. д. уже исчезли ...)

важно: перед повторным запуском вам необходимо явно установить параметр prefix при инициализации молотка:

prefix = {your chosen prefix dir}
if not os.path.isdir(prefix):
    os.mkdir(prefix)
ldamallet = models.wrappers.LdaMallet({all your other args}, prefix=prefix, ...)
person user108569    schedule 22.05.2019