Gensim:如何从保存的 lda 模型中加载语料库?

Gensim: How to load corpus from saved lda model?

当我保存 LdaModel lda_model.save('model') 时,它保存了 4 个文件:

  1. model
  2. model.expElogbeta.npy
  3. model.id2word
  4. model.state

想用pyLDAvis.gensim可视化题目,好像需要模型、语料和字典。我能够加载模型和字典:

lda_model = LdaModel.load('model')
dict = corpora.Dictionary.load('model.id2word')

是否可以加载语料库?怎么样?

在 gensim python 代码中,他们说忽略 expElogbeta 和状态文件。可以加载语料库,语料库是一组包含 2 个数字的列表。加载它会很复杂,我建议从原始文本数据加载语料库并使用 id2word

在这里分享这个是因为我也花了一段时间才找到答案。请注意,dict 不是字典的有效名称,我们使用 lda_dict 代替。

# text array is a list of lists containing text you are analysing
# eg. text_array = [['volume', 'eventually', 'metric', 'rally'], ...]
# lda_dict is a gensim.corpora.Dictionary object

bow_corpus = [lda_dict.doc2bow(doc) for doc in text_array]

Jireh 回答正确,但可能会混淆如何加载所有以前的 LDA 文件。我不确定为什么 gensim 保存 *.state 和 *.npy 文件(我很感激评论中的见解)。要重用以前的 LDA 模型,您需要加载 *.model 和 *.id2word 文件以及您的原始语料库。

例如,如果我在 'docs' 列中有我的文档的数据框,那么您将再次加载该数据框,因为您将需要它来重新创建您的语料库。

import pandas as pd
from gensim import corpora, models
from gensim.corpora.dictionary import Dictionary
from pyLDAvis import gensim_models

df = pd.read_csv('your_file.csv')
texts = df['docs'].values

您按如下方式加载您之前创建的字典:

dictionary = corpora.Dictionary.load('your_file.id2word')

... 然后根据字典和您的原始文本创建语料库(根据上面的数据框 ['docs'] 创建):

corpus = [dictionary.doc2bow(text) for text in texts]

之前创建的LDA模型是通过gensim加载的:

lda_model = gensim.models.ldamodel.LdaModel.load('your_file.model')

然后将这些对象输入到您的 pyLDAvis 实例中:

lda_viz = pyLDAvis.gensim_models.prepare(lda_model, corpus, dictionary)

如果您不使用 .id2word 文件,您可能 运行 遇到形状不正确的问题 (IndexError)。我在 运行 LDA 多核时遇到过这种情况,所以我使用 .id2word 而不是从语料库中重新创建字典。