开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:pLSA 原理 上】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15529
pLSA 原理 上
pLSA 模型——概率表达式
开始有数学的部分,即pLSA模型的一些细节。
Θd: doc-topic分布的参数,T= {tk}: topic-word分布的参数
单个文档概率(假设隐变量Z已知)
单个文档概率(假设隐变量Z未知)
优化目标:找到Θd,T让 p(d|Θd,T)最大
Z有Ks种可能取值→Ks项乘积的求和
首先使用两个符号,一个是Θd,D是表示文档,一个文档D,Θd是文档它的doc-topic分布的参数,因为定义了doc-topic分布是一个K选一的零散分布,有个参数是一个KV的向量。tk参数的主题的概率,是ΘdK。
相当于掷骰子,掷骰子相当于六选一,扔出来就知道一个结果,六种情况下的一种,骰子可能很不均匀,得到的概率很不一样,比如可以用六维的向量表示每一面的概率,每次只能选一个。T表示topic-word分布,是W选一,W是词的个数,比如100000个词,每次从topic里选一个词出来,就是从100000个中选一个词,是一个18维的向量,和必须都为一,每一个tk都是一个1维位的向量,描述文档生成的过程是一个一个词生成,每个词如果知道它的主题,就是从T,zi的主题里抽出wi,概率是tzi,wi。还要算zi是某个值的概率。Z是随机变量,Z是很多zi组成,每个zi是随机变量,它可以取1到K的值的某一个,比如取1的时候,概率就是Θd1。当取K时,以及ΘdK的概率,用Θd,wi来表示。对每个词的概率相当于依托这一项。所有词的概率是所有i这些项相乘得到,比如文档里有10000个词,就是10000项的成绩,假设变量Z是已知的,但实际上Z是不知道,所以Z要代表第二个词的主题,比如与wi是对应的,把一个文档里的词编号w1一直编译到w10000,假设文档是10000个词,每个w1对应一个z1,w10000对应一个z10000。
现在的情况下z是未知的,算文档T的概率,简单粗暴的办法是把所有可能的Z都穷举一遍,然后把对应的概率加起来。成绩加Z,Z因为很长,可能包含10000个zi,从z1到z10000,求和实际上可以想象成10000个Θ,里面是10000个数相乘,计算上不可行。假设文档长度是S,有K的X次方种可能,取值有K的S方种的可能性,相当于里面有Ks项来求和,求和实际不是算文档的概率,而是算一个最优的Θd和T,最大化的概率,算最优的概率是最优的参数能够最大化的概率,可以对概率求导,对Θd求导,以及对T求导,找极值点,每个文档概率是Ks项,求导之后也得到多项,要算导数,算完导数才能做优化去求极值,占多项求和是不可行的。zi不是分布的参数,分布的参数不是包括Θd和T,虽然是因变量,不是关心的内容,但不得不算。S是当前文档的长度。比如S=10000,包含10000个词,可以假设100个主题,即每个词有100个主题,100种选择,属于100个主题里面的某一个。有10000个词就是100的10000次方,Z有这么多种可能,数字是天文数字。是非常难优化的。上面只是单个文档的概率,实际上优化参数是在所有的语调、所有的文档联合的概率,相当于把所有的乘起来,比如有M的文档,就M个项从D1到Dm概率乘起来
表达式更复杂一些,在外面再做一个连乘,简化符号就写三个文档,
一个基本思路是假设里面这项也是求和,而且个求和能分解就简单。比如符号表示连乘,Σ表示连加,假设Pz是可以按乘积乘法分解,里头一项变换一下,可以按zi到zl来分解,就是两层的求和,就可以把它按每一个zi单独算再加起来。



