LDA(latent dirichlet allocation)

1.LDA介绍


LDA假设生成一份文档的步骤如下:

模型表示:

单词w:词典的长度为v,则单词为长度为v的,只有一个分量是1,其他分量为0的向量

$(0,0,...,0,1,0,...,0,0)$

文档W:  单词的组合,$(w_1,w_2,...,w_N)$,可以看成是 $v*N$ (词典长度*单词个数)的矩阵

语料库D:文档的集合,${W_1,W_2,...W_M}$

主题:认为主题个数固定已知,为k个

dirichlet参数α: 长度为k的向量,每个分量都大于0

文档的主题分布θ:  由dirichlet分布产生,每份文档的主题分布都有差异,是长度为k的向量

每个单词的主题z:  由参数为θ的多项式分布产生

对应主题下的单词分布β:$k*v$的矩阵,k对应k个主题,v对应词典长度,每一行相加为1,表示选定一个主题后,一定会选到一个单词

图形表示:

M份文档(语料库)的主题分布都由同一个dirichlet分布产生

一份文档的N个单词的主题,都有主题分布产生

给定主题后,在该主题的单词下,选择一个单词

模型目标:

1.得到α,β

2.得到每份文档的主题分布θ,和每个单词的主题分布z


2.LDA求解(EM算法)



LDA模型可以表示为以下公式:

$p(\theta,z,w|\alpha,\beta)=p(\theta|\alpha)\prod_{n=1}^Np(z_n|\theta)p(w_n|z_n,\beta)$

(给定Dirichlet分布参数$\alpha$,生成$\theta$;对于每个单词,给定$\theta$选择出主题$z_n$,最后给定主题$z_n$,从参数为$\beta_{z_n}$的多项分布选择生成单词)

$p(w|\alpha,\beta)=\int p(\theta|\alpha)\prod_{n=1}^N\sum_{z_n}p(z_n|\theta)p(w_n|z_n,\beta)d\theta$

(对$\theta$,$z_n$边缘化)

$p(\theta,z|\alpha,\beta)=\frac{p(\theta,z,w|\alpha,\beta)}{p(w|\alpha,\beta)}$

求解隐变量$theta$,$z$的后验分布,需要求解$p(w|\alpha,\beta)$,发现由于¥\theta¥和$\beta$的关联性,难以求解

尝试使用$\theta$的后验分布(参数为$\gamma$的Dirichlet分布)和$z_n$的后验分布(参数为$\phi_n$),模型表示为:

$q(\theta,z|\gamma,\phi)=q(\theta|\gamma)\prod_{n=1}^Nq(z_n|\phi_n)$

用$q$近似$p$,则两个分布之间的差异要最小,定义KL散度

$D(q||p)=\sum qlog\frac{q}{p}=E_q(logq)-E_q(logp)=E_q(logq)-E_q(log\frac{p(\theta,z,w|\alpha,\beta)}{p(w|\alpha,\beta)})\\ \ \ \quad=E_q(logq)-E_q(logp(\theta,z,w|\alpha,\beta))+E_q(logp(w|\alpha,\beta))\\ \ \ \quad=^{\color{Red}{[1]}}E_q(logq)-E_q(logp(\theta,z,w|\alpha,\beta))+logp(w|\alpha,\beta)$

$\color{Red} {[1]}$由于$p(w|\alpha,\beta)$和$q(\theta,\beta)$没关系,所以可以把$E_q$去掉

记$L=E_q(logp(\theta,z,w|\alpha,\beta))-E_q(logq)$

$\color{Red} {logp(w|\alpha,\beta)=L+D(q||p)}$

该公式是EM求解LDA模型的核心:

1.固定$\alpha$,$\beta$,最小化KL散度,就相当于最大化L

E-step:对于每一份文档,调整$\gamma$,$\phi$最大化$L$

2.固定每份文档的$\gamma$,$\phi$,要最大化似然函数

$\sum_{d=1}^Mlogp(w_d|\alpha,\beta)=\sum_{d=1}^M L +\sum_{d=1}^M D(q||p)$

$\sum_{d=1}^M L$作为似然函数的一个下界,最大化L,逼近似然函数

M-step:  调整$\alpha$,$\beta$,最大化$L$


3.E-step M-setp



$L=E_q(logp(\theta,z,w|\alpha,\beta))-E_q(logq(\theta,z|\gamma,\phi))\\\ \ \, =E_q(logp(\theta|\alpha)p(z|theta)p(w|z,\beta))-E_q(logq(\theta|\gamma)q(z|\phi))\\\ \ \,=E_q(logp(\theta|\alpha))_{[1]}+E_q(logp(z|\theta))_{[2]}+E_q(logp(w|z,\beta))_{[3]}-E_q(logq(\theta|\gamma))_{[4]}-E_q(logq(z|\phi))_{[5]}$
$[1]=\int q(\theta|\gamma)log [\frac{\Gamma(\sum_i \alpha_i)}{\prod_i\Gamma(\alpha_i)}\prod_i \theta_i^{\alpha_i-1}]d\theta\\\ \ \ \ =\int q(\theta|\gamma)(log\Gamma(\sum_i \alpha_i)-\sum_i log\Gamma(\alpha_i)+\sum_i (\alpha_i-1)log\theta_i)d\theta\\\ \ \ \ =log\Gamma(\sum_i \alpha_i)-\sum_i log\Gamma(\alpha_i)+\sum_i (\alpha_i-1)(\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))$
$[2]=\int q(\theta|\gamma)\sum_{n=1}^N \sum_i \phi_{ni}log\theta_i) d\theta \\\ \ \ \ = \sum_{n=1}^N \sum_i \phi_{ni}(\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))$
$[3]=\sum_{n=1}^N \sum_i \sum_{j=1}^V \phi_{ni}w_n^jlog\beta_{ij}$ $w_n^j$表示$w_n$的第j个分量
$[4]=\int q(\theta\gamma)log [\frac{\Gamma(\sum_i \gamma_i)}{\prod_i\Gamma(\gamma_i)}\prod_i \theta_i^{\gamma_i-1}]d\theta\\\ \ \ \ =log\Gamma(\sum_i \gamma_i)-\sum_i log\Gamma(\gamma_i)+\sum_i (\gamma_i-1)(\Psi(\gamma_i)-\Psi(\sum_j \gamma_i))$
$[5]=\sum_{n=1}^N \sum_i \phi_{ni} log \phi_{ni}$

E-step(固定$\alpha$,$\beta$,对每份文档优化$\gamma$,$\phi$,以最大化L)
1.优化$\phi$
L中和$\phi$相关项:
$L_{[\phi]}=\sum_{n=1}^N \sum_i \phi_{ni}(\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))+\sum_{n=1}^N \sum_i \sum_{j=1}^V \phi_{ni}w_n^jlog\beta_{ij}+\sum_{n=1}^N \sum_i \phi_{ni} log \phi_{ni}$
限制条件为:$\sum_i \phi_{ni}=1$,使用拉格朗日乘数法,加$\lambda(\sum_i \phi_{ni}-1)$,对$\phi_ni$求导得到:
$\frac{\partial L}{\partial \phi_{ni}}=\Psi(\gamma_i)-\Psi(\sum_j \gamma_j)+log(\beta_{iv}-log\phi_{ni})-1+\lambda$ $beta_{iv}$表示第i个主题下单词$w_n$出现的概率
令上式为0
$\phi_{ni}=\beta_{iv}exp(\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))exp(\lambda-1)$
注意:在实际代码中,在更新完$\phi_{ni}$后,需要进行正规化(使相加为1),所以后面的公共项$exp(-\Psi(\sum_j \gamma_j))exp(\lambda-1)$不用计算
2.优化$\gamma$
L中和$\gamma$有关的项:
$L_{[\gamma]}=\sum_i (\alpha_i-1)(\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))+\sum_{n=1}^N \sum_i \phi_{ni}(\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))-log\Gamma(\sum_i \gamma_i)+\sum_i log\Gamma(\gamma_i)-\sum_i (\gamma_i-1)(\Psi(\gamma_i)-\Psi(\sum_j \gamma_i))\\ \ \ \ \ \ \ =\sum_i (\Psi(\gamma_i)-\Psi(\sum_j \gamma_j))(\alpha_i+\sum_n \phi_{ni}-\gamma_i)-log\Gamma(\sum_i \gamma_i)+\sum_i log\Gamma(\gamma_i)$
对$\gamma_i$求导得到:
$\frac{\partial L}{\partial \gamma_i}=\Psi ‘(\gamma_i)(\alpha_i+\sum_n \phi_{ni}-\gamma_i)-\Psi ‘(\sum_j \gamma_j)\sum_j(\alpha_j+\sum_n \phi_{nj}-\gamma_j)$
令上式为0
$\gamma_i=\alpha_i+\sum_n \phi_{nj}$
代码实现中需要初始化$\gamma_i=\alpha_i+N/k$($Dir(\gamma)$为后验分布,在给定每个单词的主题后,可以计算得到$\gamma$的值)

M-step(固定每份文档的$\gamma$,$\phi$,优化$\alpha$,$\beta$,以最大化$\sum_{d=1}^ML$,提高似然函数的下界)
1.优化$\beta$
L中和$\ beta $相关的项,加上拉格朗日乘子式($\sum_{j=1}^V \beta_{ij}-1=0$):
$\sum_{d=1}^ML_{[\ beta]}=\sum_{d=1}^M\sum_{n=1}^{N_d}\sum_{i=1}^k\sum_{j=1}^V \phi_{dni}w_{dn}^jlog\beta_{ij}+\sum_{i=1}^k\lambda_i(\sum_{j=1}^V \beta_{ij}-1)$
对$\beta_{ij}$求导:
$\frac{\partial L}{\partial \beta_{ij}}=\sum_{d=1}^M\sum_{n=1}^{N_d}\phi_{dni}w_{dn}^j/\beta_{ij}+\lambda_i$
令上式为0
$\beta_{ij}=-\frac{1}{\lambda_i}\sum_{d=1}^M\sum_{n=1}^{N_d}\phi_{dni}w_{dn}^j$
注意:在实际代码中,在更新完$\beta_{ij}$后,需要进行正规化(使相加为1),所以公共项$-\frac{1}{\lambda_i}$不用计算
2.优化$\alpha$
L中和$\alpha$相关的项:
$\sum_{d=1}^ML_{[\alpha]}=\sum_{d=1}^M(log\Psi(\sum_{i=1}^k \alpha_j)-\sum_{i=1}^k log\Psi(\alpha_i)+\sum_{i=1}^k(\alpha_i-1)(\Psi(\gamma_{di})-\Psi(\sum_{j=1}^k \gamma_{dj})))$
对$\alpha_i$求导:
$\frac{\partial L}{\partial \alpha_i}=M(\Psi(\sum_{j=1}^k \alpha_j)-\Psi(\alpha_i))+\sum_{d=1}^M(\Psi(\gamma_{di}-\Psi(\sum_{j=1}^k \gamma_{dj})))$
由于上式和$\alpha_j$相关,考虑使用newton法求解,迭代公式如下:
$\alpha_{t+1}=\alpha_k+H(\alpha_k)^{-1}g(\alpha_k)$ 这里求最大值,所以有$+$号,如果求最小值,要用$-$号
此处$H$为Hessian矩阵,$g$为梯度向量(即$\frac{\partial L}{\partial \alpha_i}$)
$H_{ij}=\frac{\partial L}{\partial \alpha_i\alpha_j}=\delta(i,j)M\Psi ‘(\alpha_i)-M\Psi ‘(\sum_{j=1}^k \alpha_j)$ $\delta(i,j)=1\quad if\ i=j$
hession矩阵具有以下形式:
$H=diag(h)+1\,Z\,1^T$
其中$h_{i}=M\Psi ‘(\alpha_i)$,$Z=-M\Psi ‘(\sum_{j=1}^k \alpha_j)$

所以在计算$H^{-1}g$时,可以用以下公式计算:
$(H^{-1}g)_i=\frac{g_i-c}{h_i}$ $c=\frac{\sum_{j=1}^k g_j/h_j}{\frac{1}{Z}+\sum_{j=1}^k \frac{1}{h_j}}$

时间: 2024-10-10 13:17:13

LDA(latent dirichlet allocation)的相关文章

Latent Dirichlet Allocation 文本分类主题模型

文本提取特征常用的模型有:1.Bag-of-words:最原始的特征集,一个单词/分词就是一个特征.往往一个数据集就会有上万个特征:有一些简单的指标可以帮助筛选掉一些对分类没帮助的词语,例如去停词,计算互信息熵等等,但不管怎么训练,特征维度都很大,每个特征的信息量太小:2.统计特征:包括Term frequency(TF) , Inverse document frequency(IDF), 以及合并起来的TF-IDF.这种语言模型主要是用词汇的统计特征来作为特征集,每个特征都能够说得出物理意义

代写Python Latent Dirichlet Allocation

In thisassignment we will submit extracted topics from 5 different Twitter accounts ofyour choice. This word document will contain the account names, extractedtopics, probability and 10 most common terms for each topic. Please includeyour IPython Not

LDA(latent dirichlet allocation)的应用

http://www.52ml.net/1917.html 主题模型LDA(latent dirichlet allocation)的应用还是很广泛的,之前我自己在检索.图像分类.文本分类.用户评论的主题词抽取等都用过,做feature.降维等.例如可以用主题维度来表示原来的字典维度,大大的降低了文本表示的维度.这其实也很deep learning中的对特征的抽象有点相似,通过一些聚类等的思想,将一些细粒度的特征组合到一个新的空间上去,例如主题空间. 而且GibbsSampling的LDA实现也

Latent Dirichlet allocation学习笔记

LDA是一个关于语料的生成概率模型,基本思想是文档可以表达为隐含主题的随机混合,每个主题刻画为关于词语的分布. LDA假设在语料D中生成一篇文章w的过程如下: 1. 根据泊松分布选在文章长度N 2.     选择主题分布 3.   对于每一个词Wn (a) 根据多项式分布选择一个主题 (b)  根据多项式条件概率分布选择Wn 一些基本模型的简单假设: (1)主题个数k是预先设定的: (2)主题和词的概率分布矩阵式一个k*V的矩阵, (3)文章长度N与其它变量独立 K维的Dirichlet随机变量

Latent Dirichlet Allocation

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

三言两语教你理解 Latent Dirichlet Allocation Model

LDA-Latent Dirichlet Allocation 学习笔记

以下内容主要基于<Latent Dirichlet Allocation>,JMLR-2003一文,另加入了一些自己的理解,刚开始了解,有不对的还请各位指正. LDA-Latent Dirichlet Allocation JMLR-2003 摘要:本文讨论的LDA是对于离散数据集,如文本集,的一种生成式概率模型.LDA是一个三层的贝叶斯分层模型,将数据集中每一项,如每个文本,建模为某些未知的topic组成的集合的混合.每个topic又建模为某种混合概率分布.在文本建模中,话题的概率就提供了每

关于Latent Diricht Allocation

今天,也没出去,晚上宿舍没有人,自己思考了下人生,毕设还是大事,觉得现在有必要把LDA从前往后彻彻底底的读一遍了,因为现在的感觉就是什么都知道一点皮毛,但是理解的都不深,LDA好像(恩,相当不好)现在理解的不是很好,涉及的内容挺多,细分的话有: 1)参数估计 MLE MAP 2)Bayes Estimation 3)随机采样 4)各种基于 MCMC 的采样方法 :Gibbs LDA Sparse LDA ,Alias LDA,WarpLDA 4)分布式实现 5)应用 放在新闻推荐上? 这个具体看

Latent semantic analysis note(LSA)

1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwester, Susan T. Dumais等人在1990年提出来的一种新的索引和检索方法.该方法和传统向量空间模型(vector space model)一样使用向量来表示词(terms)和文档(documents),并通过向量间的关系(如夹角)来判断词及文档间的关系:而不同的是,LSA将词和文档映射