LDA主题建模学习笔记

LDA主题建模相关学习资料整理

目录
  1. LDA要点
  2. 什么是LDA
  3. 相关介绍
    3.1 方法一:unigram model
    3.2 方法二:mixture of unigram
    3.3 方法三:LDA(Latent Dirichlet Allocation)
  4. LDA生成流程
    4.1 相关定义
    4.2 学习过程
  5. 参考资料

关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。

对于线性判别分析的介绍,可参考:线性判别分析LDA原理总结


1 LDA要点
  1. 一个函数:gamma函数
  2. 四个分布:二项分布、多项分布、beta分布、Dirichlet分布
  3. 一个概念和一个理念:共轭先验和贝叶斯框架
  4. 两个模型:PLSA、LDA
  5. 一个采样:Gibbs采样

(《LDA数学八卦》)


2 什么是LDA

wiki解释:LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。(所谓生成模型,就是说我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的)。 文档到主题服从多项式分布,主题到词服从多项式分布。

  1. 一种无监督的贝叶斯模型
  2. 一种主题模型,可以将文档集中的每篇文档按照概率分布的形式给出
  3. 一种无监督学习,在训练时不需要手工标注训练集,但需要文档集和指定主题的个数
  4. 一种典型的词袋模型,认为一篇文档是由一组词组成的集合,词与词之间没有顺序和先后关系

总而言之,LDA的目的就是要识别主题,即把文档—词汇矩阵变成文档—主题矩阵(分布)和主题—词汇矩阵(分布)


3 相关介绍

如何生成M份包含N个单词的文档,LatentDirichlet Allocation的文章介绍了三种方法。

参考:主题模型LDA浅析

3.1 方法一:unigram model

该模型使用下面方法生成1个文档:

For each of the N words w_n:

 Choose a word w_n ~ p(w);

其中N表示要生成的文档的单词的个数,w_n表示生成的第n个单词w,p(w)表示单词w的分布,可以通过语料进行统计学习得到,比如给一本书,统计各个单词在书中出现的概率。

在这里插入图片描述
这种方法通过训练语料获得一个单词的概率分布函数,然后根据这个概率分布函数每次生成一个单词,使用这个方法M次生成M个文档。

3.2 方法二:unigram model

unigram模型的方法的缺点就是生成的文本没有主题,过于简单,mixture of unigram方法对其进行了改进,该模型使用下面方法生成1个文档:

Choose a topicz ~ p(z);

 For each of the N words w_n:

 Choose a word w_n ~ p(w|z);

其中z表示一个主题,p(z)表示主题的概率分布,z通过p(z)按概率产生;N和w_n同上;p(w|z)表示给定z时w的分布,可以看成一个k×V的矩阵,k为主题的个数,V为单词的个数,每行表示这个主题对应的单词的概率分布,即主题z所包含的各个单词的概率,通过这个概率分布按一定概率生成每个单词。
在这里插入图片描述
这种方法首先选定一个主题z,主题z对应一个单词的概率分布p(w|z),每次按这个分布生成一个单词,使用M次这个方法生成M份不同的文档。

3.3 方法三:LDA(Latent Dirichlet Allocation)

LDA方法使生成的文档可以包含多个主题,该模型使用下面方法生成1个文档:

Chooseparameter θ ~ p(θ);

 For each ofthe N words w_n:

 Choose a topic z_n ~ p(z|θ);

 Choose a word w_n ~ p(w|z);

其中θ是一个主题向量,向量的每一列表示每个主题在文档出现的概率,该向量为非负归一化向量;p(θ)是θ的分布,具体为Dirichlet分布,即分布的分布;N和w_n同上;z_n表示选择的主题,p(z|θ)表示给定θ时主题z的概率分布,具体为θ的值,即p(z=i|θ)= θ_i;p(w|z)同上。
在这里插入图片描述
这种方法首先选定一个主题向量θ,确定每个主题被选择的概率。然后在生成每个单词的时候,从主题分布向量θ中选择一个主题z,按主题z的单词概率分布生成一个单词。
在这里插描述
从上图可以看出,LDA的三个表示层被三种颜色表示出来:

  1. corpus-level(红色):α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。

  2. document-level(橙色):θ是文档级别的变量,每个文档对应一个θ,也就是每个文档产生各个主题z的概率是不同的,所有生成每个文档采样一次θ。

  3. word-level(绿色):z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个 单词w对应一个主题z。


4 LDA生成流程

对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):

  1. 对每一篇文档,从主题分布中抽取一个主题
  2. 从上述被抽到的主题所对应的单词分布中抽取一个单词
  3. 重复上述过程直至遍历文档中的每一个单词

语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布 (multinomialdistribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。

4.1 相关定义

1、文档集合D,主题(topic)集合T。D中每个文档d看作一个单词序列 < w 1 , w 2 , . . . , w n > <w1,w2,...,wn> <w1,w2,...,wn>,wi表示第i个单词,设d有n个单词。(LDA里面称之为wordbag,实际上每个单词的出现位置对LDA算法无影响)

2、D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC),LDA以文档集合D作为输入,希望训练出的两个结果向量(设聚成k个topic,VOC中共包含m个词)

3、对每个 D D D中的文档 d d d,对应到不同Topic的概率 θ d < p t 1 , . . . , p t k > θ_d<pt1,...,ptk> θd<pt1,...,ptk>,其中, p t p_t pt表示d对应T中第i个topic的概率。计算方法是直观的, p t = n t n p_t=\frac{n_t}{n} pt=nnt,其中 n t n_t nt表示 d d d中对应第 i i i个topic的词的数目, n n n d d d中所有词的总数。

4、对每个T中的topict,生成不同单词的概率 φ t < p w 1 , . . . , p w m > φ_t<pw1,...,pwm> φt<pw1,...,pwm>,其中, p w p_w pw表示t生成VOC中第 i i i个单词的概率。计算方法同样很直观, p w = N w N p_w=\frac{N_w}{N} pw=NNw,其中 N w N_w Nw表示对应到topict的VOC中第 i i i个单词的数目, N N N表示所有对应到topic的单词总数。

LDA的核心公式如下:
p ( w ∣ d ) = p ( w ∣ t ) ∗ p ( t ∣ d ) p(w|d)=p(w|t)*p(t|d) p(wd)=p(wt)p(td)
直观的看这个公式,就是以Topic作为中间层,可以通过当前的 θ d θ_d θd φ t φ_t φt给出了文档d中出现单词w的概率。其中 p ( t ∣ d ) p(t|d) p(td)利用 θ d θ_d θd计算得到, p ( w ∣ t ) p(w|t) p(wt)利用 φ t φ_t φt计算得到。
实际上,利用当前的 θ d θ_d θd φ t φ_t φt,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的 p ( w ∣ d ) p(w|d) p(wd),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响 θ d θ_d θd φ t φ_t φt

4.2 学习过程

LDA算法开始时,先随机地给θd和φt赋值(对所有的d和t)。然后上述过程不断重复,最终收敛到的结果就是LDA的输出。再详细说一下这个迭代的学习过程:
1、针对一个特定的文档ds中的第i单词wi,如果令该单词对应的topic为tj,可以把上述公式改写为:
p j ( w i ∣ d s ) = p ( w i ∣ t j ) ∗ p ( t j ∣ d s ) pj(wi|ds)=p(wi|tj)*p(tj|ds) pj(wids)=p(witj)p(tjds)

2、现在我们可以枚举T中的topic,得到所有的pj(wi|ds),其中j取值1~k。然后可以根据这些概率值结果为ds中的第i个单词wi选择一个topic。最简单的想法是取令pj(wi|ds)最大的tj(注意,这个式子里只有j是变量),即argmax[j]pj(wi|ds)

3、然后,如果ds中的第i个单词wi在这里选择了一个与原先不同的topic,就会对θd和φt有影响了(根据前面提到过的这两个向量的计算公式可以很容易知道)。它们的影响又会反过来影响对上面提到的p(w|d)的计算。对D中所有的d中的所有w进行一次p(w|d)的计算并重新选择topic看作一次迭代。这样进行n次循环迭代之后,就会收敛到LDA所需要的结果了。


5 参考资料

下一篇详细介绍LDA主题建模的python实现
LDA主题建模的python实现

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZFour_X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值