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

Nil*_*ter 5 python-3.x lda gensim

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

\n\n
    \n
  1. models.ldaseqmodel \xe2\x80\x93 Python链接中的动态主题建模
  2. \n
  3. models.wrappers.dtmmodel \xe2\x80\x93 动态主题模型 (DTM)链接
  4. \n
\n\n

您使用哪一种,或者如果两者都使用,哪一种“更好”?换句话说,您更喜欢哪一个?

\n

小智 4

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

模型输出是否相同?

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

这两个模型之间的巨大区别:是来自blei-labdtmmodel的原始 C++ 实现的 python 包装器,这意味着 python 将运行二进制文件,而完全用 python 编写。ldaseqmodel

为什么使用 dtm 模型?

  • C++ 代码比 python 实现更快
  • 支持Gerrish/Blei 2010的文档影响模型(您的研究可能会感兴趣,请参阅本文以了解实现。

为什么使用ldaseqmodel?

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

我主要使用ldaseqmodel但那是为了方便。不过,如果有原生 DIM 支持就太好了。

你该怎么办?

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

无论如何,完整的分析可能需要几个小时,如果你让你的代码运行一整夜,那么实际差异几乎没有,毕竟,你关心它是在凌晨 3 点还是 5 点完成吗?如果运行时间很关键,我认为它将dtmmodel更有用。

对于实现示例,您可能需要查看这些笔记本:ldaseqmodeldtmmodel