gensim/models/ldaseqmodel.py:217:运行时警告:除以double_scalars中遇到的零



/Users/Barry/anaconda/lib/python2.7/site-packages/gensim/models/ldaseqmodel.py:217:运行时警告:除以double_scalars中遇到的零 收敛 = np.fabs((绑定 - old_bound)/old_bound)

#dynamic topic model
def run_dtm(num_topics=18):
docs, years, titles = preprocessing(datasetType=2)
#resort document by years
Z = zip(years, docs)
Z = sorted(Z, reverse=False)
years_new, docs_new = zip(*Z)
#generate time slice
time_slice = Counter(years_new).values()
for year in Counter(years_new):
print year,' --- ',Counter(years_new)[year]
print '********* data set loaded ********'
dictionary = corpora.Dictionary(docs_new)
corpus = [dictionary.doc2bow(text) for text in docs_new]
print '********* train lda seq model ********'
ldaseq = ldaseqmodel.LdaSeqModel(corpus=corpus, id2word=dictionary, time_slice=time_slice, num_topics=num_topics)
print '********* lda seq model done ********'
ldaseq.print_topics(time=1)

嘿伙计们,我正在使用 gensim 包中的动态主题模型进行主题分析,按照本教程进行操作,https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/ldaseqmodel.ipynb,但是我总是收到相同的意外错误。谁能给我一些指导?我真的很困惑,甚至认为我已经尝试了一些不同的数据集来生成语料库和字典。 错误是这样的:

/Users/Barry/anaconda/lib/python2.7/site-packages/gensim/models/ldaseqmodel.py:217:运行时警告:除以double_scalars中遇到的零 收敛 = np.fabs((绑定 - old_bound)/old_bound)

np.fabs错误意味着它遇到了 NumPy 错误。你正在使用哪些NumPy和gensim版本?

NumPy不再支持Python 2.7,Ldaseq在2016年被添加到Gensim中,所以你可能没有兼容的版本。如果您将 Python 3+ 教程重新编码为 2.7 变体,您显然对版本差异有所了解 - 尝试在 3.6.8 环境中运行它(无论如何,您将不得不在某个时候升级,2020 年是 Python 本身 2.7 支持的终结)。这可能已经有所帮助,我已经完成了本教程,并且没有遇到我自己的数据。

话虽如此,我之前在运行LdaMulticore时遇到过同样的错误,它是由空语料库引起的。

与其在函数中完全运行代码,不如尝试逐行浏览代码(或查看 DEBUG 级别日志)并检查输出是否具有预期的属性:例如,您的语料库不为空(或包含空文档)?

如果发生这种情况,请修复预处理步骤并重试 - 这至少帮助了我并帮助解决了邮件列表中的相同 ldamodel 错误。

PS:不发表评论,因为我缺乏声誉,请随意编辑。

这是ldaseqmodel.py本身的源代码的问题。 对于最新的gensim软件包(版本 3.8.3),我在第 293 行收到相同的错误:

ldaseqmodel.py:293: RuntimeWarning: divide by zero encountered in double_scalars
convergence = np.fabs((bound - old_bound) / old_bound)

现在,如果您浏览代码,您将看到以下内容: 在此处输入图像描述

您可以看到,在这里他们将绑定old_bound之间的差异除以old_bound(从警告中也可以看到)

现在,如果您进一步分析,您将看到在第 263 行,old_bound初始化为,这是您遇到除以零警告的主要原因。

在此处输入图像描述

为了进一步的信息,我在第 294 行放了一个打印语句:

print('bound = {}, old_bound = {}'.format(bound, old_bound))

我收到的输出是:在此处输入图像描述

因此,在一行中,您收到此警告是因为包的源代码ldaseqmodel.py而不是因为任何空文档。尽管如果您不从语料库中删除空文档,您将收到另一个警告。因此,我建议如果您的语料库中有任何空文档,请删除它们,然后忽略上述除以零的警告。

相关内容

最新更新