LDA: 从头到尾彻底理解LDA (Latent Dirichlet Allocation)

NLP: LDA主题模型 (1) 一个函数:gamma函数(2) 四个分布:二项分布、多项分布、beta分布、Dirichlet分布(3) 一个概念和一个理念:共轭先验、贝叶斯框架(4) 两个模型:pLSA和LDA(5) 一个采样:Gibbs采样。 阅读详情
AI摘要

本文深入探讨了LDA(Latent Dirichlet Allocation)主题模型的基本原理与实现细节,包括MCMC和Gibbs Sampling算法的应用,以及如何通过Gibbs Sampling进行参数估计。

小记: 很长一段时间没有更新博客了,因为工作比较忙,也没有回答一些朋友的问题, 非常抱歉。 这篇LDA的总结已经写好了有三个多月, 一直没有时间发到优快云上, 今天周末, 本来打算在很火爆的国内MOOC上学学java,但是简单看了看,感觉水平都比较一般, 所以看不下去了,还是把这个LDA 总结一下。 

ps: 网上也有很多总结的,但是大部分都不是很系统,目前觉得july总结的最好了,但是不得不说,我自己的这份总结要比july总结的早一点,但是远远没有他总结的那么好。

ps2: 实在受不了优快云的排版系统了,真心不知道优快云的工程师们都在做什么。。。


LDA 概述

—— watkins.song

在详细的讲LDA之前, 先需要了解一些基本概念。

1. MCMC and Gibbs Sampling


reference:http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling1


MC(蒙特卡罗方法(Monte Carlo Simulation)) 是统计模拟的方法, 用来进行在连续的概率分布函数中进行采样模拟统计分布。 MC针对的问题是给定一个概率密度函数 p(x) 如何在计算机中生成这个概率密度函数的样本。


当p(x) 不是很复杂的时候, 可以采用[Box-Muller 变换] 将p(x)转换到均匀分布然后采用线性同余发生器获取样本, 但是当p(x)非常复杂的时候, 就需要别的方法。


当p(x)比较复杂的时候, 或者p(x)是高维分布的情况, 例如p(x)是以下情况时:


  • p(x)=p˜(x)/∫p˜(x)dx,而p˜(x) 我们是可以计算的,但是底下的积分式无法显式计算。

  • p(x,y) 是一个二维的分布函数,这个函数本身计算很困难,但是条件分布 p(x|y),p(y|x)的计算相对简单;如果p(x) 是高维的,这种情形就更加明显。

此时就需要使用一些更加复杂的随机模拟的方法来生成样本。MCMC(Markov Chain Monte Carlo) 和 Gibbs Sampling算法就是最常用的一种,这两个方法在现代贝叶斯分析中被广泛使用。

总结:  因为有些概率密度函数比较难计算, 所以需要采用MCMC或者Gibbs Sampling这些模拟统计的方法进行采样计算概率密度函数, 降低概率密度函数的计算复杂度。

2. Markov Chain

马氏链的数学定义很简单:

也就是状态转移的概率只依赖于前一个状态。


我们先来看马氏链的一个具体的例子。社会学家经常把人按其经济状况分成3类:下层(lower-class)、中层(middle-class)、上层(upper-class),我们用1,2,3 分别代表这三个阶层。社会学家们发现决定一个人的收入阶层的最重要的因素就是其父母的收入阶层。如果一个人的收入属于下层类别,那么他的孩子属于下层收入的概率是 0.65, 属于中层收入的概率是 0.28, 属于上层收入的概率是 0.07。事实上,从父代到子代,收入阶层的变化的转移概率如下:

table-1

markov-transition

使用矩阵的表示方式,转移概率矩阵记为

假设当前这一代人处在下层、中层、上层的人的比例是概率分布向量π0= [π0(1),π0(2),π0(3)], 那么他们的子女的分布比例将是 π1=π0P,  他们的孙子代的分布比例将是 π2=π1P=π0P2, ……,  第n代子孙的收入分布比例将是πn=πn−1P=π0Pn。

假设初始概率分布为π0=[0.21,0.68,0.11],则我们可以计算前n代人的分布状况如下:

table-2

我们发现,当n 足够大的时候,这个Pn矩阵的每一行都是稳定地收敛到π= [0.286,0.489,0.225] 这个概率分布。自然的,这个收敛现象并非是我们这个马氏链独有的,而是绝大多数马氏链的共同行为。

所有的 MCMC(Markov Chain Monte Carlo) 方法都是以这个定理(Markov Chain定理)作为理论基础的。

从初始概率分布π0 出发,我们在马氏链上做状态转移,记Xi的概率分布为πi, 则有

X0∼π0(x)

Xi∼πi(x)πi(x)=πi−1(x)P=π0(x)Pn

由马氏链收敛的定理, 概率分布πi(x)将收敛到平稳分布π(x)。假设到第n步的时候马氏链收敛,则有

所以Xn,Xn+1,Xn+2,⋯∼π(x) 都是同分布的随机变量,当然他们并不独立。如果我们从一个具体的初始状态 x0 开始,沿着马氏链按照概率转移矩阵做跳转,那么我们得到一个转移序列 x0,x1,x2,⋯xn,xn+1⋯, 由于马氏链的收敛行为, xn,xn+1,⋯ 都将是平稳分布 π(x) 的样本。

总结: Markov Chain 是一个状态转移的公式, 并且状态转移最终会实现收敛, 就像PageRank算法的网页相关性矩阵最终收敛差不多。 最终收敛以后就可以在收敛以后的概率分布函数下进行采样了。

剧透: 在LDA中为什么要使用Gibbs Sampling? 因为在LDA中根据M篇文档以及每篇文档的单词的topic分布, 计算了一个联合概率公式:

这个联合概率公式是非常难计算的, 所以需要采用Gibbs Sampling算法进行采样计算这个联合概率公式。 在这个公式中, 那么Markov Chain的转换, 是要让谁达到收敛状态呢? 因为是已经观测到的样本, 所以不要计算, 是初始计算时随机分配的topic, 所以最终的目的是要达到实现收敛, 这样在LDA的plate model中的每篇文档对应的topic 分布 和每个topic下对应的term的分布就自然也是收敛的了, 就可以通过计算LDA模型的两种多项分布的参数。


3. 继续MCMC and Gibbs Sampling

mcmc-algo-1

MCMC中存在一个称为接受率的概念,  α(i,j), 一般q(i,j)表示从状态i 转移到状态 j.

对于高维的情形,由于接受率α的存在(通常α<1), 以上 MCMC及变种算法的效率不够高。所以可以采用Gibbs Sampling提高状态转换效率以达到最快的实现收敛的概率分布状态。

gibbs-algo-1


two-stage-gibbs

二维Gibbs Sampling 算法中的马氏链转移

Gibbs Sampling 算法大都是坐标轴轮换采样的,但是这其实是不强制要求的。最一般的情形可以是,在t时刻,可以在x轴和y轴之间随机的选一个坐标轴,然后按条件概率做转移,马氏链也是一样收敛的。

将2维的Gibbs Sampling算法扩展到N维的采样算法, Gibbs Sampling过程中状态转换只是沿着一个坐标轴, 也就是说只沿着一个随机变量进行状态转换, 所以n维空间中对于概率分布p(x1,x2,⋯,xn) 可以如下定义转移矩阵:

  1. 如果当前状态为(x1,x2,⋯,xn),马氏链转移的过程中,只能沿着坐标轴做转移。沿着xi这根坐标轴做转移的时候,转移概率由条件概率p(xi|x1,⋯,xi−1,xi+1,⋯,xn) 定义;

  2. 其它无法沿着单根坐标轴进行的跳转,转移概率都设置为 0。


gibbs-algo-2

以上算法收敛后,得到的就是概率分布p(x1,x2,⋯,xn)的样本,当然这些样本并不独立,但是我们此处要求的是采样得到的样本符合给定的概率分布,并不要求独立。

总结 &剧透: 在Gibbs Sampling过程中, 每次状态转换只沿着一个变量(或者可以说是一个坐标轴)进行, 变量之间的顺序可以采用轮循。 在LDA中, Gibbs Sampling采样的过程相当于对于所有的文档的所有的单词, 也就是整体语料库里面的每一个单词都当作一个随机变量, 每一次采样的时候都选取一个单词作为随机变量, 然后根据除了这个单词的所有其他的语料决定当前单词的下一个状态(要分配的topic编号), Gibbs Sampling的过程就是不停的循环对所有的单词从新估计topic分布, 知道topic编号分布实现收敛, 不再变化, 这样就对应于最终的每篇文档的topic分布和每个 topic下 term的多项分布。

4. Gamma函数

Gamma函数:

通过分部积分的方法,可以推导出这个函数有如下的递归性质:

Γ(x) 函数可以当成是阶乘在实数集上的延拓, 如果x是整数, Gamma函数的定义则为:

Γ(n)=(n−1)!

Gamma函数将阶乘由整数域扩展到了实数域, 同时将倒数的计算由整数域扩展到了实数域。

与Gamma函数相关的一个函数:

Gamma 分布在概率统计领域也是一个万人迷,众多统计分布和它有密切关系。指数分布和χ2分布都是特殊的Gamma 分布。另外Gamma 分布作为先验分布是很强大的,在贝叶斯统计分析中被广泛的用作其它分布的先验。如果把统计分布中的共轭关系类比为人类生活中的情侣关系的话,那指数分布、Poission分布、正态分布、对数正态分布都可以是 Gamma 分布的情人。

总结: Gamma函数实现了将阶乘和倒数的计算扩展到实数域, 并且Gamma分布也是很多分配的先验分布。 之所以在这里简单的提一些Gamma分布, 是因为在Beta分布和Dirichlet分布中用到了Gamma函数。

5.  Beta Distribution & Dirichlet Distribution

Beta Distribution

Beta函数的定义为:

这个就是一般意义上的 Beta 分布!可以证明,在α,β取非负实数的时候,这个概率密度函数也都是良定义的。 上面公式中, x 可以理解为二项分布中的事件发生的概率p。

Beta分布也可以将f(x) 换成p(x) , 即表示x的概率分布函数。 α,β 的物理意义是伪计数, pseudo-count, 因为beta分布是二项分布的参数的分布, 所以α,β 作为伪计数的情况下, beta分布可以理解为二项分布的先验分布。 因为二项分布存在两种情况: 发生和不发生, 所以对应的先验分布(beta分布)有两个参数α和β, α,β分别作为二项分布的先验分布的伪计数, 即我们的先验知识告诉我们这两种时间发生的次数。

Beta分布称为二项分布的共厄先验分布, 因为:

Beta(p|α,β)+Count(m1,m2)=Beta(p|α+m1,β+m2)

上面公式可以看出, 二项分布的参数p的后验概率分布也服从Beta分布。

beta-distribution

百变星君Beta分布

Beta分布可以理解为二项分布的参数p的先验分布, 在二项分布加上观测数据以后可以得到二项分布的参数p的后验分布也是beta分布。

Beta分布的一些性质计算:

Dirichlet Distribution

Dirichlet分布是由Beta分布衍生来的, Dirichlet分布是多项分布的参数p的先验分布。 在一个多项分布中, 每一项的概率pi如何确定? 在Bayesian学派认为, 多项分布的参数p应该是服从一个概率分布的, 可以认为服从Dirichlet分布, 也就是说Dirichlet分布是多项分布的参数的分布, 被认为是“分布上的分布”。

Dirichlet分布的定义:

上面公式中,为Dirichlet分布的参数, 即多项分布的参数的分布的参数。的物理意义和Beta分布中的伪计数α和β一样, 表示在先验知识中每种事件发生的伪计数。

另外, Dirichlet分布还可以表示为:

就是归一化因子,


一般在应用中采用对称的Dirichlet分布,他和Beta 分布一样也是一个百变星君,密度函数可以展现出多种形态。

dirichlet-distribution

不同α 下的Dirichlet 分布


在多项分布中, 多项分布的参数的后验概率分布也服从Dirichlet分布,  并且Dirichlet分布和多项分布互为共厄分布。

如果p∼Beta(t|α,β), 则

如果,


Dirichlet分布中存在两个比较重要的参数, “the scale or the concentration”,  还有 “base measure” i' =i0 。

在LDA模型中, 每篇文档的topic分布服从一个多项分布, 同时这个topic分布(多项分布)的参数又服从一个Dirichlet分布。 每一篇文档的都对应一个不同的topic分布, 即多项分布。 同时, LDA中的每个topic下存在一个term的单词多项分布, 即每个topic下的单词都服从多项分布, 并且每个topic对应的多项分布的参数都服从一个Dirichlet分布, 这也是为什么LDA的名字由来, 因为存在两个隐含的Dirichlet分布。


6. 文本建模 Unigram Model


在文本中,每一篇文档都可以看作若干词的组合,  d=(w1,w2,⋯,wn)

LDA为生成模型, 同时Unigram Model也为生成模型。 Unigram Model是把所有的文档的词都作为一个语料库, 并且所有的词的分布都服从同一个多项分布, 即每个词出现的概率。 也就是所有的这些词组成的字典中, 每个词的频率。 假设词典总共有V个词, 那么多项分布的情况种类就有V个, 多项分布的参数的维度为V。

game-unigram-model

有个每个词的出现的概率,  就可以计算语料库中每个文档的生成概率:

的生成概率为:

语料库中的文档可以认为是相对独立的, 所以每个文档之间是没有相关性的, 所以可以获得整个语料库的生成概率,, 语料库的概率为:

假设语料中总的词频是N, 在所有的 N 个词中,如果我们关注每个词 vi 的发生次数 ni,那么正好是一个多项分布, 该多项分布的概率为:

此时, 语料的概率是:

注意: 要特别区分多项分布的概率计算公式和语料的生成概率计算公式, 语料的生成概率计算公式中没有全排列计算, 因为在语料中不用考虑文档以及单词的出现顺序。

我们很重要的一个任务就是估计模型中的参数,也就是问上帝拥有的这个骰子的各个面的概率是多大,按照统计学家中频率派的观点,使用最大似然估计最大化P(W),于是参数pi的估计值就是:

然而, 在上面的基础上, 贝叶斯学派认为上帝只有一个骰子是不对的, 应该上帝有无数多的骰子, 只是在生成语料库的时候上帝随机的选了一个。 这就是说, 生成语料库的模型参数(也就是多项分布的参数)应该是服从一个概率分布的, 上帝选择一个骰子的意思就是在的分布上进行采样获得一个具体的的取值,然后根据将这个取值作为多项分布的参数。 这个时候, 一般认为服从Dirichlet分布。

game-bayesian-unigram-model

Dirichlet分布则可以认为是多项分布的参数的先验分布。

在贝叶斯学派的游戏规则的假设之下,语料W产生的概率如何计算呢?  因为W中每个单词出现的概率是受影响的, 而本分服从一个Dirichlet分布,所以要对所有的可能存在的的情况进行全概率计算。 连续变量则进行积分计算:

在上面的公式中,应该如何计算? 对先验分布的一个比较好的选择就是多项分布对应的共轭分布,即 Dirichlet 分布:

就是归一化因子,

graph-model-unigram

Unigram Model的概率图模型


之前提到了以下的概念:

Dirichlet 先验 + 多项分布的数据→ 后验分布为 Dirichlet 分布

所以, 在给定语料库的基础上, 可以得知多项分布的参数的后验概率分布也服从Dirichlet分布, 我们可以计算的后验概率分布:

计算得到参数的后验概率分布以后, 就可以根据后验概率分布计算参数的估计了, 可以根据后验概率分布的期望计算参数的平均取值, 作为的估计值。的后验概率分布为, 于是:

αi 在 Dirichlet 分布中的物理意义是事件的先验的伪计数,这个估计式子的含义是很直观的:每个参数的估计值是其对应事件的先验的伪计数和数据中的计数的和在整体计数中的比例。

进一步,我们可以计算出文本语料的产生概率为:

总结: 在Unigram Model中, 所有的文档中的所有的单词都被看作属于统一个语料库, 并且都服从同样的分布(这一点和LDA是不同的, 在LDA中每一个文档都有自己的topic分布, 并且每一个topic都有自己对应的term分布)。 贝叶斯学派认为每个单词的出现概率服从多项分布, 即要生成一个新的单词有V中选择, 针对V中选择有V个不同的概率, 即构成。多项分布的参数又是一个服从Dirichlet分布的随机变量。


7. PLSA

Unigram Model过于简单, 但是很好的解释了多项分布参数的计算过程, 同时理解生成模型的过程。

在生活中, 写一篇文档总是要先决定这个文档包含哪些主题, 以及每个主题的权重(这可能就对应LDA中的每篇文档的topic分布), 然后确定了该文档包含哪些主题以后, 就需要确定在这个主题下选择该主题下的哪些能够表达该主题的单词(对应于每个主题的term分布), 然后重复选择主题和根据主题选择单词的这个过程就可以最终获取一篇指定单词数量的文章。

生成一个文本的生成模型描述:

game-plsa

上面描述中, 上帝先对一篇文档选择了一个骰子, 即确定了这篇文档的主题分布, 因为是从无数的骰子中选择的, 所以也对应了每篇文档的主题分布的参数也服从一个分布(Dirichlet分布), 然后根据这个doc-topic骰子进行topic选择, 得到topic以后再选择对应的topic-word分布, 从中选择单词。 在PLSA中每一个topic都对应一个 term 的多项分布, 这些多项分布可以表示为: , 每一个文档都对应于一个topic分布, 可以表示为: , 如果每个单词有一个编号, 那么一篇文档中每个词的生成概率为: (全概率公式)

然后可以得到一篇文档的生成概率:

然后就可以根据EM算法求解模型的参数。

总结: 貌似PLSA并没有利用Dirichlet分布, 每篇文档对应的topic分布以及每个topic对应的term分布都没有采用Dirichlet分布作为多项分布的先验分布, 没有充分利用贝叶斯理论, 所以在后来提出了基于贝叶斯理论并且使用Dirichlet分布作为先验分布的LDA模型。


8. LDA详解

在了解了上面那么多基本知识以后, 终于要聊聊LDA了, 我在最早接触LDA的时候发现没有上面的基础知识看LDA真的很费劲。

首先要讲Gibbs Sampling和模型的参会的inference, 最早我理解LDA的最大的困惑在于为神马要采用Gibbs Sampling, 事实上采用Gibbs Sampling是为了降低参数估计的复杂度, 能够实现参数估计。这个接下来会详细说明。


8.1 混合模型 & 生成模型


LDA是一个生成模型, 生成模型的示例图如下图所示:

lda-graph-model

对于LDA生成模型的理解: 假定我们需要写一篇文章, 那么这个文章可能包含多个主题, 也就是说我们先要决定我们的文章由哪些主题构成, 这些主题所占的比例如何。 有了主题分布, 也就对应于(每篇文章的主题分布),  有了主题分布, 我们就开始写文章, 在决定写一个单词的时候, 根据上图的模型, 先要由主题分布决定这个单词所属的topic, 然后有了这个单词的topic, 在根据每个topic下面的term的分布选择应该采用哪个单词。 这样重复这个过程就可以获得一篇有n个单词的文章。

LDA 生成模型中,M 篇文档会对应于 M 个独立的 Dirichlet-Multinomial 共轭结构; K 个 topic 会对应于 K 个独立的 Dirichlet-Multinomial 共轭结构。 LDA中, 每个文章都有自己的topic分布, 每个topic都对应于自己的term分布, 所有的doc-topic分布的参数都服从Dirichlet分布, 所有的topic-term分布的参数都服从Dirichlet分布。

LDA生成模型的算法过程描述如下:


因为LDA中包含了多个多项分布, 所以LDA称为混合模型, 在LDA中, 一个单词t出现的概率应该符合全概率公式, 即在所有的topic中这个单词出现的概率和:


LDA需要计算的不是全局的topic分布(global topic proportion), 而是要以文档为单位的基础上一个单词的topic分布。 这样, 可以得知LDA inference的目的为: (1), 即为每个topic下的term分布, (2) , 每个文档对应的topic分布。 最终要估计的是两个参数: 。


8.2 Likelihoods


根据LDA模型, 对于一个文档m 的完全数据的似然估计(关于所有的已知和未知参数的联合分布)为:

注释: 这里我一直觉得 “word plate”的范围错了, 我觉得不应该包括连乘符号。而且, 连乘后边继续放一个圆点后放一个条件概率, 容易让人误会圆点以后的概率也是对于所有的word都进行乘法操作。

在文档m中, 一个单词t出现的概率为 (通过计算Zm,n的边缘分布, 并且忽略多项分布的参数分布)

由每个单词出现的概率, 我们可以计算整个语料库的生成概率:

上面公式给出了两个参数的似然估计, 虽然LDA虽然是比较简单的模型, 但是直接推断这个模型的参数是非常困难的, 可以采用近似推断算法。 所以需要采用Gibbs Sampling进行采样估计。


8.3 Inference via Gibbs Sampling


在LDA模型中,隐藏的模型变量为 Zm,n, (Zm,n 表示文档m中第n个单词的 topic值), 之前一直在说要用Gibbs Sampling, 这里Zm,n 就相当于Markov Chain中的状态变量, 当Z 收敛以后, 整个语料库的每个文档的topic分布以及每个topic对应的term分布也就收敛了, 也就是和都实现收敛, 最终可以计算LDA的两个多项分布的参数。


Inference的目的是计算如下公式的概率(其中Zi = Zm,n , 这里是为了方便表示):  (因为在给定观测样本的基础上, 计算得到Z的概率分布即可以获得整个LDA模型的所有参数, 即和,  计算概率分布的目的就是看所有的语料库的单词对应的topic分布是否已经收敛了, 如果已经收敛则可以利用Z 计算得到模型参数。 因为上面提到Zm,n对应于Markov Chain的状态变量, 所以对于不同的状态的Z会有不同的概率分布, 但是当Z收敛以后, 应该不会再变化。 这里说了好多为什么要推断, 应该很清楚了。)

但是上面公式中的分母部分很难计算求得, 这就需要采用Gibbs Sampling来发挥作用了(发挥作用的意思不是可以用Gibbs Sampling计算分母, 而是采用Gibbs Sampling获得收敛的Z)。需要利用Gibbs Sampling 的全条件概率分布去模拟。 关于Gibbs Sampling的公式, 存在以下的分析。

Gibbs Sampling是一个特殊的MCMC, 并且在采样过程中轮流对不同的维度xi 进行采样, 在对维度xi采样的时候, 利用所有的其他的不包含xi 的维度的概率分布计算xi 的新的采样值, 不包含xi 的维度可以表示为: 。

Gibbs Sampling的过程描述如下:

为了获取一个Gibbs Sampling采样器, 必须得到一个univariate conditionals (or full conditionals):

对于包含隐含变量Z, 并且诶已知后验概率分布的模型, Gibbs 采样器可以表示为:

在这个Gibbs采样器中有一个联合概率分布, 我们需要计算这个联合概率分布才能获得具体的Gibbs采样器。


8.4 联合概率分布

联合概率分布可以表示为:

我们把这个公式分成两个部分分别计算, 首先是(给定语料库中每个单词的topic值, 根据topic值获得语料库的生成概率), 得到:

如果表示为另外一种形式, 则得到:

是关于的分布, 所以的计算可以通过对进行积分得到:

同样的,也可以通过以下公式得到:

然后可以通过对进行积分计算:

最后得到联合概率分布的结果:


结合上面提到的Gibbs采样器公式和联合概率公式, 可以最终得到Gibbs Sampling的采样公式为:

注释:  当看到得到这个公式以后, 我最初很迷茫有了这个公式到底怎么采样? 得到的就是一个概率, 采毛样。。。。 , 后来看了资料以后, 是需要计算当前的term (单词) 所有对应的 k 的概率取值, 这样就获得的所有的 K 个 新的这个单词将要划分的topic的值, 然后生成随机数在这个K 个topic中选择 这个单词 需要重新划分的topic 。 对于所有的单词都进行这个过程操作, 直到 Z 收敛以后。


8.5 参数估计

根据以前提到的Dirichlet分布的特征可以得知, LDA模型中对应的每个文档的topic分布和每个 topic下term的分布都服从Dirichlet分布, 并且,的后验概率分布也服从Dirichlet分布:

其中,表示第 m 篇文档中每个topic的单词数量向量(维度为 K), 表示第 k 个topic下 词典 V 中 每个单词在整个语料库中出现的次数 (维度为 V) , 其中, ,都可以根据Gibbs Sampling采样达到收敛状态后的 Z 统计得到(计算很简单)。 然后可以得到模型的参数计算:

终于通过各种分析, Gibbs Sampling计算得到了LDA的模型参数, 并且在计算LDA的Gibbs Sampling 过程中计算了联合概率分布其实在最初看论文的过程中最大的问题就是思维比较混乱, 不知到哪里的公式为什么使用, 为什么要计算联合概率分布, 为什么要计算, 等到多看几遍论文以后, 便发现所有的论证都是围绕着Gibbs Sampling进行的, 都是在为引出或者计算Gibbs Sampling公式服务的。

Gibbs Sampling的过程描述如下:


8.6 new come document

对于未知的新来的文档, 如何根据已经训练好的模型将文档表示为 topic 的向量或者获取文档的topic特征呢?

对于一个 query document , 可以看作 term 向量, 我们可以在已有的LDA模型参数的基础上计算 query document的 topic分布 的后验概率, 也可以计算文档的topic分布。 计算得到文档的 topic则可以根据这个topic分布的向量计算文档之间的相似度。

计算query document 的topic分布的过程和LDA模型的参数估计过程有一些区别, (1) 在query document的Gibbs采样过程中使用LDA模型中已经得到的和训练模型的时候使用的,  在query document的 topic分布计算过程中需要使用 已经得到参数, 即我们假设所有的topic对应的term分布都符合从语料库中得到的参数。 (2) 参数只对测试文档有效。(不知到理解的对不对。。。。)

和Gibbs Sampling一样, 首先给query document 的每一个word随机分配一个 topic , 然后进行Gibbs Sampling, 知道query document的实现收敛, 采样公式如下所示:

有了上面公式的Gibbs Sampling采样过程以后, 到达收敛之后, 就可以计算query document 的topic 分布了:


这里还有个大疑问: 在进行Gibbs Sampling的过程中, 怎么确定(计算) Z 已经收敛了呢? 貌似论文中没有提到。。。(难道根据Z的变化? 。。。)



线性判别分析(LDA)详解 入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、LDA简介 二、数学原理(以二分类为例子) 1、设定 2、每一类的均值和方差 3、目标函数 4、目标函数的求解 三、多分类LDA 四、LDA用途与优缺点 1、用途 2、优点 3、缺点 五、LDA的python应用 1、调用函数LinearDiscriminantAnalysis 2、常用参数意义 3、常用返回值 4、利用LDA进行二分类实例 5、利用LDA进 阅读详情

相关推荐

CV — 目标检测:letterbox

文章目录CV — 目标检测:letterbox一、相关概念二、代码实现(一) python代码 CV — 目标检测:letterbox 一、相关概念 letterbox: 概念: 在深度学习算法中,大多数目标检测算法由于 卷积核为方形(不排除卷积核有矩形的情况),所以模型输入图片的尺寸也需要为方形。然而大多数数据集的图片基本上为 矩形,直接将图片 resize 到正方形,会导致图片失真,比如细长图片中的物体会变畸形。 letterbox操作:在对图片进行resize时,保持原图的长宽比进行等比例缩放

pentiumCM的博客 1万+

通俗易懂的LDA模型

一、LDA模型的概念 什么是LDA模型? LDA模型是一种无监督的贝叶斯模型,即不需要手工标注训练集。LDA模型也是一种典型的词袋模型,即认为一篇文章由许多个词组成,词与词之间没有先后顺序。 LDA模型的输入为:训练文本,指定主题个数K LDA模型的输出为:每个主题Zk由哪些词组成及每个词的概率 比如:组成主题Z1的前5个词的概率:0.007*"netanyahu" + 0.007*"m...

qq_24140919的博客 1万+

LDA(Latent Dirichlet Allocation)的原理和代码实现

LDA的概要简述 LDA(Latent Dirichlet Allocation)主题模型是一种文档生成模型,也是一种非监督机器学习技术,基于贝叶斯模型的一种方法。它认为一篇文档是有多个主题的,而每个主题又对应着不同的词。在LDA的理论当中一篇文档的主题构造过程如下所示,首先是以一定的概率选择文档当中的某个词,然后再在这个词下以一定的概率选出某一个主题,这样就生成了这篇文档的第一个主题。不断重复...

领头“洋” 8240

LDA模型详解

LDA是自然语言处理中非常常用的一个主题模型,全称是隐含狄利克雷分布(Latent Dirichlet Allocation),简称LDA。作用是将文档集中每篇文档的主题以概率分布的形式给出,然后通过分析分到同一主题下的文档抽取其实际的主题(模型运行结果就是一个索引编号,通过分析,将这种编号赋予实际的意义,通常的分析方法就是通过分析每个topic下最重要的term来进行总结归纳),根据主题分布进行...

Katherine_Cai_7的博客 4万+

LDA(Latent Dirichlet Allocation)简介

LDA(Latent Dirichlet Allocation)就是一种非常有效的无监督学习的主题生成模型。因为互联网中80%的信息都是以文本的形式存储,所以主题建模、文本分类等文本挖掘技术相当重要。

Arthur-Chen的专栏 4519

LDA(Latent Dirichlet Allocation)主题模型算法

LDA(Latent Dirichlet Allocation)主题模型算法  LDA整体流程 先定义一些字母的含义: 文档集合D,topic集合TD中每个文档d看作一个单词序列,wi表示第i个单词,设d有n个单词。(LDA里面称之为word bag,实际上每个单词的出现位置对LDA算法无影响)D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC) LDA以

chenglinhust的专栏 2243

Latent Dirichlet Allocation (LDA)

文章目录LDA可以用来干什么?LDA模型简单引入与贝叶斯估计二项分布与多项分布共轭分布MCMC采样MCMC = Markov Chain(马尔科夫链)+ Monte Carlo(蒙特卡洛) LDA可以用来干什么? 我们拿到一篇文章,然后读完就基本可以知道它是讲什么的,比如是讲“中国经济发展状况”,或者是讲“中美贸易战对两国的影响”,又或者是在讲“农村里的爱情故事”…LDA就是在做一个类似的事情:让计算机读一篇文章,然后概括出来这篇文章在讲什么内容,即这篇文章的主题是什么。所以,LDA是一个主题模型(Topi

Vic_Hao的博客 3477

潜在狄利克雷分配(LDA)(latent Dirichlet allocation)

多项分布: 假设重复进行 次独立随机试验,每次实验可能出现的结果有 种,第种结果出现的次数为,第种 结果出现的概率为。如果用随机变量 表示实验所有可能出现结果的次数,其中表示第种结果出现的次数,那么随机变量服从多项分布。具体的数学定义如下: 若多元离散随机变量的概率质量函数为 : 其中,,。 则称随机变量服从参数为 的多项分布,计做。 多项分布的两个特例,二项分布和类别分布 多项分布有两个特例,一个是二项分布,一个是类别分布。 二项分布:当实验可...

大风车 3525

LDA(Latent Dirichlet allocation)

1. 贝叶斯网络 以随机变量做节点所形成的有向无环图。 朴素贝叶斯: 可以胜任许多文本分类的问题。 无法解决语料中一词多义和多词一义的问题——它更像是词法分析,而非语义分析。 如果使用词向量作为文档的特征,一词多义和多词一义会造成计算文档间相似度的不准确性。 可以通过增加“主题”的形式,一定程度的解决上述问题: 一个词可能被映射到多个主题中——一词多义 多个词可能被映射到某个主题的概率很高——多词一义 2. 主题模型 PLSA/PLSI:probabil...

zhao_crystal的博客 3044

Latent Dirichlet Allocation

主题模型LDA是一个主题模型,关于主题模型的解释有个很通俗的例子: 第一个是:“乔布斯离我们而去了。” 第二个是:“苹果价格会不会降?” 我们一眼就可以看出这两句是有关联的,第一句里面有了“乔布斯”,我们会很自然的把“苹果”理解为苹果公司的产品,它们属于了同一个主题:苹果公司。而像我之前那种计算关联度的时候,即文档之间重复的词语越多越可能相似,是无法达到这个效果的。文档之间重复的词语越多越

Lansing999的专栏 4992

LDA理解以及源码分析(一)

LDA系列的讲解分多个博文给出,主要大纲如下: LDA相关的基础知识 什么是共轭 multinomial分布 Dirichlet分布 LDA in text LAD的概率图模型 LDA的参数推导 伪代码 GibbsLDA++-0.2源码分析 Python实现GibbsLDA 参考资料 LDA相关的基础知识LDA是Blei于2002年发表的概率语言模型,被广泛应用于主题建模中,通过对文本进行潜语义

乖兔子的专栏 1万+

latent Dirichlet allocation (LDA)

转自:http://www.shamoxia.com/html/y2010/1384.html Latent Dirichlet Allocation(LDA) [pdf]模型是近年来提出的一种具有文本主题表示能力的非监督学习模型。关键所在:it posits that each document is a mixture of a small number of topics and

tangye711ndcs的专栏 3260

ARC学习(6)arc 编译器overlap 地址重叠方式使用

摘要:本文介绍了ARC编译器中使用overlap地址重叠的方法。

张一西的博客 718

Latent Dirichlet Allocation (LDA)- David M.Blei

一、预备知识:        1. 概率密度和二项分布、多项分布,在这里        2. 狄利克雷分布,在这里,主要内容摘自《Pattern Recognition and Machine Learning》第二章        3. 概率图模型,在PRML第九章有很好的介绍 二、变量表示:       1. word:word是最基本的离散概念,在自然语言处

nanjunxiao的专栏 4154

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

AS7262六通道可见光传感器:从光谱原理到物联网色彩检测实战

光谱检测是嵌入式感知领域的关键技术,其核心原理是通过特定波长的滤光片分离光线并转换为电信号,从而实现对环境光或物体反射光的成分分析。这项技术的价值在于将复杂的光学分析简化为可编程读取的数字信号,极大降低了色彩检测在物联网和智能设备中的应用门槛。在智能农业、工业分拣、环境监测等场景中,精确的光谱数据能够驱动自动化决策,例如评估植物光照条件或识别物料颜色。本文以Adafruit AS7262传感器为例,深入解析其基于硅干涉滤光片的六通道设计,并通过Arduino与Python实战,演示如何快速构建从数据采集到可

weixin_28738173的博客 596

LDA(Latent Dirichlet Allocation)主题模型

LDA于2003年由 David Blei, Andrew Ng和 Michael I. Jordan提出,因为模型的简单和有效,掀起了主题模型研究的波浪。虽然说LDA模型简单,但是它的数学推导却不是那么平易近人,一般初学者会深陷数学细节推导中不能自拔。于是牛人们看不下去了,纷纷站出来发表了各种教程。国内方面rickjin有著名的《LDA数学八卦》,国外的Gregor Heinrich有著名的《P...

CarlXie 8万+

【OpenClaw从入门到精通】第37篇:教育“龙虾”进化论——从答疑助教到全流程智能教学系统(2026实测版)

2026年,教育AI已从被动答疑的L1级进化至主动教学的L4级,清华开源的OpenMAIC平台更是打破传统慕课局限,实现互动式AI课堂。本文基于天津工业大学、西北农林科技大学等高校的真实应用案例,结合腾讯云、天翼云的实操指南,详解OpenClaw在教育场景的四层进化路径。核心内容包括:L1-L4级教育自动化架构解析、清华OpenMAIC L4级AI课堂深度拆解、从零搭建智能答疑(QQ群机器人)+作业批改+学情分析全流程系统,以及高校网络安全合规部署方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 809

Notes—Latent Dirichlet Allocation,LDA主题模型

【数学之美】 ……未完待续…… ref: 1、★★★★★★★★★★通俗理解LDA主题模型★★★★★★★★★★ 2、主题模型-LDA浅析 3、搜索背后的奥秘――浅谈语义主题计算 4、主题模型TopicModel:主题模型LDA的应用 5、David M. Blei, AndrewY. Ng, Michael I. Jordan, LatentDirichlet Allocation, ...

code_caq的博客 912

影像组学文章复现:ITHscore:通过多尺度放射学特征全面定量NSCLC肿瘤内异质性 ----小细胞肺癌肿瘤异质性评分

目的:通过计算机断层扫描(CT)图像量化非小细胞肺癌(NSCLC)的肿瘤内异质性(ITH)。 方法:整合局部辐射特征和全局像素分布模式,开发定量ITH测量-ITHscore。在六个患者队列(n = 1399)中检查ITHscore与肿瘤表型,基因型和患者预后的关联,以验证其在表征ITH方面的有效性。

xxx 1020

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

WW、forever的博客 486

Latent Dirichlet Allocation (LDA) 教程

Latent Dirichlet Allocation (LDA) 是一种主题建模技术,源自自然语言处理领域。它通过分析文本数据,自动识别隐藏的主题分布。LDA 假设文档由多个主题混合而成,每个主题又由一组词或术语概率性地构成。这个模型可以用来理解大规模文本集合中的潜在结构,比如发现相似的文章或者进行文本分类。 ## 2. 项目快速启动 首先确保已经安装了 Python 和 `numpy`, ...

gitblog_00702的博客 555

IgH EtherCAT 从入门到精通:第 4 章 网络设备驱动选型与配置

摘要:本章详细介绍了EtherCAT主站网络设备驱动的选型与配置。IgH EtherCAT Master提供Generic通用驱动和Native原生驱动两种方案:Generic驱动通过Linux Socket接口实现,兼容性强但实时性较差;Native驱动通过修改网卡驱动绕过内核协议栈,具有更低延迟和更小抖动。文章具体分析了e1000/e1000e/igb/igc等Intel网卡驱动以及r8169/8139too等Realtek驱动的配置方法,并提供了驱动选型建议。对于实时性要求高的场景,推荐使用Nativ

从事嵌入式linux android驱动开发,拥有全栈能力 304

LDA(Latent Dirichlet Allocation)隐狄利克雷分布及Gibbs采样求解

前言:LDA模型最开始是从周志华老师的机器学习的第14章最后一小节了解到的,但是书上写的很简略,看完不是很懂,而且课后题还建议自己编程实现LDA,所以上网查了下资料,以下是综合各种网上的资料之后的个人理解,欢迎批评指正。最后一篇参考文献是pLSA的,写的很详细。 是LDA是一种无监督的贝叶斯模型。也是一种主题模型,它可以将文档集中的每篇文档按照概率分布的形式给出。还是一种无监督学习,在训练时不需要手工标注的训练集,需要的是文档集和指定主题的个数。它是一种典型的词袋模型,它认为一篇文档是由一组词组成的集合,词

nilgnaw的博客 1373

深入RKNN Toolkit2:自定义算子与内存优化秘籍

本文系统探讨了RKNNToolkit2在模型转换中的关键技术与优化策略。首先介绍了该工具包的基础功能及模型转换流程,重点阐述了自定义算子的实现方法,包括算子分析、代码编写和注册集成等步骤,并以ReduceLogSumExp算子为例进行案例分析。在内存优化方面,详细论述了模型量化、内存复用和参数配置等策略,通过具体案例展示优化效果。最后结合智能安防项目实践,分享了YOLOv5模型部署经验及问题解决方案。文章指出,随着AI技术发展,RKNNToolkit2将在算子支持、量化技术和硬件适配等方面持续优化,为边缘计

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1389

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NLP中的主题模型:LDA(Latent Dirichlet Allocation, 潜在狄利克雷分配)

主题模型是一种用于发现文档集合中潜在主题的概率生成模型。其中,LDA(Latent Dirichlet Allocation, 潜在狄利克雷分配)是最著名的主题模型之一。在 LDA 中,狄利克雷分布起到了核心作用,用于建模文档-主题分布和主题-单词分布。

阿正的梦工坊 4356

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: PCA的应用示例
下一篇: 从头到尾彻底理解KMP
watkins
博客等级 码龄18年 1277粉丝 246原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值