在努力确定最佳主题数量的过程中,我对如何解释 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 获得它?或者这些措施是否以某种方式实施?


