文本主题模型之LDA(二) LDA求解之Gibbs采样算法

简介:

1. Gibbs采样算法求解LDA的思路

    首先,回顾LDA的模型图如下:

    在Gibbs采样算法求解LDA的方法中,我们的 α , η 是已知的先验输入,我们的目标是得到各个 z d n , w k n 对应的整体 z , w 的概率分布,即文档主题的分布和主题词的分布。由于我们是采用Gibbs采样法,则对于要求的目标分布,我们需要得到对应分布各个特征维度的条件概率分布。

    具体到我们的问题,我们的所有文档联合起来形成的词向量 w 是已知的数据,不知道的是语料库主题 z 的分布。假如我们可以先求出 w , z 的联合分布 p ( w , z ) ,进而可以求出某一个词 w i 对应主题特征 z i 的条件概率分布 p ( z i = k | w , z ¬ i ) 。其中, z ¬ i 代表去掉下标为 i 的词后的主题分布。有了条件概率分布 p ( z i = k | w , z ¬ i ) ,我们就可以进行Gibbs采样,最终在Gibbs采样收敛后得到第 i 个词的主题。

    如果我们通过采样得到了所有词的主题,那么通过统计所有词的主题计数,就可以得到各个主题的词分布。接着统计各个文档对应词的主题计数,就可以得到各个文档的主题分布。

    以上就是Gibbs采样算法求解LDA的思路。

2. 主题和词的联合分布与条件分布的求解

    从上一节可以发现,要使用Gibbs采样求解LDA,关键是得到条件概率 p ( z i = k | w , z ¬ i ) 的表达式。那么这一节我们的目标就是求出这个表达式供Gibbs采样使用。

    首先我们简化下Dirichlet分布的表达式,其中 ( α ) 是归一化参数:

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 = 1 ( α ) k = 1 K p k α k 1

    现在我们先计算下第d个文档的主题的条件分布 p ( z d | α ) ,在上一篇中我们讲到 α θ d z d 组成了Dirichlet-multi共轭,利用这组分布,计算 p ( z d | α ) 如下:

(1) p ( z d | α ) = p ( z d | θ d ) p ( θ d | α ) d θ d (2) = k = 1 K p k n d ( k ) D i r i c h l e t ( α ) d θ d (3) = k = 1 K p k n d ( k ) 1 ( α ) k = 1 K p k α k 1 d θ d (4) = 1 ( α ) k = 1 K p k n d ( k ) + α k 1 d θ d (5) = ( n d + α ) ( α )

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

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

    有了单一一个文档的主题条件分布,则可以得到所有文档的主题条件分布为:

p ( z | α ) = d = 1 M p ( z d | α ) = d = 1 M ( n d + α ) ( α )

    同样的方法,可以得到,第k个主题对应的词的条件分布 p ( w | z , η ) 为:

p ( w | z , η ) = k = 1 K p ( w k | z , η ) = k = 1 K ( n k + η ) ( η )

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

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

    最终我们得到主题和词的联合分布 p ( w , z | α , η ) 如下:

p ( w , z ) p ( w , z | α , η ) = p ( z | α ) p ( w | z , η ) = d = 1 M ( n d + α ) ( α ) k = 1 K ( n k + η ) ( η )

    有了联合分布,现在我们就可以求Gibbs采样需要的条件分布 p ( z i = k | w , z ¬ i ) 了。需要注意的是这里的i是一个二维下标,对应第d篇文档的第n个词。

    对于下标 i ,由于它对应的词 w i 是可以观察到的,因此我们有:

p ( z i = k | w , z ¬ i ) p ( z i = k , w i = t | w ¬ i , z ¬ i )

    对于 z i = k , w i = t ,它只涉及到第d篇文档和第k个主题两个Dirichlet-multi共轭,即:

α θ d z d
η β k w ( k )

    其余的 M + K 2 个Dirichlet-multi共轭和它们这两个共轭是独立的。如果我们在语料库中去掉 z i , w i ,并不会改变之前的 M + K 个Dirichlet-multi共轭结构,只是向量的某些位置的计数会减少,因此对于 θ d , β k ,对应的后验分布为:

p ( θ d | w ¬ i , z ¬ i ) = D i r i c h l e t ( θ d | n d , ¬ i + α )
p ( β k | w ¬ i , z ¬ i ) = D i r i c h l e t ( β k | n k , ¬ i + η )

    现在开始计算Gibbs采样需要的条件概率:

(6) p ( z i = k | w , z ¬ i ) p ( z i = k , w i = t | w ¬ i , z ¬ i ) (7) = p ( z i = k , w i = t , θ d , β k | w ¬ i , z ¬ i ) d θ d d β k (8) = p ( z i = k , θ d | w ¬ i , z ¬ i ) p ( w i = t , β k | w ¬ i , z ¬ i ) d θ d d β k (9) = p ( z i = k | θ d ) p ( θ d | w ¬ i , z ¬ i ) p ( w i = t | β k ) p ( β k | w ¬ i , z ¬ i ) d θ d d β k (10) = p ( z i = k | θ d ) D i r i c h l e t ( θ d | n d , ¬ i + α ) d θ d (11) p ( w i = t | β k ) D i r i c h l e t ( β k | n k , ¬ i + η ) d β k (12) = θ d k D i r i c h l e t ( θ d | n d , ¬ i + α ) d θ d β k t D i r i c h l e t ( β k | n k , ¬ i + η ) d β k (13) = E D i r i c h l e t ( θ d ) ( θ d k ) E D i r i c h l e t ( β k ) ( β k t )

    在上一篇LDA基础里我们讲到了Dirichlet分布的期望公式,因此我们有:

E D i r i c h l e t ( θ d ) ( θ d k ) = n d , ¬ i k + α k s = 1 K n d , ¬ i s + α s
E D i r i c h l e t ( β k ) ( β k t ) = n k , ¬ i t + η t f = 1 V n k , ¬ i f + η f

    最终我们得到每个词对应主题的Gibbs采样的条件概率公式为:

p ( z i = k | w , z ¬ i ) = n d , ¬ i k + α k s = 1 K n d , ¬ i s + α s n k , ¬ i t + η t f = 1 V n k , ¬ i f + η f

    有了这个公式,我们就可以用Gibbs采样去采样所有词的主题,当Gibbs采样收敛后,即得到所有词的采样主题。

    利用所有采样得到的词和主题的对应关系,我们就可以得到每个文档词主题的分布 θ d 和每个主题中所有词的分布 β k

3. LDA Gibbs采样算法流程总结

    现在我们总结下LDA Gibbs采样算法流程。首先是训练流程:

    1) 选择合适的主题数 K , 选择合适的超参数向量 α , η

    2) 对应语料库中每一篇文档的每一个词,随机的赋予一个主题编号 z

    3)  重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic编号,并更新语料库中该词的编号。

    4) 重复第2步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛。

    5) 统计语料库中的各个文档各个词的主题,得到文档主题分布 θ d ,统计语料库中各个主题词的分布,得到LDA的主题与词的分布 β k

 

    下面我们再来看看当新文档出现时,如何统计该文档的主题。此时我们的模型已定,也就是LDA的各个主题的词分布 β k 已经确定,我们需要得到的是该文档的主题分布。因此在Gibbs采样时,我们的 E D i r i c h l e t ( β k ) ( β k t ) 已经固定,只需要对前半部分 E D i r i c h l e t ( θ d ) ( θ d k ) 进行采样计算即可。

    现在我们总结下LDA Gibbs采样算法的预测流程:

    1) 对应当前文档的每一个词,随机的赋予一个主题编号 z

    2)  重新扫描当前文档,对于每一个词,利用Gibbs采样公式更新它的topic编号。

    3) 重复第2步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛。

    4) 统计文档中各个词的主题,得到该文档主题分布。

 

4. LDA Gibbs采样算法小结    

    使用Gibbs采样算法训练LDA模型,我们需要先确定三个超参数 K , α , η 。其中选择一个合适的 K 尤其关键,这个值一般和我们解决问题的目的有关。如果只是简单的语义区分,则较小的 K 即可,如果是复杂的语义区分,则 K 需要较大,而且还需要足够的语料。

    由于Gibbs采样可以很容易的并行化,因此也可以很方便的使用大数据平台来分布式的训练海量文档的LDA模型。以上就是LDA Gibbs采样算法。

    后面我们会介绍用变分推断EM算法来求解LDA主题模型,这个方法是scikit-learn和spark MLlib都使用的LDA求解方法。


本文转自刘建平Pinard博客园博客,原文链接:http://www.cnblogs.com/pinard/p/6867828.html,如需转载请自行联系原作者

相关文章
|
4月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
118 1
|
3月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
52 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
4月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
100 4
|
4月前
|
数据采集 自然语言处理 数据可视化
基于Python的社交媒体评论数据挖掘,使用LDA主题分析、文本聚类算法、情感分析实现
本文介绍了基于Python的社交媒体评论数据挖掘方法,使用LDA主题分析、文本聚类算法和情感分析技术,对数据进行深入分析和可视化,以揭示文本数据中的潜在主题、模式和情感倾向。
242 0
|
5月前
|
机器学习/深度学习 数据采集 算法
Python基于KMeans算法进行文本聚类项目实战
Python基于KMeans算法进行文本聚类项目实战
|
4月前
|
算法 数据可视化 搜索推荐
基于python的k-means聚类分析算法,对文本、数据等进行聚类,有轮廓系数和手肘法检验
本文详细介绍了基于Python实现的k-means聚类分析算法,包括数据准备、预处理、标准化、聚类数目确定、聚类分析、降维可视化以及结果输出的完整流程,并应用该算法对文本数据进行聚类分析,展示了轮廓系数法和手肘法检验确定最佳聚类数目的方法。
112 0
|
5月前
|
文字识别 算法 Java
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
文本,保存图片09,一个可以用id作为图片名字的pom插件,利用雪花算法生成唯一的id
|
5月前
|
算法 JavaScript
「AIGC算法」将word文档转换为纯文本
使用Node.js模块`mammoth`和`html-to-text`,该代码示例演示了如何将Word文档(.docx格式)转换为纯文本以适应AIGC的文本识别。流程包括将Word文档转化为HTML,然后进一步转换为纯文本,进行格式调整,并输出到控制台。转换过程中考虑了错误处理。提供的代码片段展示了具体的实现细节,包括关键库的导入和转换函数的调用。
53 0
|
6月前
|
算法 计算机视觉
图像处理之Lanczos采样放缩算法
图像处理之Lanczos采样放缩算法
64 0
|
7天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。