自然语言处理-主题模型(LDA)
本文不是站在专业的角度上去解释LDA深奥的原理,而是从科普的角度加上本人简单粗暴的理解,使从未接触过的LDA的人对其有一个通俗印象。(ps:本人不是该领域的技术人员,只是一个对其感兴趣的业外人,很多表述有不严谨之处,恳请指出,本人耐心接受,不喜勿喷)
1、概念
a、是一种无监督的贝叶斯模型
b、是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出
c、同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是档集以及指定主题的数量量k即可。
d、是一种典型的词袋模型,即它认为一篇文档是由一组词构成的一个集合,词与词之间没有顺序以及先后的关系。
以上概念摘自网络,根据我的理解,上面一段话翻译成人话就是:
①可以把文档集中的每一篇文档是什么主题以概率分布的形式给出来,形式如下图:
这样的一个作用就是只要有一篇文章,就可以知道这一篇文章被分为每一类主题的概率,如果这个数据量比较大的情况下,基本可以判断出这篇文章是什么主题。
②对于①判断文章主题的准确性,是可以通过文章训练后提高的,而用于训练的文章,也不需要提前标注文章的一些属性。
③这个模型处理的方式是把文章通过分词形成一个个词,且不考虑词与词之间顺序,就像是一个装满词语的口袋一样,称为词袋模型。
2、原理
根据上述基本可以理解为:给你一篇文章,你就能够判断这篇文章是什么主题的,好牛逼的样子,但是是怎么做到的呢?
这里又的搬出伟大的贝叶斯公司:
我们不讨论计算的步骤,反正已经经过无数大神门验证过了,我们就直接相信这个是正确的就行了,一步一步计算后得到下面公式:
P(θ | y) = P(θ | x) * P(x | y)
然后把字母换成我们的汉字,就变成了下面的公式:
P(单词 | 文档) = P(单词 | 主题) * P(主题 | 文档)
仔细一看,我们要求的不就是P(主题 | 文档)这个吗?而对于给定的一篇文章,P(单词 | 文档)是很容易统计出来的,所以我们只要有P(单词 | 主题)这样一个东西问题不就解决了吗?
所以我们训练生产LDA的目的,就是要拿到P(单词 | 主题)这样一个分布。由此引出的LDA的生成过程如下:
one、对于语料库中每一篇文档,从主题分布中选出一个主题
two、从该主题的单词分布中抽出一个单词
three、重复上述的过程,知道遍历文章的每一个单词
理解:
如上图,使用公式P(单词 | 文档) = P(单词 | 主题) * P(主题 | 文档),通过左图,也就是P(主题 | 文档)的值,和直接统计的P(单词 | 文档)的值,不断的去修正P(词|主题)的分布。当训练达到一定的程度之后,可以直接把右图也就是P(词|主题)的分布是正确的。这样就可以在使用LDA时,通过主题和词的分布,结合P(单词 | 文档) = P(单词 | 主题) * P(主题 | 文档)公式,对于一篇新的文章,可以拿到P(主题|文档)的值,也就是该文档的主题分布。
3、总结
所谓的LDA模型,实际上就是基于许多理论基础,通过大量的文档,总结出主题的单词分布,使用的时候,又根据此模型,反算出该文档的主题分布,从而判断该文档主题。
看了上文的解释之后,对LDA是不是有个最初步的印象了呢?