LDA(Dirichlet Distribution)主题模型基本知识与理解(二)

11 篇文章 0 订阅
7 篇文章 0 订阅

在第一部分博客里已经讲解了LDA的一些基本组成,这篇博文将会讲解LDA在NLP方面的应用。望大家继续支持

上一篇博文:https://blog.csdn.net/Little_Fire/article/details/80483566

(三)Dirichlet分布在NLP中的应用

(关于topic生成word的过程)

根据上文中提到了的掷硬币的例子,假设自然语言中存在很多奇怪的coin(religion、computer、art、physics等),这些coin能够掷出的是不同的单词分布,例如religion coin更容易掷出的是god、bible、Jesus等词,computer更容易掷出windows、bill gates、software、Turing等词,而每个coin可以代表不同的topic,而每个coin(topic)掷出的结果也包含了不同的单词(bag-of-word)。

这里每个单词wi是观测值,由对应的zi(topic、document)决定,而每个zi又是由theta决定。此时的概率图模型如下图左所示。然而此时需要对词语和文本都要进行重复采样,直至把整个词表和语料库遍历完成。词表|V|=N,|D|=M,此时的概率图模型如下图右所示。


此时,思考一个问题:如果给定了topic Z,想计算观测到的词语w的概率为多少,即求解p(w|z)=?

对于掷硬币而言,只有z=0和z=1两种情况,p(w|z)的表示形式如下:

 

(伯努利试验)

而对于自然语言来说,p(w|z)是通过beta矩阵生成,beta矩阵存储的是在每个topic下,词表中所有词的概率分布,beta矩阵的形状如下图所示:

对于每个topic而言,所有词在它上面都存在一个分布,例如一个关于religion的分布和computer的分布:



因此,每个topic代表在所有词上面的一个分布,这个分布用beta matrix描述,LDA的概率图模型更新为如下形式:

 

高维空间中,会生成许多theta,这里的theta是所有topic的混合,这里alpha的维度、theta的维度就是我们给定的topic数量(用K表示topic数量,即z1——zK)

给定K个维度,假设K=3, 我们根据theta采样出某个topic zi,再通过beta矩阵,获取topic zi对应的所有单词的分布情况p(w|z=zi),根据p(w|z=zi)再采样出单词wi,就完成了一次LDA估计。

(四)LDA与topic model

综上所述,我们给LDA一个比较实例化的定义:LDA是一个生成统计模型,如果观测值是经过文本d采样得到的词语w,每个文档d就是几个不同topic的混合模型。并且每个词语都隶属于每个文档的topics。


在给定的这些文本中,我们假设我们看到的这些词都是由采样生成的,而且是三次采样而成,theta一次,z一次,w一次。然后根据这些采样结果,反过来估计每个参数(beta矩阵的生成、topic数目等)


对于这个概率图模型,我们先介绍几个notation:

n:不同文档中词语的数量;Nd:第d篇文档中词语总数量;θ(dk)第d篇文档的第k个topic的分布(其中k代表维度,θ是多个topic的混合,d代表具体文档)。当d=8时,topic维度总数K=4,θ的概率分布θ(8k)有K=4维,如下所示:


β(ki):表示给定了topic k时,生成每个词语wi的分布情况。k取值[1,K],i取值[1,|V|],|V|是词表长度。

整个生成过程如下:

给定超参数,需要学习α生成的topic混合程度θ的值,即θ~dir(α),θ是组合的概率分布,假设这个topic组合是三维的(红、黄、蓝),即K=3,这种组合就代表了一篇给定的文本,这个文本就认为是由3种topic的组合。

接下来就是词语w的生成过程,给定θ时,根据对应的topic分布,采样得到某个topic(例如,选择红色topic,z=1),然后通过beta矩阵,获取z=1时所有词语的概率分布:如下:

再根据这个词语的概率分布,再次采样得到一个词(例如life)放入文本中,完成了一个词语的采样。

接下来采样第二个词,仍然从θ开始采样(由于α已经给定,而θ已经由α的采样获得),根据第d篇文档θ的topic分布θ(dk),再次采样一个topic(例如,选择黄色topic,z=2),然后通过beta矩阵,获取z=2时,词表中所有词语的概率分布如下:


根据这个概率分布,选择了第二个词(例如DNA)放入文本,完成了第二个词语的采样。

以此类推,第d篇文档中的所有词都通过这种方式全部采样获得,就是LDA在NLP上面的应用。

【小节】我们可以将没篇文档中所有词的生成,看作是每次采样的结果,而每个词语的采样又是通过3次采样获得。接下来,关于LDA参数如何训练,将在下一小节中为大家讲解。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LDA(Latent Dirichlet Allocation)是一种主题模型,它可以对文本进行建模,从而发现文本隐藏的主题结构。在LDA模型中,每个文档都可以由多个主题组合而成,每个主题也可以由多个单词组成。LDA模型的可视化可以帮助我们更好地理解文本数据中的主题结构。 有多种方法可以对LDA模型进行可视化,其中一种常用的方法是使用pyLDAvis库。pyLDAvis库可以生成一个交互式的可视化界面,其中包括主题的分布情况、单词的分布情况、主题之间的相似性等信息,使得用户可以更加直观地理解模型的结果。 下面是使用pyLDAvis库对LDA模型进行可视化的示例代码: ``` python import pyLDAvis.gensim import gensim # 导入LDA模型和语料库 lda_model = gensim.models.ldamodel.LdaModel.load('lda_model.model') corpus = gensim.corpora.MmCorpus('corpus.mm') # 对模型进行可视化 vis_data = pyLDAvis.gensim.prepare(lda_model, corpus, dictionary=lda_model.id2word) pyLDAvis.display(vis_data) ``` 这段代码中,我们首先导入了pyLDAvis和gensim库,然后加载了LDA模型和语料库。最后,调用pyLDAvis.gensim.prepare()函数对模型进行可视化,并使用pyLDAvis.display()函数将结果显示在交互式界面中。 需要注意的是,可视化结果只是对模型的一种解释,不一定反映了数据的真实情况。因此,在使用可视化工具时需要慎重分析结果,同时结合其他方法进行验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值