LDA主题模型评估

http://blog.csdn.net/pipisorry/article/details/42460023

LDA主题模型好坏的评估,判断改进的参数或者算法的建模能力。

Blei先生在论文《Latent Dirichlet Allocation》实验中用的是Perplexity值作为评判标准。

一、Perplexity定义

http://en.wikipedia.org/wiki/Perplexity

perplexity是一种信息理论的测量方法,b的perplexity值定义为基于b的熵的能量(b可以是一个概率分布,或者概率模型),通常用于概率模型的比较

wiki上列举了三种perplexity的计算:

1.1 概率分布的perplexity

公式:  

其中H(p)就是该概率分布的熵。当概率P的K平均分布的时候,带入上式可以得到P的perplexity值=K。

1.2 概率模型的perplexity

公式: 

公式中的Xi为测试局,可以是句子或者文本,N是测试集的大小(用来归一化),对于未知分布q,perplexity的值越小,说明模型越好。

指数部分也可以用交叉熵来计算。

1.3单词的perplexity

perplexity经常用于语言模型的评估,物理意义是单词的编码大小。例如,如果在某个测试语句上,语言模型的perplexity值为2^190,说明该句子的编码需要190bits

二、如何对LDA建模的主题模型

Blei先生在论文里只列出了perplexity的计算公式。

M代表测试语料集的文本数量,Nd代表第d篇文本的大小(即单词的个数),P(Wd)代表文本的概率

文本的概率的计算:

在解决这个问题的时候,看到rickjin这样解释的:

p(z)表示的是文本d在该主题z上的分布,应该是p(z|d)

注意:Blei是从每篇文本的角度来计算perplexity的,而rickjin是从单词的角度计算perplexity。

总结一下:测试文本集中有M篇文本,对词袋模型里的任意一个单词w,P(w)=∑z p(z|d)*p(w|z),即该词在所有主题分布值和该词所在文本的主题分布乘积。

模型的perplexity就是exp^{ - (∑log(p(w))) / (N) },∑log(p(w))是对所有单词取log(直接相乘一般都转化成指数和对数的计算形式),N的测试集的单词数量(不排重)

from:http://blog.csdn.net/pipisorry/article/details/42460023

ref:http://stackoverflow.com/questions/19615951/topic-models-evaluation-in-gensim

http://www.52ml.net/14623.html

Ngram model and perplexity in NLTK

http://www.researchgate.net/publication/221484800_Improving_language_model_perplexity_and_recognition_accuracy_for_medical_dictations_via_within-domain_interpolation_with_literal_and_semi-literal_corpora

Investigating the relationship between language model perplexity and IR precision-recall
measures.

时间: 2024-08-28 05:46:38

LDA主题模型评估的相关文章

重磅︱R+NLP:text2vec包简介(GloVe词向量、LDA主题模型、各类距离计算等)

词向量的表示主流的有两种方式,一种当然是耳熟能详的google的word2vec,还有一类就是GloVe.那么前面一类有三个开源的包,后面这一类我倒是看到得不多,恰好是在我关注了许久的一个包里面有,它就是text2vec啦.该包提供了一个强大API接口,能够很好地处理文本信息. 本包是由C++写的,流处理器可以让内存得到更好的利用,一些地方是用RcppParallel包进行并行化加乘,同时兼容各个系统的服务器.如果没有并行的地方,大家也可以自己用foreach包来自己加速. ----------

用scikit-learn学习LDA主题模型

在LDA模型原理篇我们总结了LDA主题模型的原理,这里我们就从应用的角度来使用scikit-learn来学习LDA主题模型.除了scikit-learn,  还有spark MLlib和gensim库也有LDA主题模型的类库,使用的原理基本类似,本文关注于scikit-learn中LDA主题模型的使用. 1. scikit-learn LDA主题模型概述 在scikit-learn中,LDA主题模型的类在sklearn.decomposition.LatentDirichletAllocatio

LDA主题模型三连击-入门/理论/代码

本文将从三个方面介绍LDA主题模型--整体概况.数学推导.动手实现. 关于LDA的文章网上已经有很多了,大多都是从经典的<LDA 数学八卦>中引出来的,原创性不太多. 本文将用尽量少的公式,跳过不需要的证明,将最核心需要学习的部分与大家分享,展示出直观的理解和基本的数学思想,避免数学八卦中过于详细的推导.最后用python 进行实现. [TOC] 概况 第一部分,包括以下四部分. 为什么需要 LDA是什么 LDA的应用 LDA的使用 为什么需要 挖掘隐含语义信息.一个经典的例子是 "

R语言︱LDA主题模型——最优主题...

R语言︱LDA主题模型--最优主题...:https://blog.csdn.net/sinat_26917383/article/details/51547298#comments 原文地址:https://www.cnblogs.com/yijiaming/p/10148427.html

通俗理解LDA主题模型(boss)

0 前言 看完前面几篇简单的文章后,思路还是不清晰了,但是稍微理解了LDA,下面@Hcy开始详细进入boss篇.其中文章可以分为下述5个步骤: 一个函数:gamma函数 四个分布:二项分布.多项分布.beta分布.Dirichlet分布 一个概念和一个理念:共轭先验和贝叶斯框架 两个模型:pLSA.LDA(在本文第4 部分阐述) 一个采样:Gibbs采样 本文便按照上述5个步骤来阐述,希望读者看完本文后,能对LDA有个尽量清晰完整的了解.同时,本文基于邹博讲LDA的PPT.rickjin的LDA

Spark机器学习(8):LDA主题模型算法

1. LDA基础知识 LDA(Latent Dirichlet Allocation)是一种主题模型.LDA一个三层贝叶斯概率模型,包含词.主题和文档三层结构. LDA是一个生成模型,可以用来生成一篇文档,生成时,首先根据一定的概率选择一个主题,然后在根据概率选择主题里面的一个单词,这样反复进行,就可以生成一篇文档:反过来,LDA又是一种非监督机器学习技术,可以识别出大规模文档集或语料库中的主题. LDA原始论文给出了一个很简单的例子.Arts.Budgets.Children.Educatio

LDA主题模型浅析

上个月参加了在北京举办SIGKDD国际会议,在个性化推荐.社交网络.广告预测等各个领域的workshop上都提到LDA模型,感觉这个模型的应用挺广泛的,会后抽时间了解了一下LDA,做一下总结: (一)LDA作用 传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的. 举个例子,有两个句子分别如下: "乔布斯离我们而去了." "苹果价格会不会降?&

LDA主题模型学习笔记5:C源码理解

1,说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做注释,代码可在这里下载:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Latent Dirichlet Allocation>中介绍的LDA模型,用变分EM算法求解参数. 为了使代码在vs2013中运行做了一些微小改动,但不影响原代码的逻辑. vs2013工程可在我的资源中下载: http://download.csdn.net/detail/happyer88/8861773 -

LDA主题模型学习笔记4:求解模型参数(M-step)

这一步,我们根据E-step得到的γ,?,最大化L(γ,?;α,β),得到α,β. 1,拉格朗日乘数法求解β 首先把L(γ,?;α,β)简化,只保留与β有关的部分.因为β是每一行存一个主题的词分布,所以每一行的和是1,存在等式约束∑Vj=1βij=1,所以是带等式约束的最大化问题,使用拉格朗日乘数法,可得到拉格朗日函数如下: 用拉格朗日函数对β求偏导,令偏导为0,可得: 这里的?dni指的是对第d个文档的变分参数?ni,也就是第n个单词在第i个主题的词分布中的概率,wjdn是第d个文档中第n个单