LDA 主题模型性能 - scikit-learn 的主题一致性实现

Posted

技术标签:

【中文标题】LDA 主题模型性能 - scikit-learn 的主题一致性实现【英文标题】:LDA Topic Model Performance - Topic Coherence Implementation for scikit-learn 【发布时间】:2019-02-05 17:58:29 【问题描述】:

我有一个关于测量/计算 scikit-learn 中构建的 LDA 模型的主题连贯性的问题。

主题一致性是衡量给定 LDA 主题模型的人类可解释性的有用指标。 Gensim 的CoherenceModel 允许为给定的 LDA 模型计算主题连贯性(包括几个变体)。

我有兴趣利用 scikit-learn's LDA 而不是 gensim's LDA 来简化使用和文档(注意:我想避免使用 gensim 来 scikit-learn 包装器,即实际上利用 sklearn 的 LDA )。根据我的研究,似乎没有与 Gensim 的 CoherenceModel 等效的 scikit-learn。

有没有办法:

1 - 将 scikit-learn 的 LDA 模型输入到 gensim 的 CoherenceModel 管道中,通过手动将 scikit-learn 模型转换为 gensim 格式或通过 scikit-learn 到 gensim 包装器(我见过包装器反过来)来生成主题连贯性?

或者

2 - 从 scikit-learn 的 LDA 模型和 CountVectorizer/Tfidf 矩阵手动计算主题连贯性?

我在网上对此用例的实现进行了大量研究,但没有看到任何解决方案。我唯一的线索是科学文献中记录的方程式。

如果有人对任何类似的实现有任何了解,或者如果您能指出我为此创建手动方法的正确方向,那就太好了。谢谢!

*旁注:我知道在 scikit-learn 中可以使用困惑度和对数似然来进行性能测量,但从我所阅读的内容来看,这些并不具有预测性。

【问题讨论】:

我没有直接回答你的问题。但是,为什么不直接使用 gensim 来拟合新的 LDA 模型呢?我在 scikit-learn 中没有使用 LDA 的经验,但我知道 gensim 非常快速且好用 老实说,当语料库变得非常大并且您要求 50 多个主题时,Gensim 自己的 LDA 并没有那么快。它的结果也往往比 MALLET 的结果差。我和作者有同样的问题。 【参考方案1】:

将 scikit-learn 的 LDA 模型输入到 gensim 的 CoherenceModel 管道中

据我所知,没有“简单的方法”可以做到这一点。您必须手动重新格式化 sklearn 数据结构以与 gensim 兼容。我自己没有尝试过,但这让我觉得这是一个不必要的步骤,可能需要很长时间。您可能想查看 gensim-sklearn-wrapper 的旧 Python 2.7 尝试,但它似乎已被弃用 - 也许您可以从中获得一些信息/灵感。

从 scikit-learn 的 LDA 模型和 CountVectorizer/Tfidf 矩阵手动计算主题连贯性?

您需要的向量的汇总可以通过循环轻松实现。您可以找到“手册”coherence calculation for NMF 的代码示例。当然,计算取决于具体的度量,但 sklearn 应该很容易返回您分析所需的数据。

资源

我不清楚您为什么要断然排除 gensim - 主题连贯性管道非常广泛,并且存在文档。

例如,请参阅这三个教程(在 Jupyter 笔记本中)。

Demonstration of the topic coherence pipeline in Gensim Performing Model Selection Using Topic Coherence Benchmark testing of coherence pipeline on Movies dataset

可以在这篇论文here中找到几种相干性度量的公式。

【讨论】:

以上是关于LDA 主题模型性能 - scikit-learn 的主题一致性实现的主要内容,如果未能解决你的问题,请参考以下文章

文本主题模型之LDA LDA求解之变分推断EM算法

lDA主题模型最少需要多少数据

LDA主题建模

NLP系列(三)LDA主题模型

python LDA主题模型

文本主题模型之LDA LDA求解之变分推断EM算法