Gensim:如何从保存的 lda 模型中加载语料库?
Gensim: How to load corpus from saved lda model?
当我保存 LdaModel lda_model.save('model')
时,它保存了 4 个文件:
model
model.expElogbeta.npy
model.id2word
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 而不是从语料库中重新创建字典。
当我保存 LdaModel lda_model.save('model')
时,它保存了 4 个文件:
model
model.expElogbeta.npy
model.id2word
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 而不是从语料库中重新创建字典。