Gensim LDA:error无法在空集合上计算LDA(无项)



我遇到了与此线程相同的错误:ValueError:无法在空集合上计算LDA(没有项(,但所需的解决方案不相同。

我正在和Sklearn一起写笔记本,我已经做了LDA和NMF。

我现在正尝试使用Gensim做同样的事情:https://radimrehurek.com/gensim/auto_examples/tutorials/run_lda.htm

以下是我笔记本上的一段代码(用Python编写(,内容是我正在尝试做的事情:

dic = gensim.corpora.Dictionary(texts_lem)
dic.filter_extremes(no_below=10, no_above=0.8)
corpus = [dic.doc2bow(doc) for doc in texts_lem]
model = gensim.models.LdaModel(
corpus=corpus,
id2word=dic.id2token,
num_topics=10,
)

我正在使用笔记本另一部分的现有texts_lem列表来进行Gensim LDA。我遵循指南:创建一个字典,过滤极端,创建一个语料库并将其发送到LdaModel((。

不幸的是,它不起作用,并且注释filter_extremes的行也没有帮助(这是另一个有相同错误的线程的答案(。

texts_lem是单词列表,如下所示:

[
['word', 'word', 'word', 'word'],
['word', 'word', 'word', 'word'],
['word', 'word', 'word', 'word'],
]

我的错误是:

ValueError: cannot compute LDA over an empty collection (no terms)

非常感谢你的帮助。

如gensim LDA教程所示,您需要"负载";在将CCD_ 1传递给CCD_。使用您的示例,代码应该是

dic = gensim.corpora.Dictionary(texts_lem)
dic.filter_extremes(no_below=10, no_above=0.8)
corpus = [dic.doc2bow(doc) for doc in texts_lem]   
# Make a index to word dictionary.
temp = dic[0]  # This is only to "load" the dictionary.
id2word = dic.id2token
model = gensim.models.LdaModel(
corpus=corpus,
id2word=id2word,
num_topics=10,
)

这是因为id2token以惰性方式初始化以节省内存(直到需要时才创建(。您可以参考此处的文档。

只是不要使用id2token。

您的型号应该是:

model = gensim.models.LdaModel(
corpus=corpus,
id2word=dic.id2token,
num_topics=10,
)

工作良好。谁知道发生了什么?

最新更新