如何计算主题建模中perplexity 计算

  2017 年 7 月 4 日,百度开源了一款主题模型项目,名曰:Familia。
  InfoQ 记者第一时间联系到百度 Familia 项目负责人姜迪并对他进行采访,在本文中,他将为我们解析 Familia 项目的技术细节。
  什么是 Familia
  Familia 开源项目包含文档主题推断工具、语义匹配计算工具以及基于工业级语料训练的三种主题模型:Latent Dirichlet Allocation (LDA)、SentenceLDA 和 Topical Word Embedding (TWE)。
  Familia 支持用户以&拿来即用&的方式进行文本分类、文本聚类、个性化推荐等多种场景的调研和应用。考虑到主题模型训练成本较高以及开源主题模型资源有限的现状,我们会陆续开放基于工业级语料训练的多个垂直领域的主题模型,以及这些模型在工业界的典型应用方式,助力主题模型技术的科研和落地。
  据姜迪介绍,Familia 主题模型项目是百度研发的贝叶斯网技术的一个重要组成部分,已经支持了百度多个产品,包括搜索、资讯流、贴吧等等。
  主题模型在工业界的应用普遍存在如下问题:
将主题模型等同于 LDA,忽视众多其他模型和任务本身的数据特点, 暴力使用 LDA,导致应用效果欠佳。
现有的大部分主题模型工具往往只专注在&训练&层面,对于获得的模型怎么&落地&到实际应用中却没有很好的支持。
  鉴于上述问题,Familia 项目有如下目的:
  一是汇总和归纳对工业界价值比较大的主题模型,方便开发者们直接使用;
  二是抽象了主题模型在工业界的应用范式,希望对主题模型在工业界的有效&落地&起到一定的指导作用。
  主题模型
  一般来说,主题模型可以看做是贝叶斯网领域的一个子类,该类模型可以从文本中抽取一些语义相关的词构成主题。学术界也存在一些称为主题模型却不属于贝叶斯网络的工作,但这类工作相对少一些。
  姜迪说:&从我们的应用经验来看,主题模型能较好地胜任无监督场景下的语义分析任务。我们从实际工程案例中将主题模型的应用范式抽象为两类: 语义表示和语义匹配。这两个范式都有很多成功的工业应用案例,比如新闻分类、个性化推荐等等,详情在我们开源项目 wiki 页面(&)中可以找到。除了这些较为传统的应用范式,我们也在探索主题模型技术在一些新场景比如 Chatbot 上的应用。&
  主题模型的训练成本
  获得一个高质量的主题模型涉及到很多步骤:数据预清洗、图模型设计、参数估计算法的设计、模型的后期处理。目前大部分研究工作集中在图模型的设计和参数估计算法的设计,关于其他的步骤的讨论和资料相对较少。
  在实践中,项目团队发现其他步骤也非常关键,往往决定了主题模型技术是否可以成功地在工业界落地。亿级别的语料、大规模数据处理、并行化高性能计算这些资源对于大多数开发者来说获取和实现成本较高。
  于是他们做了这样的决定:&我们直接将训练获取的高质量模型开放给社区,方便开发者以&拿来即用&的方式支持相关的应用。关于获得高质量主题模型各个步骤的代码和文档等资料我们也会陆续开放出来。&
  主题模型如何评估效果
  据介绍,评估主题模型的效果,学术界往往利用 Perplexity,Likelihood 等量化指标。这些指标在广泛应用的同时,也饱受诟病,很多研究者质疑这些指标并不能有效衡量主题模型的质量。在实际工业应用中,项目团队会更侧重如下两种指标: 一是模型中主题的可解释性,这对于系统的迭代开发和效果分析比较重要;另一个是模型应用后的产品相关指标。
  Familia 的优势
  目前在工业界有不少优秀的主题模型工具,很多在 github 上已经开源。但是姜迪表示,相对于这些工具而言,Familia 更侧重模型的多样性和对工业落地的支持。百度希望能给开发者除了 LDA 之外的更多选择。并且,他们更为关注模型的实用性,因此抽象了主题模型的应用范式,希望在应用层面推动主题模型技术的发展更进一步。
  百度 Familia 项目的文档里是这样写的:一期开放新闻领域主题模型,即将开放网页主题模型,在采访中,姜迪解析了领域的划分规则:Familia 项目的主要目的是服务于产品。所以,开放的领域也是基于产品来划分的,比如新闻类的主题模型可以支持资讯类的产品应用,网页类的主题模型可以支持搜索引擎,由于语料规模和多样性,网页类主题模型具有较为广泛的适用性。
  Familia 项目团队还表示,后续会陆续开放针对更多垂直领域的模型,也会根据开发者的反馈调整领域和优先级,希望可以覆盖更全面的产品品类。
  Familia 的应用
  语义表示
  主题模型产生的主题分布可看做文档的语义表示,该表示能够用于文档分类、聚类、内容丰富度分析、CTR 预估等多种任务。基于主题模型的文档特征表示可以分为两类,如图 1 所示:一类是经过主题模型降维,得到文档在主题上的多项分布,LDA、SentenceLDA 等模型支持这一类的文档特征表示;另一类是联合使用主题向量和文档主题分布,生成的文档向量表示,TWE 等融合了词向量的主题模型可以支持这一类的文档特征表示。
  案例: 新闻质量分类
  对于新闻 APP,其通过各种来源获得到的新闻,质量通常良莠不齐。在表 2 中列出了一些低质新闻与优质新闻的标题的示例。
  为了提升用户体验,通常会构建一个分类器来自动过滤低质量的新闻。可以人工设计一些传统特征:新闻来源站点、新闻内容长度、图片数量、新闻热度等等。除了这些人工特征,也可利用主题模型来计算每篇新闻的主题分布,作为附加特征与人工特征一起组成新特征集合(图2(a))。
  使用人工标注 7000 篇新闻,新闻质量总共划分为 3 个档位,其中 0 档表示质量最差,2 档表示质量最优。我们采用 Gradient Boost Decision Tree (GBDT),分别利用人工特征和主题扩充后的特征集合在 5000 篇新闻上进行训练,并在另外 2000 篇标注新闻数据上做测试。图2(b)展示了使用不同特征上的实验结果,在测试数据上的分类准确度。从这些实验结果可以看出,主题分布作为特征扩充可以有效提升分类器的效果。
  案例: 新闻聚类
  文档的主题分布可看做是包含语义信息的一个降维过程,这些低维特征可以用来对文档进行聚类。表 3 中展示了基于主题分布和K-Means 进行聚类的部分结果。从表中可以看出,基于新闻的主题分布,可以很好的完成聚类任务,在簇 1 中显示的是与房子装修相关的新闻,簇 2 中则是聚集了与股票相关的新闻。
  内容丰富度
  案例: 网页内容丰富度
  在一些信息检索的工作中,需要衡量网页内容的丰富度。通过计算网页的主题分布,可以进一步得到该分布的信息熵,作为衡量网页内容丰富度的指标。信息熵越大,表示网页内容越丰富。网页内容丰富度可以作为一维特征引入到更为复杂的网页排序函数中。
  语义匹配
  工业界的很多应用都有在语义上衡量本文相似度的需求,这类需求统称为&语义匹配&。根据文本长度的不同,语义匹配可以细分为三类:短文本-短文本语义匹配,短文本-长文本语义匹配和长文本-长文本语义匹配。
  基于主题模型的语义匹配通常作为经典文本匹配技术的补充,而不是取代传统的文本匹配技术。
  短文本-短文本语义匹配
  短文本-短文本的语义匹配在工业界的应用场景非常广泛。例如,在搜索引擎中,需要度量用户查询 (query) 和网页标题 (webpage title) 的相似度;在 query 推荐中,需要度量 query 和其他 query 之间的相似度。这些场景都会用到短文本-短文本的语义匹配。 由于主题模型在短文本上的效果不太理想,在短文本-短文本匹配任务中词向量的应用比主题模型更为普遍。简单的任务可以使用 Word2Vec 这种浅层的神经网络模型训练出来的词向量。
  比如,query 推荐任务中,经常要计算两个 query 的相似度,例如=&推荐好看的电影&与=&2016 年好看的电影&。 通过词向量按位累加的方式,得到这两个 query 的向量表示之后,可以利用 Cosine Similarity 来计算两者的相似度。
  对于较难的短文本-短文本语义匹配任务,则可以考虑引入有监督信号并利用 Deep Structured Semantic Model (DSSM) 或 Convolutional Latent Semantic Model (CLSM) 这些更复杂的神经网络模型,进行语义相似度的估计。
  短文本-长文本语义匹配
  短文本-长文本语义匹配的应用场景在工业界非常普遍。例如,在搜索引擎中,我们需要计算一个用户查询(query)和一个网页正文(content)的相似度。由于 query 属于短文本而 content 属于长文本,这时候就会用到短文本-长文本语义匹配。在计算相似度的时候,需要规避对短文本直接进行主题映射,而是根据长文本的主题分布,计算该分布生成短文本的概率,作为它们之间的相似度:
  其中表示 query, 表示 content, 表示中的词, 表示第k个主题。
  案例:用户查询-广告页面相似度
  在线广告场景中,需要计算用户查询和广告页面的语义相似度。这时可应用 SentenceLDA,将广告页面中各个域的文本视为句子,如图 3 所示(红框内容为句子)。首先通过主题模型学习得到广告的主题分布,再使用公式 (1) 计算用户查询和广告页面的语义相似度。该相似度可以作为一维特征,应用在更复杂的排序模型中。在图 4 中,对于 query=&婚庆拍摄&,研发团队对比了不同特征组合的结果。其中左图为 Baseline,右图则是引入 SentenceLDA 相似度(基于 SentenceLDA 计算 query 与广告页面的相似度)后得到的结果。可以看出,相比于 Baseline,引入新特征后召回的结果更加符合 query 语义,能更好的满足用户需求。
  长文本-长文本语义匹配
  通过使用主题模型,可以得到两个长文本的主题分布,再通过计算两个多项分布的距离作为衡量相似度的指标。衡量多项分布的距离还可以利用 Hellinger Distance 和 Jensen-Shannon Divergence (JSD)。
  案例: 新闻个性化推荐
  长文本-长文本的语义匹配可用于个性化推荐的任务中。在互联网应用中,当积累了用户大量的行为信息后,这些行为信息对应的文本内容可以组合成一篇抽象的&文档&,对该&文档&进行主题映射后获得的主题分布可以作为用户画像。例如,在新闻个性化推荐中,可以将用户近期阅读的新闻(或新闻标题)合并成一篇长&文档&,并将该&文档& 的主题分布作为表达用户阅读兴趣的用户画像。如图 5 所示,通过计算每篇实时新闻的主题分布与用户画像之间的 Hellinger Distance,可作为向用户推送新闻的选择依据,达到新闻个性化推荐的效果。
  更多案例请访问:
  团队的愿景
  Familia 开源之后,其他企业和机构将有机会使用项目的模型与代码,可以基于 Familia 做一些工作,姜迪这样说:&中小企业可以直接利用我们的模型和代码来支持基于语义降维和语义匹配的产品,而不用投入大量的人力进行这方面的调研,具体的应用案例可以参照我们 GitHub 上的 wiki 页面(),我们希望这些案例可以发挥一定的指导作用。&另外,他补充道,开源的主题模型本身也可以作为数据集,支持学术界相关的研究,比如帮助科研人员调研自动化主题命名、主题模型的压缩、主题去重等课题。
  Familia 团队期望开发者和研究者们将 Familia 应用于不同的场景中,挖掘主题模型更多的应用潜力,并给提出更多的要求与需求。百度乐于与大家广泛深入的交流,进一步推动主题模型的技术发展与应用创新。有了一个语言模型,就要判断这个模型的好坏。
现在假设:
我们有一些测试数据,test data.测试数据中有m个句子;s1,s2,s3…,sm
我们可以查看在某个模型下面的概率:
我们也知道,如果计算相乘是非常麻烦的,可以在此基础上,以另一种形式来计算模型的好坏程度。
在相乘的基础上,运用Log,来把乘法转换成加法来计算。
补充一下,在这里的p(Si)其实就等于我们前面所介绍的q(the|*,*)*q(dog|*,the)*q(…)…
有了上面的式子,评价一个模型是否好坏的原理在于:
a good model should assign as high probability as possible to these test data sentences.
,this value as being a measure of how well the alleviate to make sth less painful or difficult to deal with language model predict these test data sentences.
The higher the better.
上面的意思也就是说,如果的值越大,那么这个模型就越好。
实际上,普遍的评价的指标是perplexity
其中,M的值是测试数据test data中的所有的数量。
那么从公式当中查看,可以知道。perplexity的值越小越好。
为了更好的理解perplexity,看下面这个例子:
我们现在有一个单词集V,N=|V|+1
有了上面的条件,可以很容易的计算出:
Perplexity是测试branching factor的数值。
branching factor又是什么呢?有的翻译为分叉率。如果branching factor高,计算起来代价会越大。也可以理解成,分叉率越高,可能性就越多,需要计算的量就越大。
上面的例子q=1/N只是一个举例,再看看下面这些真实的数据:
Goodman的结果,其中|V|=50000,在trigram model的中,Perplexity=74
在bigram model中,,Perplexity=137
在unigram model中,,perplexity=955
在这里也看到了,几个模型的perplexity的值是不同的,这也就表明了三元模型一般是性能良好的。大规模主题模型:对Spark LDA算法的改进
发表于 08:58|
来源Databricks|
作者Feynman Liang, Yuhao Yang and Joseph Bradley
摘要:为了关注分布式计算,该阅读哪些资讯文章呢?这些问题都能够被话题模型所解答。本文将要讨论Spark 1.4和1.5使用强大的隐含狄利克雷分布 (Latent Dirichlet Allocation,LDA)算法对话题模型的性能提升。
这篇文章由Databricks的Feynman&Liang和Joseph&Bradley,以及Intel的Yuhao&Yang撰写。
在使用LDA之前,请先
人们正在推特上讨论什么呢?为了关注分布式计算,我该阅读哪些资讯文章呢?这些问题都能够被话题模型所解答,它是分析文档集所涵盖话题类别的一种技术。本文将要讨论Spark&1.4和1.5使用强大的隐含狄利克雷分布&(Latent&Dirichlet&Allocation,LDA)算法对话题模型的性能提升。
Spark&1.4和1.5引入了一种增量式计算LDA的在线算法,在已训练的LDA模型上支持更多的查询方式,以及支持似然率(likelihood)和复杂度(perplexity)的性能评估。我们给出了一个例子,用超过450万条维基百科词条的文档集训练一个话题模型。
话题模型和LDA
话题模型分析一个大规模的文档集,并且自动推测其所讨论的话题。举个例子,我们用Spark的LDA算法训练450万条维基百科词条,可以得到下表中的这些话题。
表一:用维基百科文档集训练得到的LDA话题示例
此外,LDA告诉我们每篇文档分别属于哪些话题;文档X有30%的概率属于话题1(“政治”)以及70%的概率属于话题5(“航线”)。隐含狄利克雷分布(LDA)是实践中最成功的话题模型之一。阅读我们
之前的文章了解更多关于LDA的介绍。
一种新的在线变分学习算法
在线变分预测是一种训练LDA模型的技术,它以小批次增量式地处理数据。由于每次处理一小批数据,我们可以轻易地将其扩展应用到大数据集上。MLlib按照
Hoffman论文里最初提出的算法实现了一种在线变分学习算法。
上表所示的话题是用新开发的在线变分学习算法训练得到。如果我们对比时间开销,可以发现新算法相比原来的EM算法效率有显著提升:
图1:在线学习算法比之前的EM算法速度更快
我们首先对数据预处理,滤去常见的英语停用词,并且将词表限制在10000个常用单词之内。然后用在线LDA优化器迭代100次训练得到100个LDA话题模型。我们的实验在
Databricks上进行,训练用到了16个节点的AWS&r3.2x大集群,数据存放在S3。具体代码详见
改进的预测、评估和查询
预测新文档的话题
除了描述训练文档集的话题之外,Spark&1.5支持让用户预测新测试文档所属的话题,使得已训练的LDA模型更有用。
用似然率和复杂度评估模型
在训练完一个LDA模型之后,我们通常关心模型在数据集上的表现如何。我们增加了两种方式来评估效果:
支持更多的查询方式
新的版本添加了一些新的查询方式,用户可以用在已训练的LDA模型上。例如,现在我们不仅能获得每篇文档的top&k个话题(“这篇文档讨论了什么话题?”),也能得到每个话题下排名靠前的文档(“若要学习X话题,我该阅读哪些文档?”)。
运行LDA的小技巧
确保迭代次数足够多。前期的迭代返回一些无用的(极其相似的)话题,但是继续迭代多次后结果明显改善。我们注意到这对EM算法尤其有效。
对于数据中特殊停用词的处理方法,通常的做法是运行一遍LDA,观察各个话题,挑出各个话题中的停用词,把他们滤除,再运行一遍LDA。
确定话题的个数是一门艺术。有些算法可以自动选择话题个数,但是领域知识对得到好的结果至关重要。
对于LDA的文字预处理工作极其有用;重点查看Tokenizer,StopwordsRemover和CountVectorizer接口。&
下一步是什么?
Spark贡献者正在积极地优化我们的LDA实现方式。正在进行的工作有:
(一种更慢但是有时更准确的算法),
(自动选择话题个数)。
LDA的开发得益于众多Spark贡献者的通力合作。
Feynman&Liang、Yuhao&Yang、Joseph&KBradley等人完成了最近这次优化,
其它众多朋友对早期版本亦有贡献。
原文链接:
(译者/赵屹华
审校/朱正贵 责编/仲浩)
译者简介:赵屹华,搜狗算法工程师,关注大数据和机器学习。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章6187人阅读
基础知识:熵
Perplexity定义
perplexity是一种信息理论的测量方法,b的perplexity值定义为基于b的熵的能量(b可以是一个概率分布,或者概率模型),通常用于概率模型的比较
wiki上列举了三种perplexity的计算:
1 概率分布的perplexity
其中H(p)就是该概率分布的熵。当概率P的K平均分布的时候,带入上式可以得到P的perplexity值=K。
2 概率模型的perplexity
公式中的Xi为测试局,可以是句子或者文本,N是测试集的大小(用来归一化),对于未知分布q,perplexity的值越小,说明模型越好。
A model of an unknown probability distribution&p, may be proposed based on a training sample that was drawn fromp. Given a proposed probability modelq, one may evaluateq&by asking how well it predicts a separate test samplex1,x2,
...,xN&also drawn fromp. The perplexity of the modelq&is defined as
where&&is customarily 2. Better modelsq&of the unknown distributionp&will
tend to assign higher probabilitiesq(xi) to the test events. Thus, they have lower perplexity: they are less surprised by the test sample.
The exponent&above may be regarded as the average number of bits needed to represent a test eventxi&if one uses an optimal code based onq. Low-perplexity models do a better job of compressing the test sample, requiring
few bits per test element on average becauseq(xi) tends to be high.
指数部分也可以用交叉熵来计算。
where&&denotes
the empirical distribution of the test sample (i.e.,&ifx&appeared&n&times
in the test sample of size&N)
3单词的perplexity
perplexity经常用于语言模型的评估,物理意义是单词的编码大小。例如,如果在某个测试语句上,语言模型的perplexity值为2^190,说明该句子的编码需要190bits
评估LDA主题模型-perflexity
LDA主题模型好坏的评估,判断改进的参数或者算法的建模能力。
perplexity is only a crude measure, it's helpful (when using LDA) to get 'close' to the appropriate number of topics in a corpus.&
Blei先生在论文《Latent Dirichlet Allocation》实验中用的是Perplexity值作为评判标准,并在论文里只列出了perplexity的计算公式。
Note:M代表测试语料集的文本数量,Nd代表第d篇文本的大小(即单词的个数),P(Wd)代表文本的概率
文本的概率的计算:
p(z)表示的是文本d在该主题z上的分布,应该是p(z|d)
1.&Blei是从每篇文本的角度来计算perplexity的,而上面是从单词的角度计算perplexity。
2. 测试文本集中有M篇文本,对词袋模型里的任意一个单词w,P(w)=∑z p(z|d)*p(w|z),即该词在所有主题分布值和该词所在文本的主题分布乘积。
3. 模型的perplexity就是exp^{ - (∑log(p(w))) / (N) },∑log(p(w))是对所有单词取log(直接相乘一般都转化成指数和对数的计算形式),N的测试集的单词数量(不排重)
4. P(w)=∑z p(z|d)*p(w|z)这个w是测试集上的词汇
[http://faculty.cs.byu.edu/~ringger/CS601R/papers/Heinrich-GibbsLDA.pdf - 29页]
Estimate the perplexity within gensim
The `LdaModel.bound()` method computes a lower bound on perplexity, based on a supplied corpus (~of held-out documents).
This is the method used in Hoffman&Blei&Bach in their &Online Learning for LDA& NIPS article.
[/forum/#!topic/gensim/LM619SB57zM]
, which is a convenience wrapper.
评价一个语言模型Evaluating Language
假设我们有一些测试数据,test data.测试数据中有m个句子;s1,s2,s3…,sm
我们可以查看在某个模型下面的概率:
我们也知道,如果计算相乘是非常麻烦的,可以在此基础上,以另一种形式来计算模型的好坏程度。
在相乘的基础上,运用Log,来把乘法转换成加法来计算。
补充一下,在这里的p(Si)其实就等于我们前面所介绍的q(the|*,*)*q(dog|*,the)*q(…)…
有了上面的式子,评价一个模型是否好坏的原理在于:
a good model should assign as high probability as possible to these test data sentences.
value as being a measure of how well the alleviate to make sth less painful or difficult to deal with language model predict these test data sentences.
The higher the better.
上面的意思也就是说,如果的值越大,那么这个模型就越好。
实际上,普遍的评价的指标是perplexity
其中,M的值是测试数据test data中的所有的数量。
那么从公式当中查看,可以知道。perplexity的值越小越好。
为了更好的理解perplexity,看下面这个例子:
我们现在有一个单词集V,N=|V|+1
有了上面的条件,可以很容易的计算出:
Perplexity是测试branching factor的数值。
branching factor又是什么呢?有的翻译为分叉率。如果branching factor高,计算起来代价会越大。也可以理解成,分叉率越高,可能性就越多,需要计算的量就越大。
上面的例子q=1/N只是一个举例,再看看下面这些真实的数据:
Goodman的结果,其中|V|=50000,在trigram model的中,Perplexity=74在bigram model中,,Perplexity=137在unigram model中,,perplexity=955
在这里也看到了,几个模型的perplexity的值是不同的,这也就表明了三元模型一般是性能良好的。
Questions find in :
/questions//topic-models-evaluation-in-gensim
http://www.52ml.net/14623.html
http://www.researchgate.net/publication/_Improving_language_model_perplexity_and_recognition_accuracy_for_medical_dictations_via_within-domain_interpolation_with_literal_and_semi-literal_corpora
LDA/NMF/LSA多模型/多主题一致性评价方法《》K Stevens, P Kegelmeyer, D Andrzejewski...
[University of California Los Angeles] (2012) &
论文:(概率)生成模型评价方法研究《》Lucas Theis, A?ron van den Oord, Matthias Bethge (2015)&
Hugo Larochelle&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2185155次
积分:29734
积分:29734
排名:第180名
原创:80篇
转载:490篇
评论:34条
(9)(18)(11)(73)(54)(237)(77)(23)(10)(25)(25)(5)(1)(1)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
在PLSA中perplexity是什么意思
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
计算模型在test data的Perplexity,pp = 10^(log(prop)/word);其中 prop为所有sentence的概率的乘积,word为词的数目一般翻译为困惑度:/mit-nlp-third-lesson-probabilistic-language-modeling-third-part这个是MIT课件中关于perplexity的解释
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 维度建模 和 主题建模 的文章

 

随机推荐