【问题标题】:Gensim: How to save LDA model's produced topics to a readable format (csv,txt,etc)?Gensim:如何将 LDA 模型生成的主题保存为可读格式(csv、txt 等)?
【发布时间】:2013-06-25 14:52:15
【问题描述】:

代码的最后部分:

lda = LdaModel(corpus=corpus,id2word=dictionary, num_topics=2)
print lda

bash 输出:

INFO : adding document #0 to Dictionary(0 unique tokens)
INFO : built Dictionary(18 unique tokens) from 5 documents (total  20 corpus positions)
INFO : using serial LDA version on this node
INFO : running online LDA training, 2 topics, 1 passes over the supplied corpus of 5 documents, updating model once every 5 documents
WARNING : too few updates, training might not converge; consider increasing the number of passes to improve accuracy
INFO : PROGRESS: iteration 0, at document #5/5
INFO : 2/5 documents converged within 50 iterations
INFO : topic #0: 0.079*cute + 0.076*broccoli + 0.070*adopted + 0.069*yesterday + 0.069*eat + 0.069*sister + 0.068*kitten + 0.068*kittens + 0.067*bananas + 0.067*chinchillas
INFO : topic #1: 0.082*broccoli + 0.079*cute + 0.071*piece + 0.070*munching + 0.069*spinach + 0.068*hamster + 0.068*ate + 0.067*banana + 0.066*breakfast + 0.066*smoothie
INFO : topic diff=0.470477, rho=1.000000
<gensim.models.ldamodel.LdaModel object at 0x10f1f4050>

所以我想知道我是否能够将它生成的结果主题保存为可读格式。我试过.save() 方法,但它总是输出一些不可读的东西。

【问题讨论】:

  • 你试过正则表达式吗?我遇到了同样的事情,并注意到每个项目都像一个字符串。

标签: python lda gensim


【解决方案1】:

您可以使用pickle 模块。

import pickle
# your code
pickle.dump(lda,open(filename,'w'))
# you may load it back again
lda_copy = pickle.load(file(filename))

【讨论】:

  • 请注意,pickle 通常会写入一个文本文件,该文件虽然可读,但可能无法理解。
  • 啊。是的,我刚看到结果。你知道有什么方法可以从包中提取主题,这样生成的文本文件会更容易清理吗?
  • 抱歉,我不知道有这种方式。
  • pickle 不起作用,因为它会保存整个模型,而不是主题词......
【解决方案2】:

您只需要使用lda.show_topics(topics=-1) 或任意数量的主题(主题=10、主题=15、主题=1000....)。我通常只做:

logfile = open('.../yourfile.txt', 'a')
print>>logfile, lda.show_topics(topics=-1, topn=10)

所有这些参数和其他参数都可以在 gensim documentation 中找到。

【讨论】:

    【解决方案3】:

    以下是如何为 gensim LDA 保存模型:

    from gensim import corpora, models, similarities
    
    # create corpus and dictionary
    corpus = ...
    dictionary = ...
    
    # train model, this might takes time
    model = models.LdaModel.LdaModel(corpus=corpus,id2word=dictionary, num_topics=200,passes=5, alpha='auto')
    # save model to disk (no need to use pickle module)
    model.save('lda.model')
    

    要打印主题,有以下几种方法:

    # later on, load trained model from file
    model =  models.LdaModel.load('lda.model')
    
    # print all topics
    model.show_topics(topics=200, topn=20)
    
    # print topic 28
    model.print_topic(109, topn=20)
    
    # another way
    for i in range(0, model.num_topics-1):
        print model.print_topic(i)
    
    # and another way, only prints top words
    for t in range(0, model.num_topics-1):
        print 'topic {}: '.format(t) + ', '.join([v[1] for v in model.show_topic(t, 20)])
    

    【讨论】:

      【解决方案4】:

      .save() 为您提供模型本身,而不是主题(因此,输出不可读)。

      使用:

      with open('topic_file', 'w') as topic_file:
          topics=lda_model.top_topics(corpus)
          topic_file.write('\n'.join('%s %s' %topic for topic in topics))
      

      您将获得所有集群主题的可读文件,以及它们的相关概率。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多