如何确定LDA的主题数量?

Posted

技术标签:

【中文标题】如何确定LDA的主题数量?【英文标题】:how to determine the number of topics for LDA? 【发布时间】:2013-06-29 14:27:12 【问题描述】:

我是 LDA 的新生,我想在我的工作中使用它。但是,也出现了一些问题。

为了得到最好的表现,我想估计最好的主题数。看了《寻找科学话题》,我知道可以先计算logP(w|z),然后用一系列P(w|z)的调和平均来估计P(w|T)。

我的问题是“一系列”是什么意思?

【问题讨论】:

【参考方案1】:

很遗憾,没有硬科学可以为您的问题提供正确答案。据我所知,hierarchical dirichlet process (HDP) 很可能是获得最佳主题数量的最佳方式。

如果您正在寻找更深入的分析,this paper on HDP 报告了 HDP 在确定组数方面的优势。

【讨论】:

【参考方案2】:

一种可靠的方法是针对不同数量的主题计算主题连贯性,并选择给出最高主题连贯性的模型。但有时,最高的可能并不总是符合要求。

看到这个topic modeling example.

【讨论】:

【参考方案3】:

首先有些人使用调和平均值来寻找最佳主题数,我也尝试过,但结果并不令人满意。所以根据我的建议,如果你使用 R,那么包“ldatuning”将很有用。它有四个指标用于计算最佳参数数量。同样,基于困惑和对数似然的 V 折交叉验证也是最佳主题建模的非常好的选择。V 折交叉验证对于大型数据集来说有点耗时。您可以看到“A heuristic approach to determine a proper no.of topic在主题建模中”。 重要链接: https://cran.r-project.org/web/packages/ldatuning/vignettes/topics.html https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4597325/

【讨论】:

【参考方案4】:

设 k = 主题数

没有单一的最佳方法,我什至不确定是否有任何标准做法。

方法一: 尝试不同的 k 值,选择可能性最大的那个。

方法二: 代替LDA,看看能不能用HDP-LDA

方法三: 如果 HDP-LDA 在您的语料库上不可行(因为语料库大小),则对您的语料库进行统一采样并在其上运行 HDP-LDA,取 HDP-LDA 给出的 k 值。对于这个 k 附近的小区间,请使用方法 1。

【讨论】:

【参考方案5】:

由于我正在解决同样的问题,我只想添加 Wang 等人提出的方法。 (2019) 在他们的论文“Optimization of Topic Recognition Model for News Texts Based on LDA”中。除了提供良好的概述外,他们还提出了一种新方法。首先训练一个 word2vec 模型(例如使用 word2vec 包),然后应用能够找到密度峰值的聚类算法(例如来自 densityClust 包),然后使用找到的聚类数作为主题数LDA 算法。

如果时间允许,我会试试这个。我也想知道 word2vec 模型是否可以让 LDA 过时。

【讨论】:

LDA 是生成模型,word2vec 不是(它只是一个嵌入模型),因此后者不能使 LDA 过时。这种方法将 LDA 中指定主题数量的需要替换为 word2vec 中指定特征数量的需要。 “指定word2vec中的特征数量”是什么意思?我认为有必要指定密度峰值是否为聚类中心,否则无需进一步假设。 您需要选择维数:通常在 100 到 1000 之间 - 这是一个影响嵌入质量的参数(在一定程度上)。

以上是关于如何确定LDA的主题数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyspark(2.1.0) LdA 获取与每个文档相关的主题?

使用 Gensim 获得 LDA 模型的最佳主题数量的最佳方法是啥?

如何从 gensim 打印 LDA 主题模型? Python

如何使用 pyspark LDA 获取主题

主题分布:在python中做LDA后如何查看哪个文档属于哪个主题

如何在 LDA 模型中获取新文档的主题