上一篇总结了潜在语义分析(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模型的生成过程如下:

  1. 根据概率选择一篇文档
  2. 根据概率选择一个潜性主题,并且
  3. 根据概率生成一个词,并且

当然每个模型都对文集有一定的假设,PLSA做了如下的假设:

  1. 并元的每一对共现是独立的
  2. 当已知潜性变量的时候,变量和变量是条件独立的。

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)的更多相关文章

  1. 主题模型之潜在语义分析(Latent Semantic Analysis)

    主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...

  2. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型

    LSA(Latent semantic analysis,隐性语义分析).pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Late ...

  3. 主题模型(概率潜语义分析PLSA、隐含狄利克雷分布LDA)

    一.pLSA模型 1.朴素贝叶斯的分析 (1)可以胜任许多文本分类问题.(2)无法解决语料中一词多义和多词一义的问题--它更像是词法分析,而非语义分析.(3)如果使用词向量作为文档的特征,一词多义和多 ...

  4. Notes on Probabilistic Latent Semantic Analysis (PLSA)

    转自:http://www.hongliangjie.com/2010/01/04/notes-on-probabilistic-latent-semantic-analysis-plsa/ I hi ...

  5. Latent Semantic Analysis (LSA) Tutorial 潜语义分析LSA介绍 一

    Latent Semantic Analysis (LSA) Tutorial 译:http://www.puffinwarellc.com/index.php/news-and-articles/a ...

  6. Latent semantic analysis note(LSA)

    1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...

  7. 潜在语义分析Latent semantic analysis note(LSA)原理及代码

    文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...

  8. 潜语义分析(Latent Semantic Analysis)

    LSI(Latent semantic indexing, 潜语义索引)和LSA(Latent semantic analysis,潜语义分析)这两个名字其实是一回事.我们这里称为LSA. LSA源自 ...

  9. 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis

    http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

随机推荐

  1. 冒泡排序(js版)

    基本思想:两两比较相邻记录的关键字,如果反序则交换,直至没有反序为止. 最初的冒泡排序(初级版): //从小到大 function BubbleSort(arr){ var i,j,temp; for ...

  2. collectionView 防止cell复用的方法

    collectionView 防止cell复用的方法 一: //在创建collectionView的时候注册cell(一个分区) UICollectionViewCell *cell=[collect ...

  3. 0 or 1,1 and 0

    最近小编遇到很头疼的的一件事 就是以下这几道运算题 ,以下结果是小编经过大量的运算得出的 一.或运算 1.0 or 1 结果为:1 2.1 or 0 结果为:1 3.1 or 2 结果为:1 4.2 ...

  4. LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree

    2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  5. tp5查看版本

    5.0 base.php 5.1 echo \think\facade\App::version();//用这行代码查看版本

  6. 在ListView中添加EditText丢失光标问题解决

    <ListView    android:id="@android:id/list"     android:layout_height="fill_parent& ...

  7. Python内置logging模块

    最近调试Python代码比较多,发现logging模块很好用. 我的用法如下: import logging logging.basicConfig(level=logging.INFO, forma ...

  8. 20155312 2016-2017-2 《Java程序设计》第五周学习总结

    20155312 2016-2017-2 <Java程序设计>第五周学习总结 课堂笔记 十个基本类型 命令:ascii打印ascii值, od -tx1 Test.java用十六进制查看代 ...

  9. kbmmw 与extjs 的初次结合

    前面写了extjs 的安装,今天写一下kbmmw 与extjs 的结合,参照delphi 产品经理marco文章 . 由于extjs 设计时要读取服务器端的数据,所以先要做一个rest 服务器. 先要 ...

  10. Linux 在文档中查找满足条件的行并输出到文件:

    Linux 在文档中查找满足条件的行并输出到文件: 文件名称: dlog.log    输出文件: out.log 1.满足一个条件(包含  “TJ”  )的语句: grep  “TJ”  dlog. ...