>我正在尝试加载一个保存的 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 (没有这样的文件 或目录( at java.io.FileInputStream.open0(Native Method( at java.io.FileInputStream.open(FileInputStream.java:195( at java.io.FileInputStream.(文件输入流.java:138( at cc.mallet.types.InstanceList.load(InstanceList.java:787( at cc.mallet.classify.tui.Csv2Vectors.main(Csv2Vectors.java:131( 线程"main"中的异常 java.lang.IllegalArgumentException: 无法从文件/tmp/9f371_corpus.mallet 读取实例列表 at cc.mallet.types.InstanceList.load(InstanceList.java:794( at cc.mallet.classify.tui.Csv2Vectors.main(Csv2Vectors.java:131( 回溯(最近一次调用(:文件"topic_modeling1.py",行 406,在 topic = get_label(text, id2word, first, ldamallet( 文件 "topic_modeling1.py",第 237 行,get_label 对于 i,枚举(lda[ques_vec](中的行:文件"/home/user/sjha/anaconda3/envs/conda_env/lib/python3.6/site-packages/gensim/models/wrappers/ldamallet.py",第 308 行,在getItemself.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( File "/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/mallet 导入文件 --保留大小写 --保留序列 --删除停用词 --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 喜欢将重要的模型文件(语料库等(存储在/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, ...)