lda算法主题模型
㈠ 什么是LDA主题模型
在机器学习领域,LDA是两个常用模型的简称:Linear Discriminant Analysis 和 Latent Dirichlet Allocation。本文的LDA仅指代Latent Dirichlet Allocation. LDA 在主题模型中占有非常重要的地位,常用来文本分类。
LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布。它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。
LDA 模型涉及很多数学知识,这也许是LDA晦涩难懂的主要原因。本小节主要介绍LDA中涉及的数学知识。数学功底比较好的同学可以直接跳过本小节。
LDA涉及到的先验知识有:二项分布、Gamma函数、Beta分布、多项分布、Dirichlet分布、马尔科夫链、MCMC、Gibs Sampling、EM算法等。限于篇幅,本文仅会有的放矢的介绍部分概念,不会每个概念都仔细介绍,亦不会涉及到每个概念的数学公式推导。如果每个概念都详细介绍,估计都可以写一本百页的书了。如果你对LDA的理解能达到如数家珍、信手拈来的程度,那么恭喜你已经掌握了从事机器学习方面的扎实数学基础。想进一步了解底层的数学公式推导过程,可以参考《数学全书》等资料。
㈡ NLP系列(三)LDA主题模型
LDA模型是NLP中很基础也是大家广为熟知的模型,在面试过程也经常遇到。本文简单讲述下其大致流程。
首先,我们来感受下LDA是什么,
看来,不同人在不同场景下对LDA的认识,那我们看下网络的解释:
看到这里我们只需要先记住: LDA的目的就是要识别主题,即把文档—词汇矩阵变成文档—主题矩阵(分布)和主题—词汇矩阵(分布)
对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):
1.对每一篇文档,从主题分布中抽取一个主题;
2.从上述被抽到的主题所对应的单词分布中抽取一个单词;
3.重复上述过程直至遍历文档中的每一个单词。
语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布 (multinomialdistribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。
LDA的核心公式如下:
p(w|d)=p(w|t)*p(t|d)
直观的看这个公式,就是以Topic作为中间层,可以通过当前的θd和φt给出了文档d中出现单词w的概率。其中p(t|d)利用θd计算得到,p(w|t)利用φt计算得到。
实际上,利用当前的θd和φt,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的p(w|d),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响θd和φt。
LDA算法开始时,先随机地给θd和φt赋值(对所有的d和t)。然后上述过程不断重复,最终收敛到的结果就是LDA的输出。再详细说一下这个迭代的学习过程:
1.针对一个特定的文档ds中的第i单词wi,如果令该单词对应的topic为tj,可以把上述公式改写为:
pj(wi|ds)=p(wi|tj)*p(tj|ds)
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所需要的结果了。
N个文档组成的语料库(𝐷 1,𝐷 2,"……" ,𝐷 𝑛),由V个词组成的词汇表。矩阵中的值表示了词𝑊𝑗 〖在文档𝐷〗 𝑖 中出现的频率,主题用Z表示,下面对语料库中的每一个word随机指派一个主题编号𝑍 𝑖,统计每个𝑍_𝑖下出现的word次数,可得一个主题—词汇矩阵。
统计每个词代表的主题在每一个文档中出现的次数,可得出以下矩阵文档—主题矩阵
以上讲了大致LDA的感性认识,如果进行严格的数学推导请看这篇文章( https://www.jianshu.com/p/74ec7d5f6821 ),本人认为是看到的不错的文章。
LDA对自己一直是一个谜,看了网上的很多资料,然后整理了几篇不错的,我在这里贴出来。本篇文章主要大致了解了下LDA的大致流程,如果真正搞懂其背后数学原理,还得反复看一下下面的文章:
LDA(LDA文档主题生成模型)_网络
㈢ 无监督第五节:LDA (Latent Dirichlet Allocation算法细节)(主题模型)
LDA是生成式概率模型。基本的观点是一个文档由多个隐主题生成,每个主题是由单词的分布式表达。
LDA假设在语料库D中每个文档的生成过程如下:
1.主题数量k已知
2.单词的概率由参数 控制
参数 是一个k 维的向量,并且每个元素大于0, 服从Gamma 分布
已知参数 , 联合分布主题混合的参数 , 表示主题的参数 z,表示文档的参数w:
对 积分,并对z求和得到关于文档的边缘分布:
所有文档的边缘分布相乘,得到整个语料库的概率:
参数 和参数 是语料库级别的参数,在生成语料库的过程中使用。
变量 是文档级别的参数,每个文档采样一次。
变量 和 是单词级别的参数,每个文档中每个单词都采样一次.
一组随机变量如果联合分布和变量的排列顺序无关,则称这组变量是可交换的。
在LDA中,我们假设单词是由主题生成的,并且这些主题在文档中是无限可交换的,
其中 是关于主题多项式分布的随机变量。
通过对隐主题变量z积分。可以得到单词分布:
这是一个随机量,因为他依赖于
我们定义接下来的生成过程, 对于一个文档 w
1.选择θ∼Dir(α)
2.对于每个N的单词 :
(a)从 中选择一个单词
这个过程定义一篇文档的边缘分布看成一个连续的混合分布
inference的关心的问题使用LDA来计算隐变量z的后验分布:
这个分布通常很难计算。通过normaliza 分布,并且计算边缘分布。
这个后验分布很难计算,但是通过一些变分推断的方法还是可以得到。
基本的观点是使用jensen's 不等式来获得一个调整的下界,变分参数通过优化过程来试图找到最接近的可能的下界。
一个简单的方式是通过鲜花原始的计算图,将一些边和节点移去。在LDA中,原始的图是左图,通过把 移去,生成右边含有自由变分参数的图。
新的计算图使用如下变分分布:
是狄利克雷参数,多项式参数(φ1 , . . . , φ N ) 是自由变量参数。
得到简化的概率分布后,下一步是开始的优化问题是决定变分参数 的值。
优化这个变分参数是通过最小化KL散度来实现,并且吧他们设为0,得到以下的更新参数。
在文本的语言中,优化参数 是文档制定的。特别的,我们认为狄利克雷参数 是一个文档的主题表达。
经验贝叶斯方法来估计LDA中的参数。给定一个语料D,我们希望找到参数 来最大化边缘似然概率:
计算 比较困难,可以通过变分EM算法来估计。
1.E step,对于每个文档,找到最优的变分参数 。
2.M step, 最大化结果的下界。
重复上述几步直到下界收敛。
㈣ 对比传统K-Means等聚类算法,LDA主题模型在文本聚类上有何优缺点
K-means 算法属于聚类分析方法中一种基本的且应用最广泛的划分算法,它是一种已知聚类类别数的聚类算法。指定类别数为K,对样本集合进行聚类,聚类的结果由K 个聚类中心来表达,基于给定的聚类目标函数(或者说是聚类效果判别准则),算法采用迭代更新的方法,每一次迭代过程都是向目标函数值减小的方向进行,最终的聚类结果使目标函数值取得极小值,达到较优的聚类效果。使用平均误差准则函数E作为聚类结果好坏的衡量标准之一,保证了算法运行结果的可靠性和有效性。
-