使用LDA时python中的get_coherence()函数错误

Posted

技术标签:

【中文标题】使用LDA时python中的get_coherence()函数错误【英文标题】:get_coherence() function error in python while using LDA 【发布时间】:2020-12-25 01:13:39 【问题描述】:

我在使用一致性模型时遇到问题

我的代码是

def compute_coherence_values(dictionary, corpus, texts, limit, start, step):
    coherence_values = []
    model_list = []
    for num_topics in range(start, limit, step):
        model = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=id2word, num_topics=num_topics)
        model_list.append(model)

        coherencemodel = CoherenceModel(model=model, texts=texts, dictionary=dictionary, coherence="c_v")
        coherence_values.append(coherencemodel.get_coherence())

    return model_list, coherence_values

coherence_values = []
model_list = []

# topic number
nt = pre_nt

start_ = nt;
limit_ = nt + 1;
step_ = 1;

model_list1, coherence_values1 = compute_coherence_values(dictionary=id2word, corpus=corpus, texts=texts_wi_new,
                                                        start=start_, limit=limit_, step=step_)

错误是

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\spawn.py", line 105, in spawn_main
Traceback (most recent call last):
  File "<input>", line 3, in <module>
  File "<input>", line 92, in compute_coherence_values
  File "D:\All Python\venv\lib\site-packages\gensim\models\coherencemodel.py", line 609, in get_coherence
    confirmed_measures = self.get_coherence_per_topic()
  File "D:\All Python\venv\lib\site-packages\gensim\models\coherencemodel.py", line 569, in get_coherence_per_topic
    self.estimate_probabilities(segmented_topics)
  File "D:\All Python\venv\lib\site-packages\gensim\models\coherencemodel.py", line 541, in estimate_probabilities
    self._accumulator = self.measure.prob(**kwargs)
  File "D:\All Python\venv\lib\site-packages\gensim\topic_coherence\probability_estimation.py", line 156, in p_boolean_sliding_window
    return accumulator.accumulate(texts, window_size)
  File "D:\All Python\venv\lib\site-packages\gensim\topic_coherence\text_analysis.py", line 444, in accumulate
    workers, input_q, output_q = self.start_workers(window_size)
  File "D:\All Python\venv\lib\site-packages\gensim\topic_coherence\text_analysis.py", line 478, in start_workers
    worker.start()
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
    reduction.dump(process_obj, to_child)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
BrokenPipeError: [Errno 32] Broken pipe
    exitcode = _main(fd)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\spawn.py", line 114, in _main
    prepare(preparation_data)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\spawn.py", line 225, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\multiprocessing\spawn.py", line 277, in _fixup_main_from_path
    run_name="__mp_main__")
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\runpy.py", line 261, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "C:\Users\lee96\AppData\Local\Programs\Python\Python37\Lib\runpy.py", line 231, in _get_code_from_file
    with open(fname, "rb") as f:
OSError: [Errno 22] Invalid argument: 'D:\\All Python\\<input>'

此部分出现错误

coherencemodel.get_coherence()

我使用 pycharm。 我该如何解决?

对不起 看起来您的帖子主要是代码;请添加更多细节。 看起来您的帖子主要是代码;请添加更多细节。 看起来您的帖子主要是代码;请添加更多详细信息。

【问题讨论】:

sorry 看来您的帖子主要是代码;请添加更多细节。看起来您的帖子主要是代码;请添加更多细节。看起来您的帖子主要是代码;请添加更多详细信息。 【参考方案1】:

我在使用相同的代码时遇到了同样的问题。当我从我的 Spyder IDE 运行该代码时,它运行得非常好,但是当我将它插入 Power BI 时,它会出错。到目前为止,我已经将它从函数中分离出来并循环到下面的基本行中。 LDA 和 Coherence 模型运行良好,但由于某种原因,当调用 get_coherence() 时会出错。

model = gensim.models.ldamodel.LdaModel(corpus, num_topics=5, id2word=dictionary, passes=10)

coherencemodel = CoherenceModel(model=model, texts=texts, dictionary=dictionary, coherence='c_v')

test = coherencemodel.get_coherence()

以下是我收到的错误消息的一部分:

RuntimeError: 之前已尝试启动新进程 当前进程已完成其引导阶段。

这可能意味着你没有使用 fork 来启动你的孩子 进程,而您忘记在 main 中使用正确的成语 模块:

        if __name__ == '__main__':
            freeze_support()
            ...

如果程序不运行,可以省略“freeze_support()”行 被冻结以生成可执行文件。

详情: DataSourceKind=Python 数据源路径=Python Message=Python 脚本错误。

【讨论】:

【参考方案2】:

我对此进行了更多研究,并发现了一些对我有帮助的其他文章,但最终这些错误似乎与 windows 框架中的多处理有关。

where to put freeze_support() in a Python script? https://docs.python.org/2/library/multiprocessing.html#windows

对我有用的是,我将所有代码放在以下代码行下:

if __name__ == '__main__':
    freeze_support()  
    model_list, coherence_values = compute_coherence_values(dictionary=dictionary, corpus=corpus, texts=texts, start=start, limit=limit, step=step)
    max_value = max(coherence_values)
    max_index = coherence_values.index(max_value)

    best_model = model_list[max_index]

    ldamodel= best_model

我不是 Python 中最伟大的开发人员,但我让它满足了我的需要。如果其他人有更好的建议,我全是眼睛和耳朵:)

【讨论】:

以上是关于使用LDA时python中的get_coherence()函数错误的主要内容,如果未能解决你的问题,请参考以下文章

python中的lda包怎么用

在PYTHON中使用TMTOOLKIT进行主题模型LDA评估

python LDA主题模型

使用 gensim 了解 LDA 实现

在 SciKit learn 或 Gensim (Python 3) 中调整 LDA 超参数?

Python Gensim:如何使用 LDA 模型计算文档相似度?