LDA using Gibbs Sampling.docx
- 文档编号:6410258
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:9
- 大小:139.45KB
LDA using Gibbs Sampling.docx
《LDA using Gibbs Sampling.docx》由会员分享,可在线阅读,更多相关《LDA using Gibbs Sampling.docx(9页珍藏版)》请在冰豆网上搜索。
LDAusingGibbsSampling
GibbsLDA++
AC/C++ImplementationofLatentDirichletAllocation(LDA)
usingGibbsSamplingforParameterEstimationandInference
代码:
D:
\android-ndk-r6b-windows\android-ndk-r6b\projects\GibbsLDA++-0.2
GibbsLDA++isusefulforthefollowingpotentialapplicationareas:
1、InformationRetrieval(analyzingsemantic/latenttopic/conceptstructuresoflargetextcollectionforamoreintelligentinformationsearch.
2、DocumentClassification/Clustering,DocumentSummarization(文本摘要),andText/WebDataMiningcommunityingeneral.
3、CollaborativeFiltering(协同过滤)
4、Content-basedImageClustering,ObjectRecognition,andotherapplicationsofComputerVision(计算机视觉)ingeneral.
5、Otherpotentialapplicationsinbiologicaldata.
使用吉布斯采样估计LDA参数
在LDA最初提出的时候,人们使用EM(期望最大化算法)算法进行求解,后来人们普遍开始使用较为简单的GibbsSampling,具体过程如下:
a.首先对所有文档中的所有词遍历一遍,为其都随机分配一个主题,即zm,n=k~Mult(1/K),其中m表示第m篇文档,n表示文档中的第n个词,k表示主题,K表示主题的总数,之后将对应的n(k)m+1,nm+1,n(t)k+1,nk+1,他们分别表示在m文档中k主题出现的次数(csy理解的应是在文档m中分配给主题k的词的个数),m文档中主题数量的和,k主题对应的t词的次数,k主题对应的总词数。
b.之后对下述操作进行重复迭代。
c.对所有文档中的所有词进行遍历,假如当前文档m的词t对应主题为k,则n(k)m-1,nm-1,n(t)k-1,nk-1,即先拿出当前词,之后根据LDA中topicsample的概率分布sample出新的主题,在对应的n(k)m,nm,n(t)k,nk上分别+1。
p(zi=k|z−i,w)∝(n(t)k,−i+βt)(n(k)m,−i+αk)/(∑Vt=1n(t)k,−i+βt)
d.迭代完成后输出主题-词参数矩阵φ和文档-主题矩阵θ
ϕk,t=(n(t)k+βt)/(nk+βt)
θm,k=(n(k)m+αk)/(nm+αk)
来源:
隐含狄利克雷分布维基百科
Gibbs抽样解LDA
[csy]LDA参数推理采用的是Gibbs抽样
1、Gibbs抽样:
对P(z),z是向量,按照Gibbs描述的步骤,可以抽取z
(1),z
(2),...z(n)这n个样本,Gibbs保证这n个样本的分布服从P(z)。
z(0)=(z1,z2,...,zn)
Repeat
for i = 1 to n
从p(zi|z1,z2,...,zi,zi+1,...,zn)中抽取zi
得到z(t)=(z1,z2,...,zn)
2、上面描述了一个一般的Gibbs抽样过程,假设重复N次,将得到z
(1),z
(2),...,z(N)个样本。
抽样有一个收敛到目标分布的过程(burn-in),假设需要a次,那么可以认为z(a),z(a+1),...,z(N)都是从P(z)中抽取出来的。
Gibbs抽样中相邻两次得到的样本是相关的,因此通常每隔b次才抽样一次,来消除这种相关性。
在实际中a和b通常采取预设置的方法比如几千设为a,几十或者几百设为b,因为二者没有很好的理论设置方法。
3、假设通过Gibbs抽样我们得到了M个服从P(z)分布的样本,可以用来做什么?
1)可以求期望:
直接求样本平均即可
2)可以求函数期望:
将样本做相关的函数变换得到新的样本集,求平均即可
3)直接利用样本本身,求相关的统计量
这三种操作在P(z)本身比较复杂但是p(zi|z1,z2,...,zi,zi+1,...,zn)容易求解的时候十分有用。
4、在LDA中我们关注三个参数z,theta和phi。
其中z是语料中每一个word对应的隐变量(主题),theta是语料中每一个文档的主题分布,phi是每一个主题的term分布。
其实只要求得z,其他两个可以通过简单的似然估计得到。
于是需要将LDA的概率公式P(w,z,theta,phi | alpha,beta)通过积分的方法把theta和phi积掉,剩下P(w,z | alpha,beta)。
然后求解P(z|w,alpha,beta) = P(w,z | alpha,beta) / P(w | alpha,beta),由于分母要对K的n次方个项求和因此直接求不可行(其中K是主题数,n是词汇表的长度)。
Gibbs抽样就是要完成对P(z|w,alpha,beta)的抽样,利用抽样结果通过简单的似然估计求得theta和phi。
来源:
Gibbs抽样解LDA_superbear_新浪博客
用GibbsSampling学习LDA
GibbsSampling是Markov-ChainMonteCarlo算法的一个特例。
这个算法的运行方式是每次选取概率向量的一个维度,给定其他维度的变量值Sample当前维度的值。
不断迭代,直到收敛输出待估计的参数。
可以图示如下:
初始时随机给文本中的每个单词分配主题
然后统计每个主题z下出现termt的数量以及每个文档m下出现主题z中的词的数量,每一轮计算
,即排除当前词的主题分配,根据其他所有词的主题分配估计当前词分配各个主题的概率。
当得到当前词属于所有主题z的概率分布后,根据这个概率分布为该词sample一个新的主题
。
然后用同样的方法不断更新下一个词的主题,直到发现每个文档下Topic分布
和每个Topic下词的分布
收敛,算法停止,输出待估计的参数
和
,最终每个单词的主题
也同时得出。
实际应用中会设置最大迭代次数。
每一次计算
的公式称为Gibbsupdatingrule
注:
是先拿出当前词,计算文档m中第n个词的新主题(因为初始随机分配一个主题)的公式。
LDA建模
LDA是一种生成式的主题模型,能够对文本集合进行建模,从而得到文本与特征之间隐含的关系,它可以随机生成一篇由所有的隐含主题组成的文章。
[有人做过模拟实验,使用12个topic按照LDA生成模型随机生成几百万篇文档,然后使用LDA训练模型,几十个迭代之后,模型几乎完美收敛到原始的12个topic.]
LDA模型采用词袋(bagofword,BOW)的方法,认为文本就是一个词语构成的集合,从而将每个文本看作一个向量的形式,将非结构化的文本信息转化为易于建模的结构化信息。
LDA模型是三层贝叶斯模型,由词(word)、文本(document)、主题(topic)组成。
词是描述非结构化数据的基本单位;文本可以看作N个词的序列,记为d=(w1,w2...wN),其中wi表示第i个词;主题的数为K,且主题之间相互独立;整个语料库是M个文本的集合,记为D=(d1,d2...dM)。
对于语料库中的每篇文档,LDA定义了如下生成过程(generativeprocess):
1.对每一篇文档,从主题分布中抽取一个主题;
2.从上述被抽到的主题所对应的单词分布中抽取一个单词;
3.重复上述过程直至遍历文档中的每一个单词。
1、数据预处理
将初始的文本集处理成词的集合,即d=(w1,w2...wN),其中N为文本d中词的个数。
对数据集进行分词,即可将文本集在形式上变为如上格式。
进一步去除停用词,再根据建模的目的,去除可能会造成干扰的词,比如基于主题的,希望选出的特征能够很好的反应文本描述的对象,容易想到,除名词之外,其他的词起不到这样的作用;
比如基于观点的,只有观点词才能够对作者观点起到描述作用,介词、代词没有识别作用;
2、建模过程
LDA建模是将每篇文本看作K个主题的一个混合,更形式化的说,对于文本集中的每篇文本,与K(假设为已知的)个主题的一个这样的多项分布相对应,将该分布记为ϑ(即thetaθit西塔),每个主题又与词表中V个词的一个多项分布对应,该分布记为ϕ(即phifai佛爱)。
ϑ是一个带有超参数α(即alphaa:
lf阿尔法)的Dirichlet先验分布,ϕ是带有β(即betabet贝塔)的Dirichlet先验分布。
3、实现工具
见“GibbsLDA++”,是一个c++版本的使用Gibbssampling的LDA实现。
应用领域见章节”applicationareas”的介绍。
GibbsSampling学习LDA参数的算法伪代码如下:
Gibbsupdatingrule:
Multinomial分布的参数
和
的计算公式如下:
解释:
ϕk,t表示的是:
topic-worddistributions(phifai佛爱)
ϑm,k表示的是:
document-topicdistributions(thetaθit西塔)
ϕk,t
主题-词分布
ϑm,k
文档-主题分布
超参数
nk(t)
分配给主题k的词t的词数
nk
分配给主题k的词数
nm(k)
文本m中分配给主题k的词数
nm
文本m中所有的词数
V
词的总数
K
主题的总数
3.1输入:
数据输入格式统一如下,
[M]
[document1]
[document2]
...
[documentM]
第一行的M表示文本集中文本的总数.下面的每一行记录就是一个文本(这里的文本不是初始的文本).文本格式如下:
[documenti]=[wordi1][wordi2]...[wordiNi]
其中[documenti]是第i个文本,包含可Ni个词/术语的数据集。
即每篇文章占一行,对于英文来说,每个词之间已经用空格分开了,但是中文不行,所以你要先对文章进行分词。
3.2输出:
模型建立以后,会输出5个分别以others,phi,theta,tassign,twords为后缀名的文件,每个文件的含义如下(按照pdf手册):
1)others:
文件保存的是与LDA模型有关的参数
alpha=?
#α
beta=?
#β
ntopics=?
#numberoftopics
ndocs=?
#numberofdocuments
nwords=?
#thevocabularysize
liter=?
#theGibbssamplingiterationatwhichthemodelwassaved
2)phi:
文件存储的是”词-主题”的概率分布(即主题数×词数量的矩阵),每一行是主题,每一列是词,元素值为p(wordw|topict)即分配给主题t的词w的概率(即某一主题选择词的概率)。
注-csy:
源码中计算phi,从源码注释中得知是”主题-词”的概率分布;
但看phi文件的行数确实是主题的总数(ntopics);所以是按照pdf而不是代码注释的,应是”词-主题”
3)theta:
文件存储的是”主题-文本”的概率分布(即文档数×主题数的矩阵),每一行是文本,每一列是主题,元素值为p(topict|documentm)即文档m中分配到主题t的概率(即每一个值都表示该文档选择了对应主题的概率)。
注-csy:
源码中计算theta,从源码注释中得知是”文本-主题”的概率分布;但看theta文件的行数确实是文本的总数(ndocs);所以是按照pdf而不是代码注释的,应是”主题-文本”
4)tassign:
文件保存的是训练样本数据的词对应的主题映射,每一行是一个文本,存储一个集合
该词对应的主题,表示的是记录词项指派了其最大可能的所属类簇(csy-类簇是指主题吗?
topic的范围是[0,K-1],K为主题数)。
注-csy:
出现过0:
0(词的id为0);6:
0(词的id为6,但对应的主题为0);3:
27,3:
89(相同词可对应多个主题--不同主题下的相同词);4:
384:
38(相同词可相同主题--相同主题下的相同词);4:
38,5:
38(不同的词对应同一个主题--同一主题下不同的词);
注:
从本文件的数据中,可得到:
文本m中分配给主题k的词数即nm(k),文本m中所有的词数即nm,分配给主题k的词t的词数即nk(t),分配给主题k的词数nk。
利用nk(t)和nk可求出ϕk,t即phi文件数据,利用nm(k)和nm可求出ϑm,k即theta文件数据。
5)twords:
文件为”词-主题推断”,推断出每个隐含主题最相关的前twords个词及其概率。
注:
-ntopics(命令行设定),-twords(命令行设定)
另:
也输出了一个名为wordmap.txt的文件(即训练文本的词频统计),保存的是词的总数,及词与词的id(整数,从0开始)之间的映射。
这是因为GibbsLDA直接作用于词/术语的ids,来代替作用于文本字符串。
[csy:
这样的结果和SVD分解的过程比较象,一个是从矩阵分解的角度去寻找语义,一个是从概率的角度去抽样寻找语义。
]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LDA using Gibbs Sampling
![提示](https://static.bdocx.com/images/bang_tan.gif)