我想知道是否有可能——或者最佳方法是什么——以编程方式比较用Mallet创建的不同主题模型,以确定给定语料库中“最佳”拟合的模型。
API提供了一种方法来确定生成模型的对数似然。例如,请参见:#modelLogLikelihood()
据我所知,可以根据保留数据的对数似然来比较不同的模型。但这种方法似乎是计算整个模型的似然?我已经查看了源代码,但这并未能解开谜团。
所以我的问题是:上述方法的输出是否适合比较不同的主题建模算法(如Hierarchical PAM、LDA、DMR等),以找出哪种模型(理论上)最能代表语料库?
回答:
对数似然计算的意图是提供一种可跨不同模型进行比较的度量。然而,我不建议以这种方式使用它。
首先,如果你真正关心的是语言模型的预测似然,你应该使用许多更新的深度神经模型中的一种。
其次,似然对平滑参数非常敏感,因此你得到的一致差异可能只是你自己设置的产物。像分词和多词术语这样的预处理决策也可能比模型选择产生更大的影响。
第三,如果你真正对主题模型的输出感兴趣,你应该明确你从模型中想要什么,以及哪些模型特征对你的具体需求有用。我喜欢建议人们将主题模型视为制作地图而不是拟合回归。地图的最佳分辨率取决于你想去哪里。
最后,你几乎肯定会更好地选择最简单的模型。