我们日常生活中总是产生大量的文本,如果每一个文本存储为一篇文档, 那么每篇文丹从人的观察来说就是有序的词的序列d=(w1,w2,...wn).
统计文本建模的目的就是追问这些观察到的语料库中的词序列是如何生成的,统计学被人们描述为猜测上帝的游戏,人类产生的所有语料文本我们都可以看成是一个伟大的上帝在天堂上抛掷骰子生成的,我们观察到的只是上帝玩这个游戏的结果-词序列构成的语料,而上帝玩这个游戏的过程对我们来说是个黑盒子。所以在统计文本建模中,我们希望猜测出上帝是怎么玩这个游戏的,具体一点,最核心的两个问题是:
(1)上帝都有什么样的骰子
(2)上帝是如何抛掷这些骰子的
第一个问题表示模型中都有哪些参数,即骰子中的每一面被掷出的概率,第二个问题表示游戏规则是什么,上帝可能有各种不同类型的骰子,上帝可以按照一定的规则抛掷这些骰子从而产生词序列。
1、Unigram Model
假设我们的一个词典中共有V个词,那么最简单的Unigram模型认为上帝按照如下的游戏规则产生文本:
这个抛掷骰子的实验类似于一个多项分布,记为
那么对于一篇文档d=(w1,w2,...wn),该文档被生成的概率就是:
而文档与文档之间我们认为是独立的,所以如果语料中有多篇文档,那么该语料生成的概率是:
在Unigram Model中,我们假设了文档之间是独立可交换的,而文档中的词也是独立可交换的,所以一篇文档相当于一个袋子,里面装了一些词,而词的顺序信息就无关紧要了,这样的模型也称为词袋模型(Bag-of-words)。
此时语料的概率是:
所以,我们现在的任务就是估计模型中的参数p了,即问上帝拥有的骰子各个面出现的概率有多大,统计学家种频率派的观点,可能这样得到概率的估计值:
而对于这样的估计方法,贝叶斯统计学派的统计学家是不会同意的,他们不认为上帝只有这么一个骰子,也就是说,以上模型参数p不是唯一固定的,他们认为上帝按照以下的规则进行游戏:
上帝的这个坛子里面,骰子可以是无穷多个,有些类型的骰子数量多,有些类型的骰子数量少,所以从概率分布的角度看,坛子里面的骰子p服从一个先验概率分布:
所以,在贝叶斯学派看来,语料的概率是这样计算的:由于我们并不知道上帝到底用了哪个骰子,所以每个骰子都是可能被使用的,只是使用的概率由先验分布来决定,对每一个具体的骰子,都有一个产生语料所对应的概率,所以最终数据产生的概率就是对每一个骰子上产生的数据概率进行积分累加求和:
由于每个词是我们可以看到的,词的选择服从一个多项分布,所以对先验分布一个比较好的选择就是其对应的共轭先验分布,即Dirichlet分布:
回顾之前在共轭先验分布一节中介绍的知识:
所以在给定了先验分布,各个词出现频次的数据服从多项分布,无需计算我们就可以推导出后验分布:
所以,参数的期望为:
也就是说对于每一个参数pi,我们用下式做参数估计:
进一步,我们可以计算出文本语料产生的概率:
2、LDA Topic Model
LDA的图模型如下:
这个图模型表示法有时也称作“盘子表示法”,图中的阴影圆圈可以表示观测变量(observed variable),非阴影圆圈表示潜在变量(latent variable),箭头表示两变量间的条件依赖性(conditional dependency),方框表示重复抽样,重复次数在方框的右下角。
在上面的图中:
M代表训练语料中的文章数;
K代表设置的主题个数;
V代表训练语料库中出现的所有词的词表;
θ是一个M*K的矩阵,θm代表第m篇文章的主题分布;
Φ是一个K*V的矩阵,Φk代表编号为k的主题之上的词分布;
α是每篇文档的主题分布的先验分布Dirichlet分布的参数(也被称为超参数),θi~Dir(α);
β是每个主题的词分布的先验分布Dirichlet分布的参数(也被称为超参数),Φk~Dir(β);
w是可被观测的词.
我们仍然用上帝掷骰子的过程来解释一下上面的图模型。在LDA模型中,上帝是按照如下的规则玩文档生成的游戏的:
假设语料库中有M篇文档,所有的word和对应的topic如下所示:
使用概率图模型表示,LDA模型的游戏过程如图所示:
这个概率图可以分解为两个主要的物理过程:
理解LDA最重要的就是理解这两个物理过程,LDA模型在基于K个topic生成语料中的M篇文档的过程中,由于是bag-of-words,有一些物理过程是相互独立可交换的,由此,LDA生成模型中,M篇文档会对英语M个独立的Dirichlet-Multionmial共轭结构,K个topic会对应于K个独立的Dirichlet-Multionmial共轭结构。所以理解LDA所需要的就是理解Dirichlet-Multionmial共轭。所以,现在我们进入细节,来看看LDA模型是如何被分解为M+K个Dirichlet-Multionmial共轭结构的。
所以我们可以得到:
由于语料中M篇文档的topics生成过程相互独立,所以我们得到M个相互独立的Dirichlet-Multionmial共轭结构,从而我们可以得到整个语料中的topics生成概率:
到目前为止,我们已经得到了M个Dirichlet-Multionmial共轭结构,剩下的K个在哪呢?在上帝按照之前的规则玩LDA游戏的时候,上帝是先完全处理完成一篇文档,再处理下一篇文档。文档中每个词的生成都要抛两次骰子,第一次抛doc-topic骰子得到topic,第二次抛一个topic-word骰子得到word,每次生成每篇文档中的一个词的时候这两次抛骰子的动作是紧邻轮换进行的。如果语料中一共有N个词,则上帝共需要抛掷2N次骰子。但实际上有一些抛骰子的顺序是可以交换的,我们可以等价的调整2N次抛骰子的次序,前N次用于得到topic,后N次用于得到N个word,所以上帝在玩LDA游戏的时候,可以等价的如下进行:
以上游戏是先生成了所有词的topic,然后对每个词在给定的topic条件下生成word,在语料中所有词的topic已经生成的条件下,任何两个word的生成动作都是可交换的,于是我们把语料中的词进行交换,把具有相同topic的词放在一起:
同样,我们可以得到:
而语料中K个topics生成words的过程相互独立,所以我们得到K个相互独立的Dirichlet-Multionmial共轭结构,从而我们可以得到整个语料中词生成概率:
所以结合两个物理过程,我们得到:
3、LDA Gibbs采样公式
4、LDA Gibbs采样模型训练
有了LDA模型,我们的目标有两个:
有了Gibbs Sampling公式,我们就可以给予语料训练LDA模型,并应用训练得到的模型对新的文档进行topic语义分析,训练的过程就是通过Gibbs采样获取语料中的(z,w)的样本,而模型的所有参数都可以基于最终采样得到的样本进行估计,训练的流程如下:
有了LDA模型,对于新来的文档,我们通过如下的流程来进行文档的主题分布:
以下是在另一个博客上得到的类似的训练流程,可能更加易于大家理解: