NLP: LDA主题模型

article/2025/11/10 11:44:23

Essence本质:LDA模型主要包括主题分布θ词语分布\Phi

  • 主题分布:各个主题在文档中出现的概率分布。
  • 词语分布:各个词语在某个主题下出现的概率分布。

pLSA模型中这两个分布是固定的,由期望最大化EM(Expectation Maximization)算法求参;

而LDA模型中这两个分布是随机的,由Dirichlet分布生成,而Dirichlet分布的参数α和β由Gibbs采样生成。


目录

1. 简介

1.1 LDA overall framework 

1.2 Concept

1.3 对比:词袋模型和LDA模型

1.4 LDA模型生成文档过程

2. LDA基础知识 

2.1 Gamma函数

2.2 伯努利分布

2.3 二项分布Binomial Distribution

2.4 多项分布Multinomial Distribution

2.5 Beta分布,二项分布的共轭先验分布

2.6 Dirichlet分布,多项分布的共轭先验分布

2.7 先验分布与后验分布

3. LDA主题模型

3.1 频率派与贝叶斯派

3.2 LDA基础模型

3.2.1 Unigram model一元模型

3.2.2 Mixture of unigrams model 

3.3 pLSA模型(Probabilistic latent semantic analysis)

3.3.1 steps: pLSA得到"文档-词项"生成模型的步骤

3.3.2 example: pLSA模型生成文档

3.3.3 Problem: 词袋模型,未关注词与词之间的顺序

3.3.4 Understanding: pLSA模型

3.3.5 根据文档反推其主题分布

3.3.6 EM算法

 3.3.6.1 E-step

 3.3.6.2 M-step

 3.4 LDA模型生成文档过程

3.5 pLSA与LDA区别

3.6 Gibbs采样

4. LDA codes

4.1 LDA implementation 1

4.2 LDA implementation 2

4.3 Ida2vec implementation


1. 简介

1.1 LDA overall framework 

(1) 一个函数:gamma函数

(2) 四个分布:二项分布、多项分布、beta分布、Dirichlet分布

(3) 一个概念和一个理念:共轭先验、贝叶斯框架

(4) 两个模型:pLSA和LDA

(5) 一个采样:Gibbs采样

1.2 Concept

LDA(Latent Dirichlet Allocation)主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出

1.3 对比:词袋模型和LDA模型

词袋模型:推测一篇文章是如何生成的

以一定的概率选取某个主题,再以一定的概率选取那个主题下的某个单词,不断重复这两步,最终生成一篇文档。(其中不同颜色的词语分别对应上图中不同主题)

 LDA模型:根据给定的training文档,反推其主题分布

各篇文章分别都写了些啥主题,且各篇文章中各个主题出现的概率大小(主题分布)是啥

1.4 LDA模型生成文档过程

在LDA topic model中,文档生成方式如下:

1) 从Dirichlet分布α中取样生成文档i的主题分布θi;

2) 从主题多项分布θi中取样生成文档第j个词的主题Zi,j

3) 根据主题Zi,j,从Dirichlet分布β中取样生成主题Zi,j对应的词语分布\Phi z_{i,j}

4) 从词语多项分布\Phi z_{i,j} 中采样最终生成词语Wi,j

 其中,Beta分布是二项分布的共轭先验概率分布,而Dirichlet分布是多项式分布的共轭先验概率分布。

2. LDA基础知识 

2.1 Gamma函数

\Gamma (x) = \int_{0}^{\infty } t^{x-1}e^{-t}dt

2.2 伯努利分布

伯努利分布就是最简单的0-1分布,搞科学的这群人就喜欢炒概念!!!

p(x=0)=p; p(x=1)=1-p

2.3 二项分布Binomial Distribution

C_{n}^{k}p^{k}(1-p)^{n-k}

2.4 多项分布Multinomial Distribution

二维分布扩展到多维的情况

p(x_{1}, x_{2}, ...,x_{k}; n, p_{1}, p_{2}, ...,p_{k}) = \frac{n!}{x_{1}!x_{2}!...x_{k}!} p_{1}^{x_{1}}p_{2}^{x_{2}}...p_{k}^{x_{k}}

2.5 Beta分布,二项分布的共轭先验分布

给定参数α>0和β>0,取值范围为[0,1]的随机变量x的概率密度函数:

f(x; \alpha ,\beta ) = \frac{1}{B(\alpha, \beta)} x^{\alpha-1} (1-x)^{\beta-1}

其中,\frac{1}{B(\alpha, \beta)} = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}\Gamma(x)是gamma函数

2.6 Dirichlet分布,多项分布的共轭先验分布

Dirichlet分布是Beta分布在高维上的推广

f(x_{1},x_{2},...,x_{k}; \alpha_{1}, \alpha_{2},..., \alpha_{k}) = \frac{1}{B(x)}\prod _{i=1}^{k}x_{i}^{\alpha _{i}-1}

2.7 先验分布与后验分布

  •  先验分布:即根据已有数组的概率分布,推测未发生事件的概率。e.g. 已有天气数据,推测明天是否下雨。
  • 后验分布:即根据预测事件发生概率,分析已有数据的概率分布。e.g. 已经天气预报数据因为涂鸦丢失而损坏了一部分,只能得到部分概率分布,这时根据明天下雨事件的概率,推测已有天气数据的概率分布。

3. LDA主题模型

3.1 频率派与贝叶斯派

  • 频率派:把需要推断的参数θ看作是固定的未知数。即概率θ是未知的,但最起码是确定的一个值,同时,样本x是随机的,所以频率派重点研究样本空间,大部分的概率计算都是针对样本x的分布。
  • 贝叶斯派:待估计的参数θ是随机的,服从一定的分布,而样本x是固定的,由于样本是固定的,所以他们重点研究的是参数θ的分布

3.2 LDA基础模型

w, 表示词语。V表示所有单词的个数(固定值)

z, 表示主题。K是主题的个数(预先设定的固定值)

D=(d1,d2,...,dm)表示语料库。其中m是语料库中的文档数

d=(w1,w2,...,wn)表示文档。其中n表示一篇文档中单词数(随机变量)

3.2.1 Unigram model一元模型

Unigram model假设文本中的词服从Multinomial分布

对于文档d=(w1,w2,...,wn),用p(wn)表示词wn的先验概率,生成文档d的概率:

p(d)=\prod _{n=1}^{N}p(w_{n})

p是词服从Multinomial分布的参数

α是Dirichlet分布(即Multinomial分布的先验分布)的参数

3.2.2 Mixture of unigrams model 

该模型的生成过程:给某个文档选择一个主题z,再根据该主题生成文档,该文档中的所有词都来自一个主题。假设主题有z1,z2,...,zk,生成文档d的概率为:

p(d)=p(z_{1}) \prod_{n=1}^{N}p(w_{n}|z_{1})+...+p(z_{k}) \prod_{n=1}^{N}p(w_{n}|z_{k}) \\ =\sum_{z}p(z)\prod_{n=1}^{N}p(w_{n}|z)

3.3 pLSA模型(Probabilistic latent semantic analysis)

3.3.1 steps: pLSA得到"文档-词项"生成模型的步骤

p(di})--表示海量文档中某篇文档被选中的概率

p(wj|di)--表示词wj在给定文档di中出现的概率

p(zk|di)--表示某个主题zk在给定文档di下出现的概率

p(wj|zk)--表示具体某个词wj在给定主题zk下出现的概率,与主题关系越密切的词,其条件概率p(wj|zk)越大。

(1) 按照概率p(di)选择一篇文档di

(2) 选定文档di后,从主题分布中按照概率p(zk|di)选择一个隐含的主题类别zk

(3)选定zk后,从词语分布中按照概率p(wj|zk)选择一个词wj。

3.3.2 example: pLSA模型生成文档

requirement: 你要写M篇文档,每篇文档由不同的词组成。

condition: 由K个可供选择的主题,由V个可选的词。

(1)每写一篇文档,就制作一颗K面的"文档-主题"骰子,和K个V面的"主题-词项"骰子。比如:令K=3,V=3,得到

(2) 每写一个词,先扔该"文档-主题"骰子选择主题,得到主题结果后,使用和主题对应的那颗"主题-词项"骰子,扔该骰子选择要写的词。

主题分布:各个主题在文档d中出现的概率分布比如{教育:0.5,经济:0.3,交通:0.2}这是一个多项分布multi-nomial

同理,词项分布也是一个多项分布。先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该教育主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学

(3) 最后,重复扔"文档-主题"骰子和"主题-词项"骰子,重复N次(产生N个词),完成一篇文档,重复这产生一篇文档的方法M词,就完成M篇文档。

3.3.3 Problem: 词袋模型,未关注词与词之间的顺序

3.3.4 Understanding: pLSA模型

pLSA模型假设一组共现(co-occurrence)词项关联着一个隐含的主题类别zk∈{z1,z2,...,zk}。即假定某个主题zk下单词wi容易和某个单词wj共同作用,形成共现,e.g. 小米加步枪

3.3.5 根据文档反推其主题分布

这是主题建模的目的:自动地发现文档training set中的主题分布。

p(wj|di) = \sum_{k=1}^{K}p(w_{j}|z_{k})p(z_{k}|d_{i})

p(d_{i}, w_{j}) = p(d_{i})p(w_{j}|d_{i}) \\ =p(d_{i})\sum_{k=1}^{K}p(w_{j}|z_{k})p(z_{k}|d_{i})

由于p(di)和p(wj|di)可以事先算出,用EM算法估计pLSA模型的两个位置参数p(wj|zk)和p(zk|di)。

3.3.6 EM算法

Essence本质:先随机设置初始概率,然后通过期望求出贡献,用极大似然估计新的概率,最终在反复迭代后,概率值极大逼近真实概率

EM算法的思想非常简单,分为两步:Expection-Step和Maximization-Step。

  • E-step主要通过观察数据和现有模型来估计参数,然后用这个估计的参数值来计算似然函数的期望。
  • M-step是寻找似然函数最大化时对应的参数。

由于EM算法保证在每次迭代之后似然函数都会增加,所以函数最终会收敛。

Example:假设有两枚硬币A和B,它们的随机抛掷结果如下如所示:

我们很容易估计出两枚硬币抛出正面的概率: 

θA=0.8;θB=0.45

现在我们加入隐变量,抹去每轮投掷的硬币标记:

 碰到这种情况,我们该如何估计θA和θB的值?

我们多了一个隐变量Z=(z1,z2,z3,z4,z5),代表每一轮所使用的硬币,我们需要知道每一轮抛掷所使用的硬币这样才能估计θA和θB的值,但估计隐变量Z我们又需要知道θA和θB的值,才能用极大似然估计法去估计出Z。这样就陷入了一个鸡生蛋还是蛋生鸡的问题。

Solution:其解决办法就是先随机初始化θA和θB,然后用去估计Z,然后基于Z按照最大似然概率去估计新的θA和θB,循环至收敛

随机初始化θA=0.6,θB=0.5。

对于第一轮来说,如果是硬币A,得出5正5反的概率为0.6^{5}*0.4^{5} ;如果是硬币B,得到 5 正 5 反的概率为:0.5^{5}*0.5^{5}。我们可以算出使用硬币A和使用硬币B的概率分别为:

p_{A}=\frac{0.6^{5}*0.4^{5}}{(0.6^{5}*0.4^{5})+(0.5^{5}+0.5^{5})}=0.45

p_{B}=\frac{0.5^{5}+0.5^{5}}{(0.6^{5}+0.4^{5})+(0.5^{5}+0.5^{5})}=0.55

 3.3.6.1 E-step

从期望的角度来看,对于第一轮抛掷,使用硬币A的概率是0.45,使用硬币B的概率是0.55。同理其他轮。这一步我们实际上是估计出了Z的概率分布,这就是E-step。

结合硬币A的概率和上一张投掷结果,我们利用期望可以求出硬币A和硬币B的贡献。

H: 0.8*9=7.2

T: 0.8*1=0.8

 3.3.6.2 M-step

然后用极大似然估计来估计新的θA 和θB。

\theta'_{A}=\frac{21.3}{21.3+8.6}=0.71

\theta'_{B}=\frac{11.7}{11.7+8.4}=0.58

这步就对应了M-step,重新估计出了参数值。

如此反复迭代,我们就可以算出最终的参数值。

 3.4 LDA模型生成文档过程

LDA就是在pLSA基础上加层贝叶斯框架,文档生成过程如下:

(1) 按照先验概率p(di)选择一篇文档。

(2) 从Dirichlet分布α中取样生成文档di的主题分布θi,即主题分布θi是由超参数α的Dirichlet分布生成的。

(3)从主题的多项式分布θi中取样生成文档di第j个词的主题Zi,j

(4) 从Dirichlet分布β中取样生成主题Zi,j对应的词语分布\Phi_{zi,j}

(5) 从词语的多项式\Phi_{zi,j}分布中采样最终生成词语Wi,j。

3.5 pLSA与LDA区别

 (1) 生成文档过程不同

        在pLSA中,主题分布和词分布是唯一确定的。{教育:0.5,交通:0.3}

        在LDA中,主题分布和词分布不再是唯一确定的,而是由Dirichlet先验随机确定。可能是{教育:0.5,交通:0.3},也可能是{教育:0.4,交通:0.4}

(2) 反推 -> 估计未知参数的方式不同

        pLSA模型:EM算法

        LDA:Gibbs采样

3.6 Gibbs采样

Essence本质:以条件概率 -> 模拟联合概率分布

  • 条件:需要知道条件概率
  • 思想:Gibbs采样是Markov Chain Monte Carlo(MCMC)的一种算法,MCMC借助Markov链的平稳分布特征模拟高维概率分布

        Gibbs采样是通过条件分布采样模拟联合分布,再通过模拟的联合分布直接推导出条件分布,以此循环。当Markov链经过burn-in阶段,消除初始参数的影响,到达平稳状态后,每一次状态转移都可以生成待模拟分布的一个样本。

        e.g. 跳过初始的一定数量的单元(比如100个),然后隔一定的数量取一个单元(比如隔20个取一个),这样sample的单元逼近联合分布的

  • 意义:多维/高维(2维以上)积分、期望或联合分布是很难计算的,这时才需要Gibbs采样,得到近似解
  • 例子:

甲只能;E:吃饭、学习、打球,
  时间;T:上午、下午、晚上,
  天气;W:晴朗、刮风、下雨。
  现在要一个sample,这个sample可以是:打球+下午+晴朗。

Conditionp(E|T,W),p(T|E,W),p(W|E,T)。现在要做的就是通过这三个已知的条件分布,再用gibbs sampling的方法,得到联合分布

首先随便初始化一个组合,i.e. 学习+晚上+刮风,
  然后依条件概率改变其中的一个变量。
  具体说,假设我们知道晚上+刮风,我们给E生成一个变量,比如,学习-》吃饭。我们再依条件概率改下一个变量,根据学习+刮风,把晚上变成上午。类似地,把刮风变成刮风(当然可以变成相同的变量)。这样学习+晚上+刮风->吃饭+上午+刮风

同样的方法,得到一个序列,每个单元包含三个变量,也就是一个马尔可夫链。然后跳过初始的一定数量的单元(比如100个),然后隔一定的数量取一个单元(比如隔20个取1个)。这样sample到的单元,是逼近联合分布的。

4. LDA codes

4.1 LDA implementation 1

github address: topic_models/LDA-demo at master · laserwave/topic_models · GitHub

python-codes package编解码包

codes.encode(obj, encoding='utf-8', errors='strict'),使用encoding指定的编解码器对obj进行编码,类似str.encode()方法

codes.decode(obj, encoding='utf-8', errors='strict'),使用encoding指定的编解码器对obj进行解码,类似str.decode()方法

4.2 LDA implementation 2

github address: git@github.com:DengYangyong/LDA_gensim.git

常用函数:

  • genism.doc2bow()方法,转化为单一向量。该方法只考虑词频,不考虑词语间的位置关系

(1) slice。将分词后的字符串文档切分成词语列表。

(2) 构建词典dictionary。词典是所有文档所有单词的集合,并且记录了各词的出现次数。 <- 将词语映射到数字+只考虑词频

Dictionary = corpora.Dictionary(text)

(3) 生成词典后,将其转化为向量形式。

Corpus = [dictionary.doc2bow(text) for text in texts]

<- genism内部用稀疏矩阵表示。因为单词总量极大,而一篇文档单词数有限,用密集矩阵来表示的话造成内存浪费。

4.3 Ida2vec implementation

essence本质:word2vec + document representation vector(来自于LDA而非paragraph vector) 

LDA: topic distribution * each document's topic probability =each document representation vector

each topic vector is similar to word vectors in the same space

document vector is a weighted sum of topic vectors

lda2vec {word2vec: model word-to-word relationships

              {LDA: model document-to-word relationships


http://chatgpt.dhexx.cn/article/SrjJtSs4.shtml

相关文章

LDA算法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、LDA是什么&#xff1f;二、公式推导三、PCA和LDA的区别总结 前言 线性判别分析&#xff08;LDA&#xff09;是一种有监督学习算法&#xff0c;同时经常被用…

自然语言处理7——LDA

文章目录 1. PLSA、共轭先验分布&#xff1b;LDA主题模型原理1.1 PLSA1.2 共轭先验分布1.2.1 共轭先验分布的参数确定1.2.2 常见的共轭先验分布 1.3 LDA主题模型原理 2. LDA应用场景3. LDA优缺点4. LDA 在sklearn中的参数学习5. 使用LDA生成主题特征&#xff0c;在之前特征的基…

matlab lda数据降维,LDA有标签数据降维

之前无标签数据降维PCA,那么像下图带有标签数据,如果用PCA降维将会投影到v轴上,这个投影方差最大,数据将变成不可分状态,LDA将把数据投影加上已有分类这个变量,将数据投影到u轴上 假设原数据分成n类,用矩阵Di表示i类数据,均值向量mi,将设将数据投影到向量w上后,均值分…

LDA模型,主题聚类模型

自然语言处理--LDA主题聚类模型 LDA模型算法简介&#xff1a; 算法 的输入是一个文档的集合D{d1, d2, d3, ... , dn}&#xff0c;同时还需要聚类的类别数量m&#xff1b;然后会算法会将每一篇文档 di 在 所有Topic上的一个概率值p&#xff1b;这样每篇文档都会得到一个概率的集…

LDA主题模型笔记

Table of Contents 1、写在前面 2、数学知识 3、文本建模 4.LDA主题模型实战 1、写在前面 在机器学习领域&#xff0c;关于LDA有两种含义&#xff0c;一是线性判别分析&#xff08;Linear Discriminant Analysis&#xff09;&#xff0c;是一种经典的降维学习方法&#xf…

LDA 主题模型

背景 我们生活中总是产生大量的文本&#xff0c;分析这些观察到的语料库是如何生成的就需要对文本进行建模。常见的文本建模方法包括&#xff1a;Unigram、PLSA、LDA 、词向量模型&#xff08;CBOW、Skip-gram&#xff09;等。LDA模型是一种主题模型&#xff08;topic model&a…

lda php,LDA主题分析代码实现

主题文本分析&#xff1a; 首先读取txt文本&#xff0c;并删除stop_list中存放的停止词汇 f open(..\\LDA_test.txt) texts [[word for word in line.strip().lower().split() if word not in stop_list] for line in f] print(Text ) pprint(texts)  #输出格式处理好的文本…

详解 LDA

详解 LDA 详解 LDA基本概念什么是LDALDA 核心思想LDA 简单二分类实例 实现步骤&#xff08;python&#xff09;第一步 标准化处理第二步 计算每一类别特征的均值向量第三步 计算类间散布矩阵S(B)和类内散布矩阵S(W)第四步 计算矩阵S(W)^(-1)S(B)的特征值和对应的特征向量第五步…

LDA 指南

『本文转自&#xff1a;https://wdxtub.com/2017/05/03/lda-guide/』 LDA 作为文本分析中非常有用的算法&#xff0c;无论是在学术界还是工业界都已被广泛运用。本文是写给自己的 LDA 理解指南。 更新历史 2017.05.03: 完成初稿 关于 LDA 算法&#xff0c;网上的资料不胜枚举…

LDA

关于降维算法 机器学习领域中所谓的降维就是指采用某种映射方法&#xff0c;将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y&#xff0c;其中x是原始数据点的表达&#xff0c;目前最多使用向量表达形式。 y是数据点映射后的低维向量表…

LDA详解

【几个问题待解决&#xff1a;1.LDA的先计算联合概率体现在哪里 2.对于theta 的采样的理解&#xff0c;下文中的theta1 &#xff0c;theta2等其实是指theta向量中的第一个&#xff0c;第二个等&#xff0c;也就是不同文章的不同单词的主题&#xff0c;固定其他&#xff0c;分别…

LDA的通俗理解

1.PLSA模型 在讲解LDA模型之前&#xff0c;与LDA模型最为接近的便是下面要阐述的这个pLSA模型&#xff0c;给pLSA加上贝叶斯框架&#xff0c;便是LDA。 1.1什么是pLSA模型 我们假定一篇文档只由一个主题生成&#xff0c;可实际中&#xff0c;一篇文章往往有多个主题&#xff…

LDA模型详解

LDA是自然语言处理中非常常用的一个主题模型&#xff0c;全称是隐含狄利克雷分布&#xff08;Latent Dirichlet Allocation&#xff09;&#xff0c;简称LDA。作用是将文档集中每篇文档的主题以概率分布的形式给出&#xff0c;然后通过分析分到同一主题下的文档抽取其实际的主题…

机器学习——LDA(线性判别分析)与人脸识别

忆如完整项目/代码详见github&#xff1a;https://github.com/yiru1225&#xff08;转载标明出处 勿白嫖 star for projects thanks&#xff09; 目录 系列文章目录 一、LDA的概念与原理 1.LDA简介 2.LDA算法模型 3.LDA的不足与优化 二、LDA运用于人脸识别 1.预处理 1…

线性判别分析(LDA)详解

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、LDA简介 二、数学原理&#xff08;以二分类为例子&#xff09; 1、设定 2、每一类的均值和方差 3、目标函数 4、目标…

LDA算法——线性判别

目录 一、前言 二、什么是LDA&#xff1f; 三、LDA原理 1.二分类问题 2.多分类问题 3.几点说明 四、算法实现 一、前言 之前我们已经介绍过PCA算法&#xff0c;这是一种无监督的降维方法&#xff0c;可以将高维数据转化为低维数据处理。然而&#xff0c;PCA总是能适用吗&…

主题模型:LDA原理详解与应用

LDA算法简介&#xff1a; LDA是一种基于贝叶斯思想的无监督的聚类算法&#xff0c;广泛用于文本聚类&#xff0c;文本分析&#xff0c;文本关键词等场景。具体的&#xff0c;算法 的输入是一个文档的集合D{d1, d2, d3, ... , dn}&#xff0c;同时还需要主题Topic的类别数量m&a…

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布&#xff0c;可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序&#xff0c;通常使用词袋特征&#xff08;bag-of-word feature&#xff09;来…

制作属于自己的个人博客-超详细教程

SpringBoot个人博客 一.博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二.博客效果在线预览 http://blog.ShaoxiongDu.top 三.项目技术 后端SpringBoot框架 分为控制层(Controller) 业务层(Service) 数据持久层(Dao) 按照Spring…

如何搭建个人博客

新的安装方式&#xff1a;(强烈推荐&#xff0c;简单方便) 利用dockernginx配置halo博客 先碎碎念一下&#xff0c;最近在学习springboot项目&#xff0c;在b站跟着up主研究如何写一个简易的博客来着&#xff0c;后来发现可以直接简易的搭建一个博客&#xff08;都不用写代码&a…