主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)
上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类中单纯的使用奇异值分解计算复杂度会很高,使用概率推导可以使用一些优化迭代算法来求解。
Thomas Hofmann 于1998年根据似然原理定义了生成模型并由此提出了概率潜在语义分析模型(Probabilistic Latent Semantic Analysis),简称PLSA。
PLSA属于概率图模型中的生成模型,相关的模型还有语言模型中的一元模型(Unigram Model)、混合一元模型(Mixture of Unigrams Model)等。
首先对文集进行设定。假设文集的词典中共有V个词,词典向量为
,假设词是独立同分布的(一袋子词),即
,一篇文章可以表示为
,其中
表示第i个词在当前文档中出现的次数。
一元模型中假设每篇文档的词都独立遵从于多项式分布,即假设词典中第i个词
在文档中出现的次数遵从多项式分布,即
。打个比方来说假设我们有一个V面的骰子,骰子第i面向上的概率为
,每掷一次骰子得到一个词,掷M次后便得到一篇由M个词组成的文档
(文档的词之间是独立同分布的)。根据多项式分布可以知道文档
的概率为

下图中图(a)便是一元语言模型的概率图模型,而图(b)中是PLSA的概率图模型。
PLSA模型中与一元模型中假设词遵从多项式分布不同,PLSA模型中引入了潜层变量
作为主题变量,即假设当前文集由K个主题构成。设
为文集中的第m篇文档,
表示第t个主题,
为第i个词。
为所有文档的概率分布,
是文档
的概率,
为文档
对应的主题的分布,
为主题
对应的词的分布。
PLSA模型的生成过程如下:
- 根据概率
选择一篇文档
- 根据概率
选择一个潜性主题
,并且
- 根据概率
生成一个词
,并且
当然每个模型都对文集有一定的假设,PLSA做了如下的假设:
- 并元
的每一对共现是独立的 - 当已知潜性变量
的时候,变量
和变量
是条件独立的。
PLSA最初是根据视面模型(Aspect Model)提出的,假设1与一元模型中的“一袋子词”的假设相似,假设2与PLSA定义的图模型的生成关系有关,PLSA的图模型类似于X->Z->Y这种模式,在贝叶斯网络中被称为间接因果影响(“Indirect Causal Effect”)。举个例子来说,X表示你口袋里有没有2块钱,Z表示你能不能买一只笔,Y表示你能不能参加考试。假如不知道你能不能买一支笔(Z),那么你口袋里有没有2块钱(X)将影响到你能不能参加考试(Y)。但是假如你已经知道你是否可以买一只笔(Z),则你口袋里有没有2块钱(X)就影响不到你能不能参加考试了(Y)。即已知变量Z,变量X和Y是独立的。
PLSA最终是要求得每个并元
对应主题的概率,即
。下面我们来推导公式。PLSA使用极大似然估计(MLE)。
首先求解隐变量z的对数似然函数
:

由于PLSA模型的假设1,所以有:

其中
表示第n篇文档中的第m个词出现的次数。
又由于在已知变量z的情况下d和w是独立的,可得:

PLSA使用EM算法求解极大似然,EM算法是一种机器学习中非常常用的迭代近似算法。一般用来求解得到极大似然或极大后验的参数值。E步指的是在当前参数的情况下隐变量的后验概率(Expectation),M步指的是求解得到极大似然或极大后验的参数值(Maximization)。
首先计算上面似然函数的期望值:

上式有两个限制条件:


根据拉格朗日乘数法进行极值推导,分别对两个约束设定两个参数
,
:

在上式中分别对变量
和
求偏导得到:


与之前的限制条件联立得到:


于是便得到了M步求最大化的等式。
PLSA的EM步骤便可以化简如下:
E步:计算变量z的后验概率
M步:计算
,
PLSA的问题便是在变量中含有文档d这个变量,在模型上受限使其很难应用到其他文档上去。之后David Blei提出的LDA(Latent Dirichlet Allocation)便是给文集设定了两个超参来省略掉文档这个固定变量。
PLSA的实现C++代码:【还未上传】
https://blog-potatolife.rhcloud.com/?p=147
主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)的更多相关文章
- 主题模型之潜在语义分析(Latent Semantic Analysis)
主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...
- NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型
LSA(Latent semantic analysis,隐性语义分析).pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Late ...
- 主题模型(概率潜语义分析PLSA、隐含狄利克雷分布LDA)
一.pLSA模型 1.朴素贝叶斯的分析 (1)可以胜任许多文本分类问题.(2)无法解决语料中一词多义和多词一义的问题--它更像是词法分析,而非语义分析.(3)如果使用词向量作为文档的特征,一词多义和多 ...
- Notes on Probabilistic Latent Semantic Analysis (PLSA)
转自:http://www.hongliangjie.com/2010/01/04/notes-on-probabilistic-latent-semantic-analysis-plsa/ I hi ...
- Latent Semantic Analysis (LSA) Tutorial 潜语义分析LSA介绍 一
Latent Semantic Analysis (LSA) Tutorial 译:http://www.puffinwarellc.com/index.php/news-and-articles/a ...
- Latent semantic analysis note(LSA)
1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...
- 潜在语义分析Latent semantic analysis note(LSA)原理及代码
文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...
- 潜语义分析(Latent Semantic Analysis)
LSI(Latent semantic indexing, 潜语义索引)和LSA(Latent semantic analysis,潜语义分析)这两个名字其实是一回事.我们这里称为LSA. LSA源自 ...
- 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
随机推荐
- (转)EasyUI 分页总结
最近用到了easyui的分页和搜索栏功能,使用过程中由于运用不熟练导致其间也出现过一些问题,下面做个小结,供大家共同学习.1.首先使用EasyUI 的DataGrid分页,得加载其js类库:< ...
- iOS.OpenSource.PopularProject
1. Core Plot Core Plot is a plotting framework for OS X and iOS. It provides 2D visualization of dat ...
- 大神你好,可以帮我P张图吗?
韩国版的求大神帮我P张图,看得有点下巴脱臼啊!哈哈哈哈哈哈哈~ 感觉照片拍得很尴尬,请大神P得更有动感 拍了跳跃照片,但内衣露出来一点,能帮忙去掉吗 不喜欢没穿制服的样子,请帮忙加上制服 希望背景 ...
- eclipse中tomcat调试正确关联源码
1.build path中jar包关联本地源码 2.tomcat中添加source关联工程lib下的jar包 以上两步即可. 可解决tomcat直接关联本地源码debug时无法计算表达式的情况. 错误 ...
- Pairs of Songs With Total Durations Divisible by 60 LT1010
In a list of songs, the i-th song has a duration of time[i] seconds. Return the number of pairs of s ...
- autohotkey快捷键
;已经基本修复了输入带shift的时候跟输入法中英文切换之间的冲突 SetStoreCapslockMode, off SetKeyDelay, ^CapsLock:: #UseHook ;用这个和下 ...
- Redis (非关系型数据库) 数据类型 之 list列表类型
Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) list即可以作为“栈”也可以作为"队列". 操作: >lpush ...
- [C#.Net]C#连接Oracle数据库的方法
首先介绍下开发环境:WIn10 64bit+Visual Studio 2015+Oracle10ClientWin32(只是客户端,如果安装整个数据库也是可以的) 目前了解C#中连接Oracle数据 ...
- 初学者问题一oracle
问:(待解决)如何将纵向表改成横向表? (待解决)如何实现对大型数据范围差距不大的索引?(建什么索引树)
- 第一个kbmmw for Linux 服务器
从kbmmw 5.01 开始,就正式支持delphi 10.2 和Linux 了. 今天我们就建一个 kbmmw for linux 服务器简单说一下. 本例子基于上次的linux Daemon例子 ...