LDA算法里面Dirichlet分布的两个参数alpha和beta怎样确定

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LDA算法里面Dirichlet分布的两个参数alpha和beta怎样确定相关的知识,希望对你有一定的参考价值。

参考技术A 一.主题模型传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。举个例子,有两个句子分别如下:“乔布斯离我们而去了。”“苹果价格会不会降?”可以看到上面这两个句子没有共同出现的单词,但这两个句子是相似的,如果按传统的方法判断这两个句子肯定不相似,所以在判断文档相关性的时候需要考虑到文档的语义,而语义挖掘的利器是主题模型,LDA就是其中一种比较有效的模型。在主题模型中,主题表示一个概念、一个方面,表现为一系列相关的单词,是这些单词的条件概率。形象来说,主题就是一个桶,里面装了出现概率较高的单词,这些单词与这个主题有很强的相关性。怎样才能生成主题?对文章的主题应该怎么分析?这是主题模型要解决的问题。首先,可以用生成模型来看文档和主题这两件事。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。那么,如果我们要生成一篇文档,它里面的每个词语出现的概率为:这个概率公式可以用矩阵表示:其中”文档-词语”矩阵表示每个文档中每个单词的词频,即出现的概率;”主题-词语”矩阵表示每个主题中每个单词的出现概率;”文档-主题”矩阵表示每个文档中每个主题出现的概率。给定一系列文档,通过对文档进行分词,计算各个文档中每个单词的词频就可以得到左边这边”文档-词语”矩阵。主题模型就是通过左边这个矩阵进行训练,学习出右边两个矩阵。主题模型有早起使用SVD的LSA(隐形语义分析),然后引入基于概率的pLSA(ProbabilisticLatentSemanticAnalysis),其参数学习采用EM算法和后来改进PLSA,引入hyperparameter的LDA(LatentDirichletAllocation),其参数学习主要采用EM和Gibbssampling,下面主要介绍LDA。二.LDALDA要干的事情简单来说就是为一堆文档进行聚类(所以是非监督学习),一种topic就是一类,要聚成的topic数目是事先指定的。聚类的结果是一个概率,而不是布尔型的100%属于某个类。国外有个博客上有一个清晰的例子,直接引用:Supposeyouhavethefollowingsetofsentences:Iliketoeatbroccoliandbananas.Iateabananaandspinachsmoothieforbreakfast.Chinchillasandkittensarecute.Mysisteradoptedakittenyesterday.Lookatthiscutehamstermunchingonapieceofbroccoli.WhatislatentDirichletallocation?It’sawayofautomaticallydiscoveringtopicsthatthesesentencescontain.Forexample,giventhesesentencesandaskedfor2topics,LDAmightproducesomethinglikeSentences1and2:100%TopicASentences3and4:100%TopicBSentence5:60%TopicA,40%TopicBTopicA:30%broccoli,15%bananas,10%breakfast,10%munching,…(atwhichpoint,youcouldinterprettopicAtobeaboutfood)TopicB:20%chinchillas,20%kittens,20%cute,15%hamster,…(atwhichpoint,youcouldinterprettopicBtobeaboutcuteanimals)上面关于sentence5的结果,可以看出来是一个明显的概率类型的聚类结果(sentence1和2正好都是100%的确定性结果)。再看例子里的结果,除了为每句话得出了一个概率的聚类结果,而且对每个Topic,都有代表性的词以及一个比例。以TopicA为例,就是说所有对应到TopicA的词里面,有30%的词是broccoli。在LDA算法中,会把每一个文档中的每一个词对应到一个Topic,所以能算出上面这个比例。这些词为描述这个Topic起了一个很好的指导意义,我想这就是LDA区别于传统文本聚类的优势吧。LDA整体流程先定义一些字母的含义:文档集合D,topic集合TD中每个文档d看作一个单词序列,wi表示第i个单词,设d有n个单词。(LDA里面称之为wordbag,实际上每个单词的出现位置对LDA算法无影响)D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC)LDA以文档集合D作为输入(会有切词,去停用词,取词干等常见的预处理,略去不表),希望训练出的两个结果向量(设聚成k个Topic,VOC中共包含m个词):对每个D中的文档d,对应到不同topic的概率θd,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。对每个T中的topict,生成不同单词的概率φt,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topict的VOC中第i个单词的数目,N表示所有对应到topict的单词总数。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的输出。用数学语言描述就是如下过程转化成概率图模型表示就是图中K为主题个数,M为文档总数,是第m个文档的单词总数。是每个Topic下词的多项分布的Dirichlet先验参数,是每个文档下Topic的多项分布的Dirichlet先验参数。是第m个文档中第n个词的主题,是m个文档中的第n个词。剩下来的两个隐含变量和分别表示第m个文档下的Topic分布和第k个Topic下词的分布,前者是k维(k为Topic总数)向量,后者是v维向量(v为词典中term总数)。三.用GibbsSampling学习LDAGibbsSampling的流程:LDA中的变量,和都是未知的隐含变量,也是我们需要根据观察到的文档集合中的词来学习估计的,那么如何来学习估计呢?这就是概率图模型的Inference问题。主要的算法分为exactinference和approximateinference两类。尽管LDA是最简单的TopicModel,但是其用exactinference还是很困难的,一般我们采用approximateinference算法来学习LDA中的隐含变量。比如LDA原始论文Blei02中使用的mean-fieldvariationalexpectationmaximisation算法和Griffiths02中使用的GibbsSampling,其中GibbsSampling更为简单易懂。GibbsSampling是Markov-ChainMonteCarlo算法的一个特例。这个算法的运行方式是每次选取概率向量的一个维度,给定其他维度的变量值Sample当前维度的值。不断迭代,直到收敛输出待估计的参数。可以图示如下初始时随机给文本中的每个单词分配主题,然后统计每个主题z下出现termt的数量以及每个文档m下出现主题z中的词的数量,每一轮计算,即排除当前词的主题分配,根据其他所有词的主题分配估计当前词分配各个主题的概率。当得到当前词属于所有主题z的概率分布后,根据这个概率分布为该词sample一个新的主题。然后用同样的方法不断更新下一个词的主题,直到发现每个文档下Topic分布和每个Topic下词的分布收敛,算法停止,输出待估计的参数和,最终每个单词的主题也同时得出。用GibbsSampling学习LDA参数的算法伪代码如下四.LDA开源工具GibbsLDA++GibbsLDA++说明文档写的很清晰易懂,这里只说下输出模型。.others:LDA模型的一些参数。α、βLDA的先验参数、ntopics主题数、liter采样迭代次数.phi:Thisfilecontainstheword-topicdistributions,i.e.,p(wordw|topict).Eachlineisatopic,eachcolumnisawordinthevocabulary.theta:Thisfilecontainsthetopic-documentdistributions,i.e.,p(topict|documentm).Eachlineisadocumentandeachcolumnisatopic..tassign:Thisfilecontainsthetopicassignmentsforwordsintrainingdata.Eachlineisadocumentthatconsistsofalistof:.twords:Thisfilecontainstwordsmostlikelywordsofeachtopic.casestudy示例:学习:src/lda-est-alpha0.5-beta0.1-ntopics100-niters1000-savestep100-twords20-dfilemodels/casestudy/trndocs.dat预测:src/lda-inf-dirmodels/casestudy/-modelmodel-01800-niters30-twords20-dfilenewdocs.dat

以上是关于LDA算法里面Dirichlet分布的两个参数alpha和beta怎样确定的主要内容,如果未能解决你的问题,请参考以下文章

简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)

LDA数学八卦笔记Beta/Dirichlet分布

LDA主题模型算法

Latent Dirichlet Allocation(隐狄利克雷分配模型)——论文翻译与分析

自然语言处理NLP之主题模型LDA(Latent Dirichlet Allocation)语义分析词义消歧词语相似度

我是这样一步步理解--主题模型(Topic Model)LDA(案例代码)