lda主题模型分析代码(lda主题模型文本分类)

lda主题模型分析代码(lda主题模型文本分类)哈尔滨工程大学 537 LDA Latent Dirichlet Allocation 中文翻译为 潜在狄利克雷分布 LDA 主题模型是一种文档生成模型 是一种非监督机器学习技术 它认为一篇文档是有多个主题的 而每个主题又对应着不同的词 一篇文档的构造过程 首先是以一定的概率选择某个主题 然后再在这个主题下以一定的概率选出某一个词 这样就生成了这篇文档的第一个词 不断重复这个过程

大家好,我是讯享网,很高兴认识大家。



哈尔滨工程大学-537

LDA(Latent Dirichlet Allocation)中文翻译为:潜在狄利克雷分布。LDA主题模型是一种文档生成模型,是一种非监督机器学习技术。它认为一篇文档是有多个主题的,而每个主题又对应着不同的词。一篇文档的构造过程,首先是以一定的概率选择某个主题,然后再在这个主题下以一定的概率选出某一个词,这样就生成了这篇文档的第一个词。不断重复这个过程,就生成了整篇文章(当然这里假定词与词之间是没有顺序的,即所有词无序的堆放在一个大袋子中,称之为词袋,这种方式可以使算法相对简化一些)。

LDA的使用是上述文档生成过程的逆过程,即根据一篇得到的文档,去寻找出这篇文档的主题,以及这些主题所对应的词。

白话解释:比如document1的内容为:[自从乔布斯去世之后,iPhone再难以产生革命性的创新了]
通过上述的方法,document1将对应两个主题topic1,topic2,进而,主题topic1会对应一些词:[苹果创始人][苹果手机],主题topic2会对应一些词:[重大革新][技术突破]。于是LDA模型的好处显而易见,就是可以挖掘文档中的潜在词或者找到两篇没有相同词的文档之间的联系。

详细,通俗易懂,逻辑脉络清晰)


我们以文档集合D中的文档d为例,文档d中包含单词序列<w1,w2,…wn>

 < w 1 , w 2 , . . . w n > 

讯享网

<script type=“math/tex” id=“MathJax-Element-59”>

</script>,

wi

讯享网 w i 表示第 

i

 i 个单词,设d中有nn个单词; 

Vocabulary

讯享网 V o c a b u l a r y ; 

θd=(pt1,pt2,…ptk)

 θ d = ( p t 1 , p t 2 , . . . p t k ) , 

pti

讯享网 p t i 为d对应第 

i

 i 个主题的概率; <br> 

此时输入到算法中的只有文档d和主题数K,那么pt1,pt2…ptkpt1,pt2…ptk的数值从何而来?


我们首先人为设置文档d中对应主题t1,t2,…tk

讯享网 t 1 , t 2 , . . . t k 

的词的个数,比如文档d中5个词对应主题t1

 t 1 

,7个词对应主题t2

讯享网 t 2 

,…,4个词对应主题tk

 t k 

,那么此时,我们就人为确定了一个参数向量(5,7,…4),将这个向量记作α⃗&nbsp;

讯享网 α → 

,这个我们人为设置的参数向量称为超参数
那么如何将超参数α⃗&nbsp;

 α → 

转化为概率分布θd=(pt1,pt2,…ptk)

讯享网 θ d = ( p t 1 , p t 2 , . . . p t k ) 

呢?


这里我们引入狄利克雷分布函数:

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

 D i r i c h l e t ( p 1 , p 2 , p 3 | α 1 , α 2 , α 3 ) = Γ ( α 1 + α 2 + α 3 ) Γ ( α 1 ) Γ ( α 2 ) Γ ( α 3 ) p 1 α 1 − 1 p 2 α 2 − 2 p 3 α 3 − 3 

它所表达的含义简单来说就是,已知α1,α2,α3

讯享网 α 1 , α 2 , α 3 

的条件下,概率p1,p2,p3

 p 1 , p 2 , p 3 

的概率分布,也就是概率的概率,分布的分布。再直观点说就是:比如在已知α1,α2,α3

讯享网 α 1 , α 2 , α 3 

为(5,7,4)

 ( 5 , 7 , 4 ) 

的条件下,样本点p1,p2,p3

讯享网 p 1 , p 2 , p 3 

为(0.4,0.5,0.1)

 ( 0.4 , 0.5 , 0.1 ) 

的概率是多少。


那么我们将上述的三维Dirichlet

讯享网 D i r i c h l e t 

函数扩展为K

 K 

维,即在已知α⃗&nbsp;α→的条件下,得到p⃗&nbsp;

讯享网 p → 

的分布(α⃗&nbsp;,p⃗&nbsp;

 α → , p → 

分别为K维向量)。K

讯享网 K 

维DirichletDirichlet公式如下:

Dirichlet(p⃗&nbsp;|α⃗&nbsp;)=Γ(∑Kk=1αk)∏Kk=1Γ(αk)∏k=1Kpαk−1k

 D i r i c h l e t ( p → | α → ) = Γ ( ∑ k = 1 K α k ) ∏ k = 1 K Γ ( α k ) ∏ k = 1 K p k α k − 1 


至此,我们通过输入超参数α⃗&nbsp;


讯享网

讯享网 α → 

得到了文档d的关于K个主题的狄利克雷分布:

θd=Dirichlet(α⃗&nbsp;)

 θ d = D i r i c h l e t ( α → ) 

Dirichlet

讯享网 D i r i c h l e t 

的输入参数为

α⃗&nbsp;

 α → 

(pt1,pt2,…ptk)

讯享网 ( p t 1 , p t 2 , . . . p t k ) 

……

 . . . . . . 

……

讯享网 . . . . . . 

(pt1,pt2,….ptk)

 ( p t 1 , p t 2 , . . . . p t k ) 

tk

讯享网 t k 

同理,我们可以将任一主题tk

 t k 

产生各个词的概率表示出来。人为设置主题tk

讯享网 t k 

产生的各个词的数量,即设置超参数,用向量η⃗&nbsp;

 η → 

来表示。同上所述,将η⃗&nbsp;

讯享网 η → 

作为Dirichlet

 D i r i c h l e t 

函数的输入参数,得到主题tk

讯享网 t k 

产生各个词的狄利克雷分布:

βk=Dirichlet(η⃗&nbsp;)

 β k = D i r i c h l e t ( η → ) 


此时我们已经得到了文档d对应各个主题的概率分布的分布(即狄利克雷分布)θd

讯享网 θ d 

,以及文档tk

 t k 

产生各个词的概率分布的分布βk

讯享网 β k 

,那么接下来,我们要从文档d中取出第i个词,求这个词对应各个主题的分布;
换句大家熟悉的话来说就是:已知第i个词wi

 w i 
讯享网 p 1 , p 2 , p 3 

,求这n个求当中红球、黄球、绿球的个数。


那么如何通过文档d对应各个主题的分布θd

 θ d 

得到文档中的每个词被各个主题产生的次数,进而重新得到文档d中对应各个主题的词的个数呢?


首先我们引入十分熟悉的多项式分布:

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

讯享网 m u l t i ( m 1 , m 2 , m 3 | n , p 1 , p 2 , p 3 ) = n ! m 1 ! m 2 ! m 3 ! p 1 m 1 p 2 m 2 p 3 m 3 

m1

 m 1 

个红球,

m2

讯享网 m 2 

个黄球,

m3

 m 3 

那么同样将其扩展为K维,将θd

讯享网 θ d 

作为参数,就可以得到文档d中第i个词wi

 w i 

对应的各个主题的多项式分布zdn=multi(θd)

讯享网 z d n = m u l t i ( θ d ) 
 θ d 

,进而得知文档d中各个词对应各个主题的概率,且知道这个词在文档d中的出现次数,于是求得这个词被各个主题的产生次数,遍历文档d中的每一个词,就可以得到新的文档d中对应各个主题的词的个数。
白话举例:文档d对应主题t1,t2

讯享网 t 1 , t 2 

的概率分别为pt1,pt2,

 p t 1 , p t 2 , 

,于是文档d中词w1

讯享网 w 1 

对应的主题t1,t2,

 t 1 , t 2 , 

的概率也分别为pt1,pt2

讯享网 p t 1 , p t 2 

,又得知词w1

 w 1 

在文档d中出现了15次,于是得到词w1

讯享网 w 1 

由主题t1,t2

 t 1 , t 2 
讯享网 w 2 

由主题t1,t2

 t 1 , t 2 

产生的次数分别为13次、2次,于是就能重新得到文档d中对应各个主题的词的数量,即对应主题t1,t2

讯享网 t 1 , t 2 

的词的数量分别为2个、0个(初始的d中对应各个主题的词的数量是人为设定的超参数α⃗&nbsp;

 α → 

)。


于是,我们最终得到了文档d对应各个主题的词的个数的更新值:记作向量n⃗&nbsp;

讯享网 n → 

,我们将更新后的向量n⃗&nbsp;

 n → 

再次作为狄利克雷分布的输入向量,即Dirichlet(θd|n⃗&nbsp;)

讯享网 D i r i c h l e t ( θ d | n → ) 

,就会又会得到文档d对应各个主题的概率的更新值,即更新的θd

 θ d 

,如此反复迭代,最终得到收敛的θd

讯享网 θ d 

,即为我们要的结果。


有了以上的经验,主题tk

 t k 

产生各个词的概率βk

讯享网 β k 

可以同样处理,对于产生文档d中的第i

 i 
讯享网 m u l t i ( β i ) 

,于是用同上面相同的方法,可以得到更新后的各个主题产生各个单词的数量:记作向量m⃗&nbsp;

 m → 

,将向量m⃗&nbsp;

讯享网 m → 

作为新的参数再次带入狄利克雷分布Dirichlet(βk|m⃗&nbsp;)

 D i r i c h l e t ( β k | m → ) 

,就又会得到每个主题产生各个词的概率,即更新的βk

讯享网 β k 

,如此反复迭代,最终得到收敛的βk

 β k 

,即所求结果。


得到了收敛的θd

讯享网 θ d 

和βk

 β k 

,算法就大功告成了,这时,该算法就会根据输入的文档d,找到潜在主题下的相关词啦!!!!

++++++++++++++++++++++++++++++++++++++++
个人整理,水平有限,可能存在很多错误,希望大家一起探讨研究,还有关于为什么选用狄利克雷分布以及狄利克雷分布和多项式分布之间的关系、先验概率后验概率等内容并没有仔细探讨,作者现在已经生不如死了,先休息休息,过几天再补充吧!!
++++++++++++++++++++++++++++++++++++++++

小讯
上一篇 2025-06-17 13:51
下一篇 2025-06-01 09:26

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170392.html