LDA-Latent Dirichlet Allocation 学习笔记
以下内容主要基于《Latent Dirichlet Allocation》,JMLR-2003一文,另加入了一些自己的理解,刚开始了解,有不对的还请各位指正。
LDA-Latent Dirichlet Allocation
JMLR-2003
摘要:本文讨论的LDA是对于离散数据集,如文本集,的一种生成式概率模型。LDA是一个三层的贝叶斯分层模型,将数据集中每一项,如每个文本,建模为某些未知的topic组成的集合的混合。每个topic又建模为某种混合概率分布。在文本建模中,话题的概率就提供了每个doc的具体表示。
个人理解:1.生成式模型,就好像我们要写出一篇文章(生成一篇文档),我们在下笔的时候脑袋里要先有这个文章的主题,然后在这个主题下再构建合适的词来组成文档。这样的过程就是这篇文章里‘生成’的过程。
2.doc->mixture of topics; 每个topic->mixture of words,文中的Dirichlet分布也体现在这个分布的分布上,原因后续讲解。
基础知识,如果都懂,可以跳过:
一、tf-idf scheme
tf-idf scheme: 首先选中一个基字典basic vocabulary, 然后对每一个文档doc,查找每个词word的出现次数,然后进行归一化,最后得到的表示形式为一个term-by-document的矩阵X,而将任意长度的doc表示成固定长度的一个向量,而所有的doc则可以用一个list,也就是矩阵X,来表示:
doc_1 doc _2 … doc _ N
word_1 * * … *
word _2 * xij … *
…… … …
word _|V| * * … *
其中xij=#num of word_i / # num of total words in doc_j .
优点:可以简明易懂的将每个文档表示出来,而且无论每个文档本身长度如何,都缩减为固定长度(|V|)的向量;
缺点:1.如果选择的词典vocabulary比较大,那这个表示矩阵的维度也会比较大,而且其list的长度会随着库中文本数目的增加而增加;2.另外,这样的表示没有考虑文档与文档之间以及各文档内部的结构信息。
个人理解:除以上缺点外,这种方法的相似性判断建立的基础是认为文档之间重复的词语越多越相似,然而有一些属于语义层的相关,而并非表面的词语的相关,例如‘电脑’与‘微型计算机’这两个词并不相同,但意思相同,这时候如果用tf-idf方法通过统计单词个数比较相似性的方法,效果就不会太好。而主题模型就解决了这个问题,它的相关性体现在隐藏的主题的相关性上,而不是仅仅由表面的词语的重复度来决定。,如下图所示(摘自Thomas Huffman_ppt)。
二、LSI-Latent Semantic Indexing
针对缺点1,LSI(1990)将矩阵X进行奇异值分解,然后只取一部分作为其特征,此过程其实就相当于对X进行pca降维。将原始的向量转化到一个低维的隐含语义空间中,而保留下来的维度(根据奇异值大小决定)所对应的奇异值就对应了每个‘隐含语义’的权重,去掉的那些维度就相当于把那些不重要的‘隐含语义’的权重赋值为0.
LSI的作者Deerwester称由LSI得到的特征能够捕获一些基本的语义概念,例如同义词等。个人理解,这是由pca的性质决定的,。
LSI如其名字Latent Semantic Indexing, 旨在在词频矩阵X的基础上找出latent semantic,潜藏的语义信息。
其缺点是:不能解决多义词问题;
个人理解:这种方法就像词包模型一样,有一定的道理,但没有明确化,不像概率模型一样具体化。原文中说‘Given a generative model of text, however, it is not clear why one should adopt the LSI methodology’,个人觉得就是说他的理论基础不够明白,所以后续推出PLSI,就是能够从数学上,从理论上具有严格意义的说明是怎么回事,到底是为什么有效,又怎么得出理论解。
三、pLSI-probabilistic LSI
(pLSI图模型表示)
pLSI如上图,其中D,Z,W分别表示文档doc,主题topic,和单词word,在pLSI中对每一个都进行了建模,从文档到主题,建模为混合模型,从主题到单词也是一个混合模型,每个单词都是从这个混合模型中抽取出来的,不过在pLSI中每个混合模型的成分都是multinomial分布,根据上图,其中后验概率可以表示为:
p(z_k|d,w)=p(w|z_k)p(z_k|d)/sum_l(p(w|z_l)p(z_l|d))
用EM算法可以求解出各成分的参数。
个人理解:1.在pLSI中,每个doc已经可以有多个topic,每个topic出现的概率不等,这一点在LDA中也有。只不过LDA比pLSI多了一层。
2.上述混合模型的理解:类比于混合高斯模型一样,在混合高斯模型GMM中,是由多个高斯分布混合mixture而成的,在这里,每个混合模型的分量不是高斯分布,而是multinomial分布-多项式分布而已,而且区别于普通GMM,这里是有两层结构的,每一层都是一个混合模型,doc->topic层是一个混合模型,topic->word层也是一个混合模型,每个混合成分都是一个多项式分布,然后每个混合模型中包含了各个成分本身的参数和各个成分的权重的参数。
2.从上面这个图可以看出在pLSI中已经有了topic的概念,而且对于文档-主题和主题-单词两个层面都进行了建模(混合模型),但是也可以看出这个模型是对每一个文档集的,每一个文档集都对应着模型的一堆参数,如果新来一个文档(不在原来的训练集里),就没法处理。而LDA就可以不仅对已有的文本进行估计,也会对其他新的相似的文本给一个较高的probability。(注:在pLSI模型中,假设有k个topic,vocabulary长度为V,对于这k个topic有M个mixture,那总共有kV+kM个参数,这个数目是随着M的增加而增加的,当文本集中文档数目太大时就会overfitting)。
3.每个文档的表示就是一个list,其中的每个number表示了每个topic在其中的比例(mixing proportions)。这种表示,当文本集很大时,仍然会有很长的一个list。
四、LDA-latent dirichlet allocation
(LDA的图模型表示)
然后,由其概率模型图可以比较容易的得到模型如下:
推断:
计算后验概率:
似然函数
这个式子中对于beta和aplha都有指数幂而相互耦合,两个参数求导后都不能消掉,因此没办法直接用最大似然或者em求解,这时候引入变分推断(variational inference)。变分推断就是为了顾及后验分布,在无法直接对似然函数求解的情况下寻找一个似然函数的下界。然后利用EM的思想进行迭代,让这个下界逐次增大,达到最后收敛。
针对pLSI的缺陷,LDA很大的一个特点是将doc->topic这一层的mixture weights作为是一个k-d的随机变量,而不是像pLSI一样作为直接与训练集中的每个doc相关联的参数集合。就是原文中的theta作为一个随机变量。对于一个有k个topic的模型来说,他总共有k+kV个参数(alpha有k个参数,beta有kV个参数),与训练集中的文档数目M无关。
基础:无论是LSI,PLSI还是LDA都有一个假设,就是无序性假设(exchangeability),即认为文档中的word的出现位置先后没有关系,文档集中的各个doc的位置也不计较先后关系。
在LDA中,文档中topic的分布取为multinomial分布,其先验取为multinomial分布的共轭先验-dirichlet分布;而每个topic下word的分布也取为multinomial分布,其先验也取其共轭先验-dirichlet分布。
参考网址1,关于LDA中各个分布的一个通俗解释如下:“我们可以假想有一位大作家,比如莫言,他现在要写m篇文章,一共涉及了K个Topic,每个Topic下的词分布为一个从参数为的Dirichlet先验分布中sample出来的Multinomial分布(注意词典由term构成,每篇文章由word构成,前者不能重复,后者可以重复)。对于每篇文章,他首先会从一个泊松分布中sample一个值作为文章长度,再从一个参数为的Dirichlet先验分布中sample出一个Multinomial分布作为该文章里面出现每个Topic下词的概率;当他想写某篇文章中的第n个词的时候,首先从该文章中出现每个Topic下词的Multinomial分布中sample一个Topic,然后再在这个Topic对应的词的Multinomial分布中sample一个词作为他要写的词。不断重复这个随机生成过程,直到他把m篇文章全部写完。这就是LDA的一个形象通俗的解释。”
,也就是将原来的图模型中的w节点去掉并且去掉了theta 与z之间的边而得到近似。
在得到近似函数后,就通过求解最优近似函数q的参数来得到原后验的参数。
2. http://hi.baidu.com/hehehehello/item/677f9446b729a72210ee1e8b ,pLSI与LDA详细的区别;
3. http://hi.baidu.com/linecong/item/8c115b196232147a7b5f2598 ,
4.百度搜索官方博客:http://stblog.baidu-tech.com/?p=1190
6.关于LSA中用到的SVD奇异值分解可以参考之前转的一篇文章: http://blog.sina.com.cn/s/blog_5033f3b40101a61t.html
7.plsa http://moonwith.blog.163.com/blog/static/12368689120099220115495/
转载于:https://www.cnblogs.com/focus-ml/p/3713949.html
LDA-Latent Dirichlet Allocation 学习笔记相关推荐
- gensim实现LDA(Latent Dirichlet Allocation)算法提取主题词(topic)
Latent Dirichlet Allocation(LDA) 隐含分布作为目前最受欢迎的主题模型算法被广泛使用.LDA能够将文本集合转化为不同概率的主题集合.需要注意的是LDA是利用统计手段对主 ...
- R语言文本主题模型之潜在语义分析(LDA:Latent Dirichlet Allocation)
文本分析:主题建模 library(tidyverse) theme_set( theme_bw()) 目标 定义主题建模 解释Latent Dirichlet以及此过程的工作原理 演示如何使用LDA ...
- 自然语言处理NLP之主题模型、LDA(Latent Dirichlet Allocation)、语义分析、词义消歧、词语相似度
主题模型 主题模型旨在文章中找到一种结构,学习到这种结构后,一个主题模型可以回答以下这样的问题.X文章讨论的是什么?X文章和Y文章直接有多相似?如果我对Z文章感兴趣我应该先读那些文章?什么是主题?主题 ...
- LDA: 从头到尾彻底理解LDA (Latent Dirichlet Allocation)
小记: 很长一段时间没有更新博客了,因为工作比较忙,也没有回答一些朋友的问题, 非常抱歉. 这篇LDA的总结已经写好了有三个多月, 一直没有时间发到CSDN上, 今天周末, 本来打算在很火爆的国内MO ...
- 简单易学的机器学习算法——Latent Dirichlet Allocation(理论篇)
引言 LDA(Latent Dirichlet Allocation)称为潜在狄利克雷分布,是文本语义分析中比较重要的一个模型,同时,LDA模型中使用到了贝叶斯思维的一些知识,这些知识是统计机器学习的 ...
- 潜在狄利克雷分配(Latent Dirichlet Allocation,LDA)
文章目录 1. 狄利克雷分布 2. 潜在狄利克雷分配模型 3. 学习推理 4. sklearn.decomposition.LatentDirichletAllocation 潜在狄利克雷分配(lat ...
- LDA(Latent Dirichlet allocation)
目录 1. 贝叶斯网络 2. 主题模型 2.1 主题模型的直观理解 2.2 共轭先验分布 2.3 二项分布及其共轭先验--Beta分布 2.3.1 Bete分布 2.3.2 二项分布与其先验分布 2. ...
- 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(三)
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(三) 目录 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(三) 主题演 ...
- 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(二)
潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(二) 目录 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(二) LDA ...
最新文章
- 新僵尸病毒猖獗 Facebook成攻击目标
- C++ ACM解题
- C++后继有人——D语言
- python 函数部分
- 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
- 51nod 1402 最大值 3级算法题 排序后修改限制点 时间复杂度O(m^2)
- 数据结构---B-(B)、B+的总结
- oracle数据库相关知识,Oracle数据库相关知识点复习
- 建筑专业规范大全 2020版_房屋建筑工程现行规范标准目录汇编(2020版)—建筑电气...
- Eclipse中JDK从1.8换到1.7程序运行报错解决
- 怎么把文件上传云服务器上,如何把文件上传到云服务器上
- 关于Bootstrap的理解
- Spring Boot与JWT整合实现前后端分离的用户认证
- 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感...
- 学习时有必要做思维导图吗?
- FOSCommentBundle功能包:指南索引页
- js读取excel,xlsx,xls 表格,转成JSON数据
- python中的snip用法_Ubuntu系统中安装SNIP
- 我将进化成一条狗(10)——长寿秘诀
- 【蓝牙串口无线烧写程序】适用于STM32F405RG的Bootloader
热门文章
- 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(二)---静态文件如何部署...
- Koa2+Mysql搭建简易博客
- RegExp类型exec()方法的返回值说明
- 仔细学习CSS(一)
- 单片机的 FIFO循环队列实现
- 通用滤波器设计----东南大学的
- 我理解的invoke和begininvoke
- [maven] springboot将jar包打包到指定目录
- 解决HbuiderX将uni-app开发的项目运行到小程序编译后文件vendor.js太大的问题
- java 如何让循环结束,跳过某个条件,跳出当前的多重嵌套循环