文本主题模型之ldalda基础

hx868 hx868     2023-01-29     267

关键词:

在前面我们讲到了基于矩阵分解的LSI和NMF主题模型,这里我们开始讨论被广泛使用的主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,以下简称LDA)。注意机器学习还有一个LDA,即线性判别分析,主要是用于降维和分类的,如果大家需要了解这个LDA的信息,参看之前写的线性判别分析LDA原理总结。文本关注于隐含狄利克雷分布对应的LDA。

1. LDA贝叶斯模型

    LDA是基于贝叶斯模型的,涉及到贝叶斯模型离不开“先验分布”,“数据(似然)”和"后验分布"三块。在朴素贝叶斯算法原理小结中我们也已经讲到了这套贝叶斯理论。在贝叶斯学派这里:

先验分布 + 数据(似然)= 后验分布

    这点其实很好理解,因为这符合我们人的思维方式,比如你对好人和坏人的认知,先验分布为:100个好人和100个的坏人,即你认为好人坏人各占一半,现在你被2个好人(数据)帮助了和1个坏人骗了,于是你得到了新的后验分布为:102个好人和101个的坏人。现在你的后验分布里面认为好人比坏人多了。这个后验分布接着又变成你的新的先验分布,当你被1个好人(数据)帮助了和3个坏人(数据)骗了后,你又更新了你的后验分布为:103个好人和104个的坏人。依次继续更新下去。

2. 二项分布与Beta分布

    对于上一节的贝叶斯模型和认知过程,假如用数学和概率的方式该如何表达呢?

    对于我们的数据(似然),这个好办,用一个二项分布就可以搞定,即对于二项分布:

Binom(k|n,p)=(nk)pk(1?p)n?kBinom(k|n,p)=(nk)pk(1?p)n?k

 

    其中p我们可以理解为好人的概率,k为好人的个数,n为好人坏人的总数。

    虽然数据(似然)很好理解,但是对于先验分布,我们就要费一番脑筋了,为什么呢?因为我们希望这个先验分布和数据(似然)对应的二项分布集合后,得到的后验分布在后面还可以作为先验分布!就像上面例子里的“102个好人和101个的坏人”,它是前面一次贝叶斯推荐的后验分布,又是后一次贝叶斯推荐的先验分布。也即是说,我们希望先验分布和后验分布的形式应该是一样的,这样的分布我们一般叫共轭分布。在我们的例子里,我们希望找到和二项分布共轭的分布。

    和二项分布共轭的分布其实就是Beta分布。Beta分布的表达式为:

Beta(p|α,β)=Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1Beta(p|α,β)=Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1

 

    其中ΓΓ是Gamma函数,满足Γ(x)=(x?1)!Γ(x)=(x?1)!

    仔细观察Beta分布和二项分布,可以发现两者的密度函数很相似,区别仅仅在前面的归一化的阶乘项。那么它如何做到先验分布和后验分布的形式一样呢?后验分布P(p|n,k,α,β)P(p|n,k,α,β)推导如下:

 

P(p|n,k,α,β)P(k|n,p)P(p|α,β)=P(k|n,p)P(p|α,β)=Binom(k|n,p)Beta(p|α,β)=(nk)pk(1?p)n?k×Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1pk+α?1(1?p)n?k+β?1 (1)(2)(3)(4)(5)(1)P(p|n,k,α,β)∝P(k|n,p)P(p|α,β)(2)=P(k|n,p)P(p|α,β)(3)=Binom(k|n,p)Beta(p|α,β)(4)=(nk)pk(1?p)n?k×Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1(5)∝pk+α?1(1?p)n?k+β?1 

 

    将上面最后的式子归一化以后,得到我们的后验概率为:

P(p|n,k,α,β)=Γ(α+β+n)Γ(α+k)Γ(β+n?k)pk+α?1(1?p)n?k+β?1P(p|n,k,α,β)=Γ(α+β+n)Γ(α+k)Γ(β+n?k)pk+α?1(1?p)n?k+β?1

 

    可见我们的后验分布的确是Beta分布,而且我们发现:

Beta(p|α,β)+BinomCount(k,n?k)=Beta(p|α+k,β+n?k)Beta(p|α,β)+BinomCount(k,n?k)=Beta(p|α+k,β+n?k)

 

    这个式子完全符合我们在上一节好人坏人例子里的情况,我们的认知会把数据里的好人坏人数分别加到我们的先验分布上,得到后验分布。 

    我们在来看看Beta分布Beta(p|α,β)Beta(p|α,β)的期望:

E(Beta(p|α,β))=10tBeta(p|α,β)dt=10tΓ(α+β)Γ(α)Γ(β)tα?1(1?t)β?1dt=10Γ(α+β)Γ(α)Γ(β)tα(1?t)β?1dt(6)(7)(8)(6)E(Beta(p|α,β))=∫01tBeta(p|α,β)dt(7)=∫01tΓ(α+β)Γ(α)Γ(β)tα?1(1?t)β?1dt(8)=∫01Γ(α+β)Γ(α)Γ(β)tα(1?t)β?1dt

 

    由于上式最右边的乘积对应Beta分布Beta(p|α+1,β)Beta(p|α+1,β),因此有:

10Γ(α+β+1)Γ(α+1)Γ(β)pα(1?p)β?1=1∫01Γ(α+β+1)Γ(α+1)Γ(β)pα(1?p)β?1=1

 

    这样我们的期望可以表达为:

E(Beta(p|α,β))=Γ(α+β)Γ(α)Γ(β)Γ(α+1)Γ(β)Γ(α+β+1)=αα+βE(Beta(p|α,β))=Γ(α+β)Γ(α)Γ(β)Γ(α+1)Γ(β)Γ(α+β+1)=αα+β

 

    这个结果也很符合我们的思维方式。

3. 多项分布与Dirichlet 分布

    现在我们回到上面好人坏人的问题,假如我们发现有第三类人,不好不坏的人,这时候我们如何用贝叶斯来表达这个模型分布呢?之前我们是二维分布,现在是三维分布。由于二维我们使用了Beta分布和二项分布来表达这个模型,则在三维时,以此类推,我们可以用三维的Beta分布来表达先验后验分布,三项的多项分布来表达数据(似然)。

    三项的多项分布好表达,我们假设数据中的第一类有m1m1个好人,第二类有m2m2个坏人,第三类为m3=n?m1?m2m3=n?m1?m2个不好不坏的人,对应的概率分别为p1,p2,p3=1?p1?p2p1,p2,p3=1?p1?p2,则对应的多项分布为:

multi(m1,m2,m3|n,p1,p2,p3)=n!m1!m2!m3!pm11pm22pm33multi(m1,m2,m3|n,p1,p2,p3)=n!m1!m2!m3!p1m1p2m2p3m3

 

    那三维的Beta分布呢?超过二维的Beta分布我们一般称之为狄利克雷(以下称为Dirichlet )分布。也可以说Beta分布是Dirichlet 分布在二维时的特殊形式。从二维的Beta分布表达式,我们很容易写出三维的Dirichlet分布如下:

Dirichlet(p1,p2,p3|α1,α2,α3)=Γ(α1+α2+α3)Γ(α1)Γ(α2)Γ(α3)pα1?11(p2)α2?1(p3)α3?1Dirichlet(p1,p2,p3|α1,α2,α3)=Γ(α1+α2+α3)Γ(α1)Γ(α2)Γ(α3)p1α1?1(p2)α2?1(p3)α3?1

 

    同样的方法,我们可以写出4维,5维,。。。以及更高维的Dirichlet 分布的概率密度函数。为了简化表达式,我们用向量来表示概率和计数,这样多项分布可以表示为:Dirichlet(p|α)Dirichlet(p→|α→),而多项分布可以表示为:multi(m|n,p)multi(m→|n,p→)。

    一般意义上的K维Dirichlet 分布表达式为:

Dirichlet(p|α)=Γ(k=1Kαk)Kk=1Γ(αk)k=1Kpαk?1kDirichlet(p→|α→)=Γ(∑k=1Kαk)∏k=1KΓ(αk)∏k=1Kpkαk?1

 

    而多项分布和Dirichlet 分布也满足共轭关系,这样我们可以得到和上一节类似的结论:

Dirichlet(p|α)+MultiCount(m)=Dirichlet(p|α+m)Dirichlet(p→|α→)+MultiCount(m→)=Dirichlet(p→|α→+m→)

 

    对于Dirichlet 分布的期望,也有和Beta分布类似的性质:

E(Dirichlet(p|α))=(α1k=1Kαk,α2k=1Kαk,...,αKk=1Kαk)E(Dirichlet(p→|α→))=(α1∑k=1Kαk,α2∑k=1Kαk,...,αK∑k=1Kαk)

 

4. LDA主题模型

    前面做了这么多的铺垫,我们终于可以开始LDA主题模型了。

    我们的问题是这样的,我们有MM篇文档,对应第d个文档中有有NdNd个词。即输入为如下图:

技术分享图片

    我们的目标是找到每一篇文档的主题分布和每一个主题中词的分布。在LDA模型中,我们需要先假定一个主题数目KK,这样所有的分布就都基于KK个主题展开。那么具体LDA模型是怎么样的呢?具体如下图:

技术分享图片

    LDA假设文档主题的先验分布是Dirichlet分布,即对于任一文档dd, 其主题分布θdθd为:

θd=Dirichlet(α)θd=Dirichlet(α→)

 

    其中,αα为分布的超参数,是一个KK维向量。

    LDA假设主题中词的先验分布是Dirichlet分布,即对于任一主题kk, 其词分布βkβk为:

βk=Dirichlet(η)βk=Dirichlet(η→)

 

    其中,ηη为分布的超参数,是一个VV维向量。VV代表词汇表里所有词的个数。

    对于数据中任一一篇文档dd中的第nn个词,我们可以从主题分布θdθd中得到它的主题编号zdnzdn的分布为:

zdn=multi(θd)zdn=multi(θd)

 

    而对于该主题编号,得到我们看到的词wdnwdn的概率分布为: 

wdn=multi(βzdn)wdn=multi(βzdn)

 

    理解LDA主题模型的主要任务就是理解上面的这个模型。这个模型里,我们有MM个文档主题的Dirichlet分布,而对应的数据有MM个主题编号的多项分布,这样(αθdzdα→θd→z→d)就组成了Dirichlet-multi共轭,可以使用前面提到的贝叶斯推断的方法得到基于Dirichlet分布的文档主题后验分布。

    如果在第d个文档中,第k个主题的词的个数为:n(k)dnd(k), 则对应的多项分布的计数可以表示为

nd=(n(1)d,n(2)d,...n(K)d)n→d=(nd(1),nd(2),...nd(K))

 

    利用Dirichlet-multi共轭,得到θdθd的后验分布为:

Dirichlet(θd|α+nd)Dirichlet(θd|α→+n→d)

 

    同样的道理,对于主题与词的分布,我们有KK个主题与词的Dirichlet分布,而对应的数据有KK个主题编号的多项分布,这样(ηβkw(k)η→βk→w→(k))就组成了Dirichlet-multi共轭,可以使用前面提到的贝叶斯推断的方法得到基于Dirichlet分布的主题词的后验分布。

    如果在第k个主题中,第v个词的个数为:n(v)knk(v), 则对应的多项分布的计数可以表示为

nk=(n(1)k,n(2)k,...n(V)k)n→k=(nk(1),nk(2),...nk(V))

 

    利用Dirichlet-multi共轭,得到βkβk的后验分布为:

Dirichlet(βk|η+nk)Dirichlet(βk|η→+n→k)

 

    由于主题产生词不依赖具体某一个文档,因此文档主题分布和主题词分布是独立的。理解了上面这M+KM+K组Dirichlet-multi共轭,就理解了LDA的基本原理了。

    现在的问题是,基于这个LDA模型如何求解我们想要的每一篇文档的主题分布和每一个主题中词的分布呢?

    一般有两种方法,第一种是基于Gibbs采样算法求解,第二种是基于变分推断EM算法求解。

    如果你只是想理解基本的LDA模型,到这里就可以了,如果想理解LDA模型的求解,可以继续关注系列里的另外两篇文章。

 

转载自   文本主题模型之LDA(一) LDA基础 - 刘建平Pinard - 博客园  https://www.cnblogs.com/pinard/p/6831308.html

文本主题模型之ldalda求解之变分推断em算法

       文本主题模型之LDA(一)LDA基础    文本主题模型之LDA(二)LDA求解之Gibbs采样算法    文本主题模型之LDA(三)LDA求解之变分推断EM算法    本文是LDA主题模型的第三篇,读这一篇之前建议... 查看详情

文本主题模型之ldalda求解之gibbs采样算法

 本文是LDA主题模型的第二篇,读这一篇之前建议先读文本主题模型之LDA(一)LDA基础,同时由于使用了基于MCMC的Gibbs采样算法,如果你对MCMC和Gibbs采样不熟悉,建议阅读之前写的MCMC系列MCMC(四)Gibbs采样。 1. Gibbs采样算法求... 查看详情

文本主题模型之ldalda求解之变分推断em算法

 本文是LDA主题模型的第三篇,读这一篇之前建议先读文本主题模型之LDA(一)LDA基础,同时由于使用了EM算法,如果你对EM算法不熟悉,建议先熟悉EM算法的主要思想。LDA的变分推断EM算法求解,应用于SparkMLlib和Scikit-learn的LDA算法... 查看详情

文本主题模型之非负矩阵分解(nmf)(代码片段)

在文本主题模型之潜在语义索引(LSI)中,我们讲到LSI主题模型使用了奇异值分解,面临着高维度计算量太大的问题。这里我们就介绍另一种基于矩阵分解的主题模型:非负矩阵分解(NMF),它同样使用了矩阵分解,但是计算量和处... 查看详情

8.如何构建主题域模型原则之站在巨人的肩上ncrfs-ldm主题域模型划分

一、前言     分布式数据仓库模型的架构设计,受分布式技术的影响,很多有自己特色的地方,但是在概念模型和逻辑模型设计方面,还是有很多可以从传统数据仓库模型进行借鉴的地方。NCRFS-LDM数据模型是金... 查看详情

lda主题模型学习相关的书籍介绍

...内容:微积分基础,概率论与数理统计基础,随机模拟算法,文本建模思路。LDA数学八卦讲解的思路就是微积分-分布函数-随机模拟-文本建模这条主线的。个人认为,如果数学基础比较差的话,光靠《LDA数学八卦》是很难理解清楚LDA... 查看详情

文本主题模型--lda

隐含狄利克雷分布(LatentDirichletAllocation,简称LDA)贝叶斯模型贝叶斯模型主要涉及“先验分布”,“数据(似然)”和“后验分布”三块,在贝叶斯学派中:                ... 查看详情

消息队列之kafka(基础介绍)

...模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即时当前订阅者不可用,处于离线状态。3.JMS核心组件Destination:消息发送的目的地,也就是前面说的Queue和Topic... 查看详情

lda模型可以用于文本分析吗

参考技术A可以LDA(LatentDirichletAllocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,... 查看详情

latentdirichletallocation文本分类主题模型

文本提取特征常用的模型有:1.Bag-of-words:最原始的特征集,一个单词/分词就是一个特征。往往一个数据集就会有上万个特征;有一些简单的指标可以帮助筛选掉一些对分类没帮助的词语,例如去停词,计算互信息熵等等,但不... 查看详情

前端基础之bom和dom

核心知识点:1.BOM(浏览器窗口对象模型)DOM(文本对象模型)2.window对象是客户端JavaScript最高层对象之一,属于全局对象,一般书写可以省略3.window对象常用的方法  (1)窗口对象方法  (2)子对象方法    a.navigator对象(一般用于读... 查看详情

计算机网络基础

目录导航网络协议介绍OSI七层模型与TCP/IP五层模型介绍TCP/IP五层模型之物理层TCP/IP五层模型之数据链路层TCP/IP五层模型之网络层TCP/IP五层模型之传输层TCP/IP五层模型之应用层计算机网络基础网络协议介绍正文OSI七层模型与TCP/IP五... 查看详情

机器学习入门-文本特征-使用lda主题模型构造标签1.latentdirichletallocation(lda用于构建主题模型)2.lda.components(输出各个词向量的权重值)(代码(代码

...LDA(n_topics,max_iters,random_state) 用于构建LDA主题模型,将文本分成不同的主题 参数说明:n_topics表示分为多少个主题,max_iters表示最大的迭代次数,random_state表示随机种子 2.LDA.components_打印输入特征的权重参数,LDA主题模... 查看详情

特定领域知识图谱融合方案:文本匹配算法之预训练simberternie-gram单塔模型等诸多模型

特定领域知识图谱融合方案:文本匹配算法之预训练模型SimBert、ERNIE-Gram文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系。有很多应用场景;如信息检索、问答系统、智能对话、文本鉴... 查看详情

css盒子模型之边距基础

1.边距分为:padding margin1*{2margin:0px;3padding:0px;4}  查看详情

文档主题生成模型(lda)

...(topicmodeling)是一种常见的机器学习应用,主要用于对文本进行分类。传统的文本分类器,例如贝叶斯、KNN和SVM分类器,只能将测试对象分到某一个类别中,假设我给出三个分类:“算法”、“网络”和“编译”让其判断,这... 查看详情

特定领域知识图谱融合方案:文本匹配算法之预训练simberternie-gram单塔模型等诸多模型(代码片段)

特定领域知识图谱融合方案:文本匹配算法之预训练模型SimBert、ERNIE-Gram文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系。有很多应用场景;如信息检索、问答系统、智能对话、文本鉴... 查看详情

[python从零到壹]十六.文本挖掘之词云热点与lda主题分布分析万字详解(代码片段)

欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分... 查看详情