基于LDA的文本主题聚类Python实现

LDA简介

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

关键词:文档主题生成模型,无监督学习,概率模型,NLP


生成过程

对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):

1.对每一篇文档,从主题分布中抽取一个主题;

2.从上述被抽到的主题所对应的单词分布中抽取一个单词;

3.重复上述过程直至遍历文档中的每一个单词。

语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布 (multinomialdistribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。

具体推导可以参考:https://zhuanlan.zhihu.com/p/31470216


Python范例

使用到的库:jieba, gensim

为了使生成结果更精确,需要构造新词,停用词和同义词词典。

结果:

可以看到,一共分成了两类,文本库中的标题分别分成了0,1两类,即一个是体育类,一个是科技类。

需要注意的是,LDA模型是个无监督的聚类,每次生成的结果可能不同。


参考

  • https://www.jianshu.com/p/fa97454c9ffd
  • https://zhuanlan.zhihu.com/p/31470216

 

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注