推断 gensim 的 LDA 的主题数量 - perplexity、CM、AIC 和 BIC

机器算法验证 aic 主题模型 潜在狄利克雷分配 潜类 困惑
2022-04-04 10:02:38

在努力确定最佳主题数量的过程中,我对如何解释 LDA 在不同主题数量下的困惑波动感到困惑。另外,我想知道如何使用 gensim LDA 模型实现 AIC/BIC。

我正在从sklearn导入 20 个新闻组数据集:

from sklearn.datasets import fetch_20newsgroups;

根据 sklearn 推荐删除元数据,并将数据拆分以使用 sklearn 进行测试和训练(subset参数)。

我使用数据的训练子集训练了 35 个具有不同 k 值的 LDA 模型,主题数量从 1 到 100 不等。之后,我使用 gensim 的多核 LDA 函数估计了模型的每个单词的困惑度log_perplexity,使用测试保持语料库::

DLM_testCorpusBoW = [DLM_fullDict.doc2bow(tstD) for tstD in testData];    
PerWordPP = modelLDA.log_perplexity(DLM_testCorpusBoW);

最后,请记住,对于使用的数据集,真实 k 为20,困惑度数字是令人吃惊的负面数字:

在此处输入图像描述

此外,我实现了Topic Coherence Models,结果信息量不是很大,波动很大:

在此处输入图像描述 在此处输入图像描述

具有负困惑显然是由于 Gensim 自动将无限小概率转换为对数标度,但即使需要较低的困惑,下限值表示恶化(根据this ,因此困惑的下限值随着我的图中的主题数量更多,但我们希望通过更大的 k(此处)来改善困惑度。

那么,这些数字看起来合乎逻辑吗?我也想实现 AIC 和 BIC,但是为此我需要模型的SSE,我怎样才能使用 gensim 获得它?或者这些措施是否以某种方式实施?

1个回答

直观地反击,该log_perplexity函数似乎没有输出perplexity毕竟(函数的文档对我个人来说还不够清楚),但有可能bound因此,它必须在困惑度的下界方程中使用(取自这篇论文——Hoffman 、Blei 和 Bach在线学习潜在狄利克雷分配):

perplexity(ntest,λ,α)exp{(iEq[logp(nitest,θi,zi|α,β)]Eq[logq(θi,zi)])/(i,wniwtest)}

即,

perplexity(ntest,λ,α)ebound

有些人喜欢用2代替e在上面的等式中。

用于计算AICBIC,通常需要模型的贝叶斯似然,不一定是SSE,尤其是在主题建模环境中。

最后,至于UMass相干性度量,据我所知,它还没有用于 LDA 的模型选择场景中,但是我得到了急剧下降k=20根据 20 个新闻组数据集的适当主题数量)令人鼓舞。然而,主题连贯性度量应该接近于零,因此急剧下降并不是一种改进,而是主题连贯性(意义或可解释性)的恶化。