【问题标题】:Gensim mallet bug? Fails to load the saved model more than onceGensim槌虫?多次加载保存的模型失败
【发布时间】:2019-01-17 23:56:57
【问题描述】:

我正在尝试加载已保存的 gensim lda mallet:

 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) 线程“主”java.lang.IllegalArgumentException 中的异常: 无法从文件 /tmp/9f371_corpus.mallet 中读取 InstanceList 在 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 对于我,枚举中的行(lda [ques_vec]):文件“/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 行,在转换输入 check_output(args=cmd, shell=True) 文件 "/home/user/sjha/anaconda3/envs/conda_env/lib/python3.6/site-packages/gensim/utils.py", 第 1806 行,在 check_output 中 引发错误 subprocess.CalledProcessError: Command '/home/user/sjha/projects/topic_modeling/mallet-2.0.8/bin/mallet 导入文件 --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 的 mallet 包装器中的某种错误?

【问题讨论】:

标签: python gensim lda topic-modeling mallet


【解决方案1】:

mallet 喜欢在 /tmp 中存储重要的模型文件(语料库等),如果前缀未设置,然后当 /tmp 被清除(例如,通过重新启动)时,它会抛出一个合适的结果,因为它需要运行这些文件。删除模型并重新运行算法并不能解决它-您首先必须重新安装 gensim...

例如

conda uninstall gensim
conda install gensim

或您喜欢的任何安装管理器。 然后删除您保存的模型(对不起,他们的语料库等已经消失了......)

重要:在重新运行之前,您需要在初始化mallet时显式设置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, ...)

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多