LDA 主题建模 - 训练和测试
Posted
技术标签:
【中文标题】LDA 主题建模 - 训练和测试【英文标题】:LDA topic modeling - Training and testing 【发布时间】:2012-06-25 02:50:58 【问题描述】:我已阅读 LDA,并且我了解输入一组文档时如何生成主题的数学原理。
参考资料说,LDA 是一种算法,只要给定一个文档集合,仅此而已(无需监督),就可以发现该集合中文档所表达的“主题”。因此,通过使用 LDA 算法和吉布斯采样器(或变分贝叶斯),我可以输入一组文档,作为输出,我可以获得主题。每个主题都是一组具有指定概率的术语。
我不明白的是,如果以上是真的,那为什么很多主题建模教程都在谈论将数据集分为训练集和测试集?
谁能解释一下如何使用 LDA 来训练模型,然后再用它来分析另一个测试数据集的步骤(基本概念)?
【问题讨论】:
【参考方案1】:将数据拆分为训练集和测试集是评估学习算法性能的常见步骤。对于监督学习来说,它更加明确,您在训练集上训练模型,然后查看其在测试集上的分类与真实类标签的匹配程度。对于无监督学习,这样的评估有点棘手。在主题建模的情况下,常用的性能衡量标准是perplexity。您在训练集上训练模型(如 LDA),然后您会看到模型在测试集上的“困惑”程度。更具体地说,您可以衡量测试文档的字数如何由主题所代表的字数分布来表示。
Perplexity 有利于模型或参数设置之间的相对比较,但它的数值并没有多大意义。我更喜欢使用以下有点手动的评估过程来评估主题模型:
-
检查主题:查看每个主题中可能性最高的词。它们听起来像是形成了一个有凝聚力的“主题”还是只是一些随机的词组?
检查主题分配:从训练中拿出一些随机文档,看看 LDA 分配给他们的主题。手动检查指定主题中的文档和最热门的单词。看起来主题是否真的描述了文档实际在谈论的内容?
我意识到这个过程并不像人们想象的那么美好和量化,但老实说,主题模型的应用也很少是量化的。我建议根据您应用的问题评估您的主题模型。
祝你好运!
【讨论】:
感谢gregamis 的精彩解释。对于您的第 2 点)。将主题分配给文档,您如何将主题分配给文档中的单词?您是否按顺序浏览文档中的单词并在主题中查找相同的单词并将该主题分配给该单词?那么如果你这样做,当一个词出现在多个主题中的概率很高时会发生什么?举一个非常琐碎的例子,“河流银行”和“银行账户”。 @tan:主题应该分配给文档而不是单词。也不是手动的。 @gregamis :感谢您的这篇文章。那么,我们是否只使用监督 LDA/任何其他主题建模技术来评估主题模型? 您可能可以在理想集与测试集的结果之间使用相似性度量等余弦。 有关在交叉验证中使用困惑度度量来定义 LDA 模型的最佳主题数量的工作示例,您可以参考以下答案:link【参考方案2】:使用训练数据进行评估可能会导致过度拟合的一般规则也适用于像 LDA 这样的无监督学习——尽管它并不那么明显。 LDA 优化了一些目标,即。生成概率,在训练数据上。可能在训练数据中,两个词表示一个主题,比如美国政治的“白宫”。假设这两个词只出现一次(在训练数据中)。然后,如果您对训练数据进行评估,那么任何完全依赖于它们仅指示政治而没有其他任何东西的假设的算法都会做得很好。但是,如果还有其他主题,例如“架构”,那么您可能会质疑,这是否真的是正确的学习内容。拥有一个测试数据集可以在一定程度上解决这个问题:
-
由于“白宫”关系在训练数据中似乎很少见,因此在测试数据中可能根本不会出现。如果是这样,评估会显示您的模型在多大程度上依赖于虚假关系,与更一般的关系相比,这些虚假关系实际上可能没有帮助。
“白宫”出现在测试数据中,比如“美国政治”出现一次,建筑文档中出现一次。那么它只表明“美国政治”的假设太强了,性能指标会更差,表明你的模型过度拟合。
【讨论】:
以上是关于LDA 主题建模 - 训练和测试的主要内容,如果未能解决你的问题,请参考以下文章