Gensim LDA:错误无法在空集合上计算 LDA(无条件)
Gensim LDA : error cannot compute LDA over an empty collection (no terms)
我遇到了与此线程相同的错误: 但所需的解决方案不同。
我正在使用 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)
非常感谢您的帮助。
只是不要使用 id2token。
您的模型应该是:
model = gensim.models.LdaModel(
corpus=corpus,
id2word=dic.id2token,
num_topics=10,
)
工作正常。谁知道怎么回事?
如 gensim LDA tutorial 所示,您需要在将 dictionary.id2token
传递给 LdaModel
之前“加载”字典。使用你的例子,代码应该是
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
以惰性方式初始化以节省内存(直到需要时才创建)。可以参考文档here.
我遇到了与此线程相同的错误:
我正在使用 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)
非常感谢您的帮助。
只是不要使用 id2token。
您的模型应该是:
model = gensim.models.LdaModel(
corpus=corpus,
id2word=dic.id2token,
num_topics=10,
)
工作正常。谁知道怎么回事?
如 gensim LDA tutorial 所示,您需要在将 dictionary.id2token
传递给 LdaModel
之前“加载”字典。使用你的例子,代码应该是
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
以惰性方式初始化以节省内存(直到需要时才创建)。可以参考文档here.