(gensim) LdaMallet vs LdaModel?

(gensim) LdaMallet vs LdaModel?

使用gensim.models.LdaMalletgensim.models.LdaModel有什么区别?我注意到参数并不完全相同,想知道什么时候应该使用一个参数?

TL;DR:两者都是 Latent Dirichlet Allocation 的两个完全独立的实现。 如果您只是想尝试 LDA 而对 Mallet 的特殊功能不感兴趣,请使用 gensim。

gensim.models.LdaModel是在gensim中实现的LDA的single-core版本。 gensim (gensim.models.ldamulticore) 中也有并行化的 LDA 版本。 两种 Gensim 实现都使用在线变分贝叶斯 (VB) 算法进行潜在狄利克雷分配,如 Hoffman et al. [1].

中所述

Gensim 算法(不限于 LDA)是 memory-independent w.r.t。语料库大小(可以处理大于 RAM 的输入,流式处理,out-of-core)。

Gensim 还为流行的工具 Mallet (Java) and Vowpal Wabbit (C++) 提供包装器。

gensim.models.wrappers.LdaVowpalWabbit 使用与 Gensim 的 LdaModel 基于 [1].

相同的在线变分贝叶斯 (VB) 算法

gensim.models.wrappers.LdaMallet uses an optimized Gibbs sampling algorithm 用于潜在狄利克雷分配 [2]。 这就是参数不同的原因。 但是,大多数参数,例如主题数量、alpha 和 (b)eta)在两种算法之间共享,因为它们都实现了 LDA。

包装器(gensim.models.wrappers.LdaVowpalWabbitgensim.models.wrappers.LdaMallet) 需要安装相应的工具(独立于 gensim)。因此,gensim更容易使用。

除此之外,尝试不同的实施方式,看看哪种适合您。

参考资料

[1] 霍夫曼、马修、弗朗西斯·R·巴赫和大卫·布莱伊。 “潜在狄利克雷分配的在线学习。”神经信息处理系统的进展。 2010.

[2] Yao、Limin、David Mimno 和 Andrew McCallum。 “流式文档主题模型推理的有效方法 collections。”第 15 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集。 2009.