当前位置:   article > 正文

LDA的直观解释_lda结果怎么看

lda结果怎么看

缘起

这篇文章的起源是当年看LDA的推导,开始的时候觉得整个数学推导太复杂了,特别是从概率建模推导出Gibbs Sampling演化公式的过程,感觉不太对我的口味了,我更喜欢从自演化的角度来理解,所以就自己尝试折腾一个“Topic Model”。结果在折腾完之后,和LDA的结果进行对比,神奇地发现基本是一致的。
可惜后来发现其实别人也从LDA的推导结果中观察出了这个演化规则了。要是我看得更认真一点的话,直接就能看到这个结论了。不过反过来想,既然我不愿意顺着别人的思路来推导这个模型,自然也不会认真地观察最终的结论,所以最终还是要靠这个方法才能得到LDA的直观理解。

大致介绍一下LDA。LDA是文本分析里面一个很有名的topic
model,它基于一个简单的词袋模型,通过概率建模,得到文档和词汇的主题分布。这个模型很为人称道的一个特点,是它的数学推导是比较优雅的,由给定的先验Dirichlet分布,得到文档生成的似然函数,然后得到Gibbs
Sampling收敛时的分布,就是topic的对应分布。LDA在前些日子还是挺流行的,网络上好的介绍文章很多,比如这个blog,新浪的同学写的LDA漫游指南,还有腾讯的LDA数学八卦,都有很详细的推导过程。

以下就是我折腾这个“Topic Model”的过程。

直观topic model的思路

最简单的想法,当然就是基于聚类的思想,本质上LDA也是一种聚类,比如GMM也是通过概率模型得到似然函数来实现聚类的。同时LDA已经给我们提供了非常好的训练方法了,那就是Gibbs Sampling,可以简单地把它理解为一种迭代算法,或者本质一点就是将系统演化到热力学平衡态的方式,Markov模型的稳态对应的就是热力学平衡态。那么这就是一个典型的Ising model,我们现在要做的事情非常简单,就是给出一些更直观的演化规则,也就是每个词每一次应该如何决定跳转到哪个topic

在思考规则之前,先简化一下问题,方便验证新的规则是否能得到合理的topic分布。同时还应该找个标准的LDA实现,跟标准结果进行对比。

问题的极端版本

这里先处理极端版本,给定3篇文档,9个词,每个文档拥有3个词,每个词只属于一篇文档,用简单的词项向量来表示文档如下


d1 = [(1, 10.0), (2, 10.0), (3, 10.0)]
d2 = [(4, 10.0), (5, 10.0), (6, 10.0)]
d3 = [(7, 10.0), (8, 10.0), (9, 10.0)]

1-9就是词id,后面的10是词的词频。这里权重统一取10是为了后面拓展对比。虽然这里每个文档出现多次的同一个词抽象成了词频,对实际上在训练的时候,是应该每个词(不同位置算两个)单独跳转的。

非常显然,对于这种情况,如果设定topic数目为3,最合理的topic分布是每篇文章完全1个topic,每个词也完全对应一个topic。(如果topic数目设为4呢?理想的情况当然是还是只有3个topic是有意义的,比如前面讨论cluster算法的鲁棒性,这里暂不考虑这个问题)

标准LDA结果

这里的标准LDA实现用了gensim,代码和结果如下
测试代码

corpus = [[(1, 10.0), (2, 10.0), (3, 10.0)],
          [(4, 10.0), (5, 10.0), (6, 10.0)],
          [(7, 10.0), (8, 10.0), (9, 10.0)]
          ]
model = gensim.models.LdaModel(corpus, num_topics=3, update_every=0, passes=20)
print 'topic 0:', model.print_topic(0)
print 'topic 1:', model.print_topic(1)
print 'topic 2:', model.print_topic(2)
for i in range(1, 10):
    print 'word', i, model.get_term_topics(i)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

输出结果(事实上&#x

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/195605
推荐阅读
相关标签
  

闽ICP备14008679号