使用gensim.models.LdaMallet和gensim.models.LdaModel有什么区别?我注意到参数并不完全相同,我想知道什么时候应该使用一个参数而不是另一个参数?
发布于 2020-11-13 18:27:38
TL;DR:两者都是潜在Dirichlet分配的两个完全独立的实现。如果您只是想尝试LDA,并且对Mallet的特殊功能不感兴趣,请使用gensim。
gensim.models.LdaModel是在gensim中实现的LDA的单核版本。在gensim (gensim.models.ldamulticore)中也有并行的LDA版本。两种Gensim实现都使用在线变分贝叶斯(VB)算法进行潜在狄利克雷分配,如Hoffman et al. 1中所述。
Gensim算法(不限于LDA)是独立于内存的w.r.t。语料库大小(可以处理大于RAM的输入、流式输入、核心外输入)。
Gensim还为流行的工具Mallet (Java)和Vowpal Wabbit (C++)提供了包装器。
gensim.models.wrappers.LdaVowpalWabbit使用与Gensim的LdaModel基于1的相同的在线变分贝叶斯(VB)算法。
gensim.models.wrappers.LdaMallet使用optimized Gibbs sampling algorithm进行潜在狄利克雷分配2。这就是不同参数的原因。然而,大多数参数,例如主题的数量,α和(b)eta)在两个算法之间共享,因为两个算法都实现了LDA。
两个包装器(gensim.models.wrappers.LdaVowpalWabbit和gensim.models.wrappers.LdaMallet)都需要安装相应的工具(独立于gensim)。因此,gensim更容易使用。
除此之外,尝试不同的实现,看看哪种实现适合您。
参考文献
1霍夫曼,马修,弗朗西斯·R·巴赫和大卫·M·布莱伊。“潜在dirichlet分配的在线学习。”神经信息处理系统的进展。2010年。
2姚,利明,大卫米诺和安德鲁McCallum。“在流式文档集合上进行主题模型推断的有效方法。”第15届ACM SIGKDD知识发现和数据挖掘国际会议论文集。2009年。
https://stackoverflow.com/questions/62581874
复制相似问题