主题模型系列算法详解

NLP 模型之一---LDA模型

Posted by BY on March 8, 2019

要讲主题模型要从概率论中的频率学派和贝叶斯学派讲起。

频率学派和贝叶斯学派

首先频率学派的思想很简单,我们观测到的结果就是客观世界的样子,就是直接用实验观测到的数据来描述随机事件,如果试验次数足够多,那么我们观测到的数据就能够准确描述随机实验的分布,比如抛硬币实验,2次向上,8次向下,就会认为这枚硬币正面向上的概率是20%。

而贝叶斯学派的观点是,我们观测的到的不是客观世界的样子,我只是从我的角度出发去描述,从我的角度出发,带有我的先验知识,然后尽量去描述随机事件。比如我先验的认为硬币可能是均匀的,那么正面在上的概率就是50%,假设我观测到2次正面向上,8次反面向上,那么我会用我之前的先验支持去更正现在的概率,那么我可能认为(50+2)/110 = 47.2%,或者其他有另一个比我更了解这枚硬币,那么通过观测结果他认为正面向上的概率是(50000+2)/100010=49.997%。

显然贝叶斯学派的观点更适合我们从机器学习的角度建模解决问题,机器学习就是从拿到的数据中去拟合函数训练模型,而很多时候显然先验知识的加入对解决问题很有帮助。

Bernoulli分布和Bate分布

先说Bernoulli分布,就是猜测结果为两个的随机事件的概率分布,比如经典的抛硬币,它的概率分布就是一个Bernoulli分布。它的似然函数是

其中是正面向上的概率值,z是正面向上的次数,N是总次数。

再来说Beta分布,它是概率的概率分布,举个和抛硬币一样经典的例子就是棒球的击球率,均值一般是0.266,我们要建模估计一个运动员的击球率,就要用Beta分布,它表示某个概率值出现的可能性大小。它的似然函数是

其中a,b分别表示击中的次数和未击中的次数,或者前面抛硬币正面的次数和反面的次数,而上面贝叶斯学派计算概率就是用的Bate函数的期望计算方法

前面B函数是一个标准化函数,可以忽略。

前面说了,按照贝叶斯学派的观点,我们现在在已知棒球击球率分布的情况下,通过某个球员的击球实验来估计这个球员的击球率分布。

其中是先验分布,这里P(data)和我们要估计的已知数据的情况下估计击球率独立,所以可以忽略

其中已知的击球率分布是一个Beta分布,而球员击球的数据是一个Bernoulli分布,我们把Beta分布带入到贝叶斯函数的中,把Bernoulli分布的似然函数带入到,得到

我们设,然后得到一个分布。

这样一个Beta分布经过贝叶斯公式变换之后还是一个Beta分布,不改变函数本身属性的特性,叫做共轭

Multinomial分布和Dirichlet分布

和上面的分布一样,把随机结果为两个推广为多个就对应的是Multinomial分布和Dirichlet分布,他们也具有共轭性质。

比如我们常见的掷骰子,结果可能有六个,而且着六个结果概率互斥且概率和为1,发生其中一个结果X次的概率就是Multinomial分布,它的概率似然函数是:

其中n是结果的选项数目,比如骰子的话就是6,N是总实验次数,表示结果为k的数目,比如点数为3的有8次,相当于我们掷骰子实验,得到每个点数朝上的次数,去估计这个概率分布。

Dirichlet分布类似上面是Multinomial分布的共轭分布,它用来估计Multinomial分布的概率分布,他的概率似然函数为

其中n跟上面一样,结果数据,是某个结果的分布概率,比如骰子6在上面的概率1/6,而是出现i点在上的次数。

跟二项分布的均值估计方法一样,Dirichlet分布也有类似的结论,他的均值

频率版的Unigram model

这个是最简单的模型,我们假设通过如下规则生产文本

  1. 上帝只有一个骰子,这个骰子有V个面,每个面对应一个词,各个面的概率不一样
  2. 每抛一次骰子,抛出的面就对应产生一个词;如果一篇文章中有n个词,上帝独立抛n次骰子产生这n个词。

因为我们假设一篇文章相当于一个袋子,里面装了一些词,这些词的顺序信息被我们忽略了,所以被称作词袋模型

假设总词频是N,其中每个词的的发生次数是,各个面的概率记为。骰子是多面的,所以恰好对应我们前面说的Multinomial分布。

语料的概率为

对于概率的估计,频率学派的估计方法是

贝叶斯版Unigram model

假设文本是通过下面方式产生的

  1. 上帝有一个装着无穷多骰子的坛子,里面有各式各样的骰子,每个骰子有V个面。
  2. 上帝从坛子里面抽一个骰子出来,然后用这个骰子不断的抛,产生预料中需要的词。

按照贝叶斯派的思想,坛子里的骰子服从一个先验分布,而骰子确定后通过掷骰子产生文本是一个我们前面说过的Multinomial分布分布,那么他的先验分布我们的最好选择就是他的共轭分布,Dirichlet分布。

在实验已知多项式分布的情况下,我们计算喉炎分布

于是按照前面得到均值

PLSA模型

PLSA(Probabilistic Latent Semantic Analysis)假设一篇文章是有多个不同的主题组成,比如讲主题模型的,可能40%谈论概率,20%谈论计算机,20谈论语言学,10%谈论其他,而这些主题又有该主题下对应的词组成,他的生成方式为:

  1. 上帝有两种类型的骰子,一类是doc-topic骰子,每个doc-topic骰子有K个面,每个面有一个topic编号;另一类是topic-word骰子,每个骰子有V个面,每个面对应一个词
  2. 上帝一共有K个topic-word骰子,每个骰子有一个编号,对应从1到K
  3. 每篇文章生成前,上帝都要为这篇文章制造一个特定的doc-topic骰子,然后重复如下过程生成文档中的词
    • 投掷这个doc-topic骰子,得到一个topic编号z
    • 选择K个topic-word骰子中编号为z的那个,投掷这个骰子,于是得到了一个词

我们发现按照上面思路生成文章,文章和文章可以交换,一篇文章中的词也可以交换,所以仍然是一个词袋模型,游戏中K个topic-word骰子,我们记为,对于每篇文档,都会有一个特定的doc-topic骰子,所有对应骰子记为,于是第m篇文档的生成概率为

LDA模型

LDA(Latent Dirichlet Allocation)是PLSA对应的贝叶斯版本,对应的生成过程如下

  1. 上帝有两坛骰子,第一坛子对应doc-topic骰子,第二坛子装的topic-word骰子
  2. 上帝随机从第二个坛子中独立抽取K个topic-word骰子,编号从1到K
  3. 每次生成一篇文档前,上帝先从第一个坛子中随机抽取一个doc-topic骰子,然后重复投掷这个doc-topic骰子,为每个词生成一个tipic编号z,重复上面过程,生成语料中每个词的topic编号
  4. 从头到尾,对语料中的每篇文档中的每个topic编号z,选择K个topic-word骰子z中编号为z的那个,投掷这个骰子,生成topic对应的word。

其中包括两个物理过程,第一个是,这个过程表示在生成m篇文档的时候,先从第一个坛子中抽了一个doc-topic骰子,然后投掷这个骰子生成了文档中第n个词的topic编号,其中第一个过程显然是一个Dirichlet分布,而第二个过程对应的Multinomial分布,所以整体是一个Dirichlet-Multinomial共轭结构。

语料中M篇文档的生成过程相互独立,对应M个相互独立的Dirichlet-Multinomial共轭结构,从而整个语料中topic的生成概率为

对于第二个物理过程,跟上面一样,对应着Dirichlet分布,而对应着Multinomial分布,所以整体也是一个Dirichlet-Multinomial共轭结构。

语料中K个topics生成words的过程相互独立,所以对应K个相互独立的Dirichlet-Multinomial共轭结构,从而整个语料中词的生成概率为

结合上面俩式得到

写的不是很好,自己做下记录,后面有更深理解了回来在修改。


  1. LDA数学八卦