文本建模之Unigram Model,PLSA与LDA

时间:2024-04-13 18:27:26

LDA(Latent Dirichlet Allocation)是一个优美的概率图模型,可以用来寻找文本的主题。最近系统的学习了一下这个模型,主要参考了《LDA八卦》和July的博客《通俗理解LDA主题模型》。本文主要对文本建模进行梳理,其中的涉及的数学知识将在另外的博客中讲解。

1、Unigram Model

1.1、频率学派

Unigram Model是最简单的文本模型,认为一篇文档的生成过程是从一个词袋(bag of words)中不断取词的过程。

  1. 上帝只有一枚骰子,这个骰子有V面,每一面对应一个词,各面出现概率不一;
  2. 上帝每抛一次骰子,抛出的面就对应产生一个词;如果要生成一篇包含n个词的文档,只需要独立抛骰子n次。

这个模型中唯一需要确定的是骰子每一面(也就是每个词)发生的概率,记为p=(p1,p2,,pV)。因为每次抛骰子是独立的,因此一篇包含N个词的文档的生成概率为:

p(w)=p(w1,w2,,wN)=n=1Np(wn)

因为各语料相互独立,所以语料库M篇文档的生成概率是:

p(W)=p(w1)p(w2)p(wM)=m=1Mn=1Np(wmn)

wmn表示第m篇文档中第n个词。假设语料中总的单词数目为N,V个词中每个词产生次数为ni,有n=(n1,n2,,nV)n1+n2++nV=N满足多项式分布

p(n)=Multi(n|p,N)=(Nn)v=1Vpvnv

此时,语料相当于是V个单词在N次取值试验组合中的一种,所以

p(W)=v=1Vpvnv

下面就是要通过观测到的语料去估计每个单词产生概率p。按照频率学派的观点(参数虽然未知,但是其取值是固定的),可以采用最大似然估计,于是参数p的估计值是

pv^=nvN

其图模型为

文本建模之Unigram Model,PLSA与LDA

方框表示重复,图中灰色圆圈的w表示可观测变量,N表示一篇文档中包含N个单词,M表示生成M篇文档。

1.2、贝叶斯学派

但是按照贝叶斯学派的观点,参数p不仅未知,且其取值也未定,也就是说骰子不是唯一固定的,它也是一个随机变量,在生成文本之前,使用哪个骰子是不确定的。所以按照贝叶斯学派的观点,文本生成过程如下:

  1. 上帝有一个装有无数骰子的坛子,里面每个骰子有V面;
  2. 每次上帝从坛子中取出一个骰子,然后不断的抛这枚骰子,产生语料中所有的词。

坛子中骰子p服从一个概率分布p(p),这个分布称为参数p的先验分布。此时对应的概率图模型如下:
由于我们不知道上帝使用了哪一枚骰子,所以每一枚骰子都有可能依据概率p(p)被选中,在使用该骰子时语料产生的概率是条件概率p(W|p),所以最终语料产生的概率为:

p(W)=p(W|p)p(p)dp

由上面1.1的推导,p(n)符合多项式分布,也就可以近似认为p(W|p)符合多项式分布,所以先验分布的一个比较好的选择是多项式分布的共轭先验分布(共轭先验分布等分布函数内容将会在另外的博客讲解),即Dirichlet分布Dir(p|α)Dirichlet先验+多项式分布的数据后验分布为Dirichlet分布,所以参数p的后验分布为Dir(p|n+α)。进一步,我们可以计算出语料的产生概率为:

p(W|α)=p(W|p)p(p|α)dp=v=1VpvnvDir(p|α)dp=v=1Vpvnv1Δ(α)v=1Vpvαv1dp=1Δ(α)v=1Vpvαv+nv1dp=Δ(n+α)Δ(α)

贝叶斯学派下,对应的概率图模型如下:

文本建模之Unigram Model,PLSA与LDA

此处N表示语料库中总共包含N个词。

2、PLSA

Unigram Model将一篇文档的生成过程简单地看作是从词袋中不断取词的过程显然于人类在写文章时遣词造句的过程存在较大差距。通常,我们在写文章时,首先会确定文章所包含的主题,然后根据主题选择相应的单词。
基于以上直观想法,Hofmann在1999年提出了PLSA(Probabilistic Latent Semantic Analysis)模型。Hofmann认为一篇文档由多个主题混合而成,每个主题都是词汇上的概率分布,文档中每个单词都是先确定一个主题后,然后在该主题下生成。此时文本生成过程如下:

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

对应的概率图模型如下:

文本建模之Unigram Model,PLSA与LDA

d和w是可观测到的变量。
在以上游戏规则下,文档之间是独立可交换的,同一个文档中的单词也是可交换的,所以还是一个词袋模型。第m篇文档dm中词wj的生成概率为

p(wj|dm)=k=1Kp(wj|zk)p(zk|dm)p(wj,dm)=p(dm)k=1Kp(wj|zk)p(zk|dm)

其中z=(z1,z2,,zk)表示生成这篇文章所采用的doc-topic骰子中每个topic的概率。第m篇文档dm的生成概率为

p(w|dm)=i=1np(wi,dm)=v=1Vp(wv,dm)n(wv,dm)

注意wiwv的区别,wi表示一篇包含n个单词的文档中第i个位置是单词wiwv表示词汇集合中的词wv。整个语料的生成概率为

p(W|D)=m=1Mv=1Vp(wv,dm)n(wv,dm)

其中,n(wv,dm)表示在文档dm中单词wv的词频。同样采用最大似然估计,整个语料库的似然函数如下

logp(W|D)=m=1Mv=1Vn(wv,dm)logp(wv,dm)=m=1Mv=1Vn(wv,dm)logp(dm)k=1Kp(wv|zk)p(zk|dm)=m=1Mv=1Vn(wv,dm)(logp(dm)+logk=1Kp(wv|zk)p(zk|dm))

现在,通过最大化这个对数似然函数就能求解参数p(wv|zk)p(zk|dm),对于这种含有隐变量的参数估计,可以采用EM算法(EM算法等参数估计方法将在另外博客讲解)。

3、LDA

PLSA中认为每一篇文档中每个词的主题仅由唯一一个doc-topic分布生成,语料中每个topic对应的topic-word分布也是唯一固定的。这显然不符合贝叶斯学派的观点,因此LDA(Latent Dirichlet Allocation)在PLSA的基础上加入了贝叶斯框架,将其改造成贝叶斯版本。此时LDA生成文档的过程如下:

  1. 上帝有两个坛子,一个坛子装的是doc-topic骰子,一个坛子装的是topic-word骰子;
  2. 上帝随机从topic-word坛子中独立取出K个topic-word骰子,编号为1到K;
  3. 每次生成一篇新文档前,上帝先从第一个坛子中随机抽取一个doc-topic骰子,然后重复如下过程生成文档中的词
    1. 投掷这个doc-topic骰子,得到一个编号为k的topic;
    2. 选择K个topic-word骰子中编号为k的那个,投掷这枚骰子,生成一个词。

对应的概率图模型如下:

文本建模之Unigram Model,PLSA与LDA

图中红色的框表示语料级,黄色的框表示文档级,绿色的框表示单词级,灰色的w表示可观测变量,θ表示一篇文档的主题分布,φ表示词分布(topic-word分布),α是主题分布的先验分布(即Dirichlet分布)的参数,β是词分布的先验分布(即Dirichlet分布)的参数,K是主题数目,N是一篇文档中单词数目,M是文档数目。
在上面的分析中,我们都是一篇文档一篇文档的处理,其中有一些步骤是可以交换的,我们可以先生成语料中每个单词的主题,然后根据每个单词的主题,生成最终单词,此时过程如下:

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

因为M篇文档的生成过程相互独立,所以M篇文档会对应M个独立的Dirichlet-Multinomial结构,下图αθmzm表示生成第m篇文档中所以词的topic,显然αθm对应于Dirichlet分布,θmzm对应于Multinomial分布,因此参数θm的后验分布仍然是Dirichlet分布。

文本建模之Unigram Model,PLSA与LDA

zm表示第m篇文档对应的主题向量,有zm=(n1,m,n2,m,,nK,m)zk,m表示第m篇文档中主题k的数量。第m篇文档在主题分布θm给定的情况下,主题向量zm的概率为

p(zm|θm)=k=1Kθk,mnk,m

故第m篇文档的主题向量zm的生成概率为所有可能的主题分布下zm的概率的累积

p(zm|α)=p(zm|θm)p(θm|α)dθm=p(zm|θm)Dir(θm|α)dθm=k=1Kθk,mnk,m1Δ(α)k=1Kθk,mαk,m1dθm=1Δ(α)k=1Kθk,mnk,m+αk1dθm=Δ(nm+α)Δ(α)

其中,nm=(n1,m,n2,m,,nK,m)nk,m表示第m篇文档产生的第k个topic的数量。由于语料库中M篇文档的生成过程相互独立,所以有M个相互独立的Dirichlet-Multinomial共轭分布,从而整个语料库的topic生成概率为

p(z|α)=m=1Mp(zm|α)=m=1MΔ(nm+α)Δ(α)

类似的,在确定单词主题后,K个主题也会对应K个独立的Dirichlet-Multinomial共轭分布,下图βφkwk表示在第K个主题下生成按照topic-word分布生成单词的过程,显然βφk对应于Dirichlet分布,φkwk对应于Multinomial分布,因此参数φk的后验分布仍然是Dirichlet分布。

文本建模之Unigram Model,PLSA与LDA

wk表示在主题k下生成的单词的词向量,有wk=(w1,k,w2,k,,wV,k)wv,k表示主题k下生成单词wv的个数。在主题k的topic-word分布φk给定的情况下,词向量wk生成概率为

p(wk|φk)=v=1Vφv,knv,k

故词向量wk的生成概率为在给定主题k下所有可能的topic-word分布φkwk生成概率的累积

p(wk|zk,β)=p(wk|φk)p(φk|β)dφk=p(wk|φk)Dir(φk|zk,β)dφk=v=1Vφv,knv,k1Δ(β)v=1Vφv,knv,kdφk=1Δ(β)v=1Vφv,knv,k+βv1dφk=Δ(nk+β)Δ(β)

其中,nk=(n1,k,n2,k,,nV,k)nv,k表示主题k下生成单词wv的个数。因为语料中K个topic生成单词的过程相互独立,有K个独立的Dirichlet-Multinomial共轭分布,所以整个语料中单词生成概率为

p(w|z,β)=k=1Kp(wk|zk,β)=k=1KΔ(nk+β)Δ(β)

所以

p(w,z|α,β)=p(w|z,β)p(z|α)=k=1KΔ(nk+β)Δ(β)m=1MΔ(nm+α)Δ(α)

有了联合分布p(w,z|α,β),我们可以利用Gibbs Sampling采样(Gibbs Sampling采样相关的内容将在另外博客中讲解)方法对参数进行计算。
至此,我们完成了LDA模型的推导,也明白了LDA模型的由来,最重要的是理解LDA模型是PLSA模型的贝叶斯改进版,参数不仅未知而且取值不固定。

参考文献

July博客——通俗理解LDA文本模型
LDA数学八卦