1. 文本建模
我们平时所见的文档都是一个个词语构成的,但是在理解文档的时候,我们需要考虑文档主题,但是如果每个文档都需要人工理解的话代价太高,因此就产生了文本建模。文本建模的主要目的是追问我们所观察的语料库中的文本次序是怎样生成的。然后发现蕴藏于其中的主题,主题间的联系,以及主题随时间的演变,最后完成文档的自动标注。 人类所产生的文档都可以看作是一个上帝掷骰子所产生的,我们看到只是游戏的结果即产生的文档,因此在文本建模中我们想要做的就是知道掷骰子的规则。也就是我们需要知道两个问题: 1)上帝都有什么样的骰子。 2)上帝抛骰子的规则。 转化到建模中:第一个问题就是模型中都有哪些参数,第二个问题就是按照什么顺序产生文档。
2. Unigram Model
这是最简单的模型,思想也很简答,就是词典中总共有V个单词,产生过程如下:
1) 上帝只有一个骰子,总共有V个面,每个面对应一个单词;
2) 每抛一次骰子,产生一个面,就将这个面对应的单词放到文档中,这样有n个单词的文档,就掷骰子n次。
这样文档产生就遵从一个多项分布,如下图,其中p为各个面的概率向量P的产生可以根据观察到语料库中的每个词/总词数计算得到。
3. 贝叶斯Unigram Model
在贝叶斯学派看来,每一个参数也都是随机变量,因此p(也就是不同文档中词出现的频率)是不同的,其实这个想法是正确的,比如computer一词在计算机领域的文档中跟金融领域文档中出现的频率的确是不相同的。因此贝叶斯的Unigram Model算法如下:
1) 上帝有很多的骰子(可以理解成不同的领域),每个骰子都有V个面。
2) 从中选出一个骰子,然后再进行不断地抛掷,从而产生一篇文档。
这个很多的骰子也都可以看成服从某一个分布,成为p的先验分布。上面的过程对应的过程如下:这里p的先验分布可以选择的是Dirichlet分布,也就是如下图:
对应的概率模型图如下:
4. PLSA topic model
以上的unigram model存在一个比较大的问题就是主题的问题,简单的unigram model对于所有的文章都是用一个p,这显然是不合理的,也因为不可能所有的文章都是同一个主题。贝叶斯unigram model也存在一个问题就是虽然考虑了不同文章对应不同的主题,但是我们写文章的时候往往是一个大的方面包含不同的主题并且每个主题所含的比例不同。比如,写一篇关于自然语言处理方面的文章,可能包含40%语言学,30%计算机科学,30%统计学。提到概率我们会想到概率,贝叶斯,模型等词;提到计算机想到内存,硬盘,编程等词。 因此,我们写文章的常规思路是:要写一个文档(document),用几个主题(topic)描述这个文档,然后每个主题都会使用该主题中常见的词(word)组合描述。 上面的观点用PLSAPLSA(Probabilistic Latent Semantic Analysis)思想描述就是:
对应的过程为,其中doc-topic骰子记为θ,topic-word的骰子记为φ:
5. LDA topic model
同样对于贝叶斯观点来说,PLSA模型是不完美的,因为doc-topic的骰子θ和topic-word骰子φ也都是随机变量,所以必须有先验分布(个人理解就是为每篇文档对应的topic的比例是不同的,θ的先验分布就是为每一篇文档选择该片文档的topic比例的时候遵从的分布;不同的文档中的topic对应的word比例也是不同的,比如描述硬件文档中的计算机topic对应的word跟描述机器学习中的计算机topic对应的word是不同的,因此φ的先验分布就是事先规定一篇文档的topic-word比例)。因为选择topic的时候和选择word的时候都对应多项分布,因此,先验分布选择Drichlet分布。这样就得到了LDA(Latent Dirichlet Allocation)模型,描述如下:
1) α->θ->z过程,表示生成第m片文档的时候,首先遵从Dirichlet(α)选择一个doc-topic骰子θ,然后投掷生成第m个文档的第n个词的主题z。
2) β->φ->w过程,表示遵从Dirichlet(β)分布,利用k次生成K个topic-word骰子,然后在第一步生成的主题z基础上,选择地n个topic-word骰子生成单词w。
6. LDA训练以及应用
由于gibbs采样没学习,但是为了保持完整性,因此这里就简单给出算法流程,以后有机会再详细描述。 1) 训练流程2) 应用流程
主要参考《LDA数学八卦.pdf》整理,省略了复杂的数学推导过程,主要阐述思想。