使用 Gensim 进行动态主题建模/哪个代码?

Dynamic Topic Modeling with Gensim / which code?

我想使用 Blei 等人的动态主题建模。 (http://www.cs.columbia.edu/~blei/papers/BleiLafferty2006a.pdf) 包含近 3800 份专利文献的大型语料库。 有人有在 gensim 包中使用 DTM 的经验吗? 我确定了两个模型:

  1. models.ldaseqmodel – Python Link
  2. 中的动态主题建模
  3. models.wrappers.dtmmodel – 动态主题模型 (DTM) Link

你用了哪一个,如果两个都用了,哪个是"better"?换句话说,你更喜欢哪一个did/do?

这两个包都工作正常,并且在功能上几乎相同。您可能想要使用哪一个取决于您的用例。每个模型附带的功能都有细微差别,命名也有细微差别,这可能会让人有些困惑,但对于大多数 DTM 用例来说,你选择哪个并不重要。

模型输出是否相同?

不完全是。然而,它们非常非常接近相同(98% 以上)——我相信大部分差异来自生成过程中对概率的略微不同处理。到目前为止,我还没有遇到过小数点后第六位或第七位的差异具有任何重要意义的情况。解释你的模型发现的主题比一个版本为某个词找到更高的主题加载 0.00002

更重要

两个模型的最大区别:dtmmodelblei-lab 原始 C++ 实现的 python 包装器,这意味着 python 将 运行 二进制文件,而 ldaseqmodel 完全写入 python.

为什么要使用 dtmmodel?

  • C++ 代码比 python 实现更快
  • 支持来自Gerrish/Blei 2010 (potentially interesting for your research, see this paper的文档影响模型的实现。

为什么要用ldaseqmodel?

  • 更易于安装(简单 import 语句与下载二进制文件)
  • 可以使用来自预训练 LDA 模型的 sstats - 对 LdaMulticore
  • 很有用
  • 更容易理解代码的工作原理

我主要使用 ldaseqmodel 但那是为了方便。不过,原生 DIM 支持会很棒。

你该怎么办?

尝试每一个,比如说,在一个小样本集上,看看模型是什么 return。 3800 篇文档不是 庞大 语料库(假设专利不是每个都有数百页),我假设在预处理(删除停用词、图像和元数据)后你的字典不会也太大了(我认为专利中有很多标准短语和法律术语)。选择最适合您或具有您需要的功能的。

无论如何,完整的分析可能需要几个小时,如果您让您的代码 运行 过夜,实际差异不大,毕竟,您关心它是在凌晨 3 点还是凌晨 5 点完成吗?如果 运行 时间紧迫,我认为 dtmmodel 会更有用。

对于实施示例,您可能想看看这些笔记本:ldaseqmodel and dtmmodel