Gensim LDA:相干值在运行之间不可重现

问题描述 投票:0回答:1

我使用此代码https://datascienceplus.com/evaluation-of-topic-modeling-topic-coherence/来查找数据集的主题一致性。当我尝试使用相同数量的主题编写此代码时,每次运行后都会获得新值。例如,对于主题数= 10,我在运行2后得到以下值:

第一次运行主题数= 10 Coherence Score CV_1:0.31230269562327095

Coherence Score UMASS_1:-3.3065236823786064

第二次运行主题数= 10 Coherence Score CV_2:0.277016662550274

连贯分数UMASS_2:-3.6146150653617743

是什么原因?在这种不稳定的情况下,我们如何信任这个图书馆?最高的一致性值也发生了变化。

gensim lda
1个回答
2
投票

TL; DR:连贯性不是“稳定的”-e.e.在运行之间可重现 - 在这种情况下,由于基本的LDA属性。您可以通过设置随机种子和PYTHONHASHSEED=0来使LDA重现。您可以采取其他步骤来改善结果。

长版:

这不是一个错误,它是一个功能。

它不是对图书馆的信任问题,而是对所涉及方法的理解。 scikit-learn库也有一个LDA实现,他们也会在每次运行时给你不同的结果。但就其本质而言,LDA是一种生成概率方法。在这里简化一点,每次使用它时,会生成许多Dirichlet分布,然后是推理步骤。这些步骤和分布生成取决于随机数生成器。根据它们的定义,随机数生成器生成随机的东西,因此每个模型略有不同。因此,计算这些模型的一致性每次都会给你不同的结果。

但这并不意味着图书馆毫无价值。它是一个非常强大的库,被许多公司(例如亚马逊和思科)和学者(NIH,无数研究人员)使用 - 引用gensim的关于页面:

到目前为止,根据我的知识,Gensim是最强大,最有效和最轻松的软件,可以从纯文本中实现无监督的语义建模。

如果这就是你想要的,那么gensim是要走的路 - 当然不是唯一的方法(tmtoolkitsklearn也有LDA),但是路径选择非常好。话虽如此,有一些方法可以确保模型运行之间的可重复性。

Gensim再现性

设置PYTHONHASHSEED=0

来自Python documentation:“在Python 3.3及更高版本中,默认情况下启用哈希随机化。”

在您的模型规范中使用random_state

Afaik,所有gensim方法都有一种方法来指定要使用的random seed。选择您喜欢的任何数字,但默认值为零(“关闭”)并为每次重新运行使用相同的数字 - 这可确保随机数生成器中的相同输入始终产生相同的输出(gensim ldamodel documentation)

使用ldamodel.save()和ldamodel.load()来获得模型持久性

这也是一个非常有用的,省时的步骤,使您不必每次启动时都重新运行模型(对于长时间运行的模型非常重要)。

优化您的模型和数据

这在技术上并不能使您的模型完全可重复,但即使没有随机种子设置,如果增加iterationsor passes,您将看到您的模型表现更好(以计算时间为代价)。预处理也会产生很大的不同,并且本身就是一门艺术 - 你选择引理或干预,你为什么这样做?这一切都会对输出和解释产生重要影响。

警告:你必须只使用一个核心

多核方法(LdaMulticore和分布式版本)永远不会100%可重复,因为操作系统处理多处理的方式。

© www.soinside.com 2019 - 2024. All rights reserved.