我使用这段代码https://datascienceplus.com/evaluation-of-topic-modeling-topic-coherence/来查找数据集的主题一致性。当我使用相同数量的主题尝试这段代码时,每次运行后都会得到新的值。例如,对于主题数=10,在运行2之后,我得到了以下值:
主题数的第一次运行=10个一致性得分CV_1: 0.31230269562327095
一致性评分UMASS_1:-3.3065236823786064
第二次运行主题数=10个一致性得分CV_2: 0.277016662550274
一致性评分UMASS_2:-3.6146150653617743
原因何在?在这种不稳定的情况下,我们如何信任这个库?最大一致性值也发生了变化。
发布于 2019-04-14 14:36:26
TL;DR:一致性不是“稳定的”-i.e。运行之间的可重现性-在这种情况下,由于基本的LDA属性。通过设置随机种子和PYTHONHASHSEED=0,可以使LDA再生。您可以采取其他步骤,以提高您的结果。
长版本:
这不是一个bug,它是一个特性。
这不是一个信任图书馆的问题,而是对所涉及的方法的理解。scikit-learn库还有一个LDA实现,它们的实现在每次运行时也会给出不同的结果。但从本质上看,LDA是一种生成概率方法。这里简化一点,每次使用它时,都会生成许多Dirichlet分布,然后是推断步骤。这些步骤和分布生成依赖于随机数生成器。随机数发生器,根据它们的定义,会产生随机的东西,所以每个模型都略有不同。因此,计算这些模型的一致性,每次都会给出不同的结果。
但这并不意味着图书馆一文不值。它是一个非常强大的图书馆,被许多公司(例如亚马逊和思科)和学者(NIH,无数的研究人员)使用-引用gensim的“关于页面”的话:
到目前为止,Gensim是--据我所知--是实现纯文本无监督语义建模的最健壮、最高效、最无麻烦的软件。
如果这是您想要的,那么gensim就是要走的路--当然不是唯一的方法(tmtoolkit或雪橇也有LDA),但是很好的路径选择。尽管如此,还是有一些方法可以确保模型运行之间的可再生产性。
Gensim可复制性
PYTHONHASHSEED=0 集
来自Python文档:“在Python3.3和更高版本上,哈希随机化默认是打开的。”
在模型规范中使用
Afaik,所有gensim方法都有指定要使用的随机种子的方法。选择任何您喜欢的数字,但默认值为零("off"),每次重新运行时使用相同的数字--这将确保随机数生成器中的相同输入始终导致相同的输出(gensim ldamodel文件)。
使用ldamodel.save()和ldamodel.load()作为模型持久化
这也是一个非常有用的、节省时间的步骤,可以避免每次启动时都不得不重新运行模型(对于长期运行的模型非常重要)。
优化您的模型和数据
这在技术上并不能使您的模型完全可复制,但是即使没有随机的种子设置,如果您增加了iterations或passes,您也会看到您的模型表现得更好(以计算时间为代价)。预处理也有很大的不同,它本身也是一门艺术--你是选择把它弄成狐猴还是干的,你为什么要这样做?所有这些都会对产出和你的解释产生重要影响。
警告:您必须只使用一个核心
多核方法(LdaMulticore和分布式版本)从来没有100%的可重现性,因为操作系统处理多进程的方式。
https://stackoverflow.com/questions/51956153
复制相似问题