使用gensim.models.LdaMallet
和gensim.models.LdaModel
有什么区别?我注意到参数并不完全相同,想知道什么时候应该使用一个参数而不是另一个参数?
TL;DR:两者都是潜在狄利克雷分配的两个完全独立的实现。 如果您只是想尝试LDA,并且对Mallet的特殊功能不感兴趣,请使用gensim。
gensim.models.LdaModel
是在 gensim 中实现的 LDA 的单核版本。 在gensim(gensim.models.ldamulticore
(中也有并行LDA版本。 两种Gensim实现都使用在线变分贝叶斯(VB(算法进行潜在狄利克雷分配,如Hoffman等人[1]中所述。
Gensim算法(不限于LDA(与内存无关,具有语料库大小(可以处理大于RAM,流式传输,核心外的输入(。
Gensim还为流行的工具Mallet(Java(和Vowpal Wabbit(C++(提供了包装器。
gensim.models.wrappers.LdaVowpalWabbit
使用与Gensim的LdaModel相同的在线变分贝叶斯(VB(算法[1]。
gensim.models.wrappers.LdaMallet
使用优化的吉布斯采样算法进行潜在狄利克雷分配[2]。 这就是不同参数的原因。 然而,大多数参数,例如主题的数量,alpha和(b(eta(在两种算法之间共享,因为两者都实现了LDA。
两个包装器(gensim.models.wrappers.LdaVowpalWabbit
和gensim.models.wrappers.LdaMallet
(需要安装相应的工具(独立于Gensim(。因此,Gensim 更容易使用。
除此之外,尝试不同的实现,看看什么适合你。
引用
[1] 霍夫曼、马修、弗朗西斯·巴赫和大卫·M·布莱。 "潜在狄利克雷分配的在线学习。" 神经信息处理系统的进步。2010年。
[2] Yao, Limin, David Mimno, and Andrew McCallum. "流式文档集合上主题模型推理的有效方法。" 第 15 届 ACM SIGKDD 知识发现和数据挖掘国际会议论文集。2009年。