【问题标题】:gensim/models/ldaseqmodel.py:217: RuntimeWarning: divide by zero encountered in double_scalarsgensim/models/ldaseqmodel.py:217:RuntimeWarning:在 double_scalars 中遇到除以零
【发布时间】:2019-04-03 08:13:51
【问题描述】:

/Users/Barry/anaconda/lib/python2.7/site-packages/gensim/models/ldaseqmodel.py:217:RuntimeWarning:在 double_scalars 中遇到除以零 收敛 = np.fabs((bound - 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:RuntimeWarning:在 double_scalars 中遇到除以零 收敛 = np.fabs((bound - old_bound) / old_bound)

【问题讨论】:

    标签: gensim


    【解决方案1】:

    np.fabs 错误意味着它遇到了 NumPy 错误。你用的是什么 NumPy 和 gensim 版本?

    NumPy 不再支持 Python 2.7,并且 Ldaseq 已于 2016 年添加到 Gensim,因此您可能只是没有可用的兼容版本。如果您正在将 Python 3+ 教程重新编写为 2.7 变体,您显然对版本差异有所了解 - 尝试在 3.6.8 环境中运行它(无论如何,您必须在某个时候升级,2020 年即将结束来自 Python 本身的 2.7 支持)。这可能已经有所帮助,我已经阅读了本教程并且没有遇到过我自己的数据。

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

    除了在函数中完全运行您的代码之外,您是否可以尝试逐行检查它(或查看您的调试级别日志)并检查您的输出是否具有预期的属性:例如,您的语料库不是空(或包含空文档)?

    如果发生这种情况,请修复预处理步骤并重试 - 这至少对我和 helped with the same ldamodel error in the mailing list 有所帮助。

    PS:由于我缺乏声誉,所以不发表评论,请随意编辑。

    【讨论】:

      【解决方案2】:

      这是 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)
      

      现在,如果您查看代码,您将看到: enter image description here

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

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

      enter image description here

      更多信息,我在第 294 行放了一条打印语句:

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

      我收到的输出是:enter image description here

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

      【讨论】:

        猜你喜欢
        • 2019-05-08
        • 2019-09-03
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2014-03-03
        • 2016-10-13
        • 2019-04-10
        • 1970-01-01
        相关资源
        最近更新 更多