zoukankan      html  css  js  c++  java
  • PLSA算法(转)

    文章分类:综合技术

    1. 引子

    Bag-of-Words 模型是NLP和IR领域中的一个基本假设。在这个模型中,一个文档(document)被表示为一组单词(word/term)的无序组合,而忽略了语法 或者词序的部分。BOW在传统NLP领域取得了巨大的成功,在计算机视觉领域(Computer Vision)也开始崭露头角,但在实际应用过程中,它却有一些不可避免的缺陷,比如:

    1. 稀疏性(Sparseness): 对于大词典,尤其是包括了生僻字的词典,文档稀疏性不可避免;
    2. 多义词(Polysem): 一词多义在文档中是常见的现象,BOW模型只统计单词出现的次数,而忽略了他们之间的区别;
    3. 同义词(Synonym): 同样的,在不同的文档中,或者在相同的文档中,可以有多个单词表示同一个意思;

    从 同义词和多义词问题我们可以看到,单词也许不是文档的最基本组成元素,在单词与文档之间还有一层隐含的关系,我们称之为主题(Topic)。我们在写文章 时,首先想到的是文章的主题,然后才根据主题选择合适的单词来表达自己的观点。在BOW模型中引入Topic的因素,成为了大家研究的方向,这就是我们要 讲的Latent Semantic Analysis (LSA) 和 probabilitistic Latent Semantic Analysis (pLSA),至于更复杂的LDA和众多其他的Topic Models,以后再详细研究。

    2. LSA简介

    已知一个文档数据集D={ d_1,d_2,...,d_N}及相应的词典W={ w_1,w_2,...,w_M},采用BOW模型假设,我们可以将数据集表示为一个N*W的共生矩阵,N=(n(d_i,w_j))_{i,j},其中,n(d_i,w_j)表示词典中的第j个单词在第i个文档中出现的次数。

    LSA的基本思想就是,将document从稀疏的高维Vocabulary空间映射到一个低维的向量空间,我们称之为隐含语义空间(Latent Semantic Space).

    如何得到这个低维空间呢,和PCA采用特征值分解的思想类似,作者采用了奇异值分解(Singular Value Decomposition)的方式来求解Latent Semantic Space。标准的SVD可以写为:

     N = U Sigma V^t


    其中,UV均为正交矩阵,有U^t U = V^t V = ISigma是包含N所有奇异值的对角矩阵。LSA降维的方式就是只取Sigma中最大的K个奇异值,而其他置为0,得到Sigma的近似矩阵	ilde{Sigma},于是得到了共生矩阵的近似:

     	ilde{N} = U 	ilde{Sigma} V^t


    注意到如果我们利用内积来计算文档与文档之间的的相似度,即N的自相关矩阵,可以得到:	ilde{N}	ilde{N}^t = U 	ilde{Sigma}^2 U^t。于是,我们可以把U 	ilde{Sigma}解释为文档样本在Latent Space上的坐标,而V^t则是两个空间之间的变换矩阵。下图形象的展示了LSA的过程:

    image

    由LSA在训练集合上得到的参数,当一个新的文档向量vec{x}_{test}到来时,我们可以利用下式将其原始term space映射到latent space:

     	ilde{vec{x}} = 	ilde{Sigma}^{-1} V^t vec{x}_{test}

    LSA的优点

    1. 低维空间表示可以刻画同义词,同义词会对应着相同或相似的主题;
    2. 降维可去除部分噪声,是特征更鲁棒;
    3. 充分利用冗余数据;
    4. 无监督/完全自动化;
    5. 与语言无关;

    LSA的不足

    1. 没有刻画term出现次数的概率模型;
    2. 无法解决多义词的问题;
    3. SVD的优化目标基于L-2 norm 或者是 Frobenius Norm的,这相当于隐含了对数据的高斯噪声假设。而term出现的次数是非负的,这明显不符合Gaussian假设,而更接近Multi-nomial分布;
    4. 对于count vectors 而言,欧式距离表达是不合适的(重建时会产生负数);
    5. 特征向量的方向没有对应的物理解释;
    6. SVD的计算复杂度很高,而且当有新的文档来到时,若要更新模型需重新训练;
    7. 维数的选择是ad-hoc的;

    3. pLSA

    类似于LSA的思想,在pLSA中也引入了一个Latent class,但这次要用概率模型的方式来表达LSA的问题,如下图:

    image

    在这个probabilitistic模型中,我们引入一个Latent variable z_k in { z_1,z_2,...,z_K },这对应着一个潜在的语义层。于是,完整的模型为:p(d_i)代表文档在数据集中出现的概率;p(w_j|z_k)代表当确定了语义z_k时,相关的term(word)出现的机会分别是多少; p(z_k |d_i) 表示一个文档中语义分布的情况。利用以上这些定义,我们就可以一个生成式模型(generative model),利用它产生新的数据:

    1. 首先根据分布p(d_i)随机抽样选择一个文档d_i;
    2. 选定文档后,根据 p(z_k|d_i) 抽样选择文档表达的语义z_k
    3. 选定语义后,根据p(w_j|z_k)选择文档的用词;

    image

    这样,我们得到了一个观测对(d_i, w_j),多次重复这一过程我们就得到了一个类似N的共生矩阵,而潜在的语义z_k在观测值中并没有表现出来。为了刻画(d_i, w_j)的联合分布,我们可得到以下公式:

     p(d_i,w_j)=p(d_i)p(w_j | d_i), p(w_j | d_i)=sum_{k=1}^{K} p(w_j |z_k) p(z_k |d_i)


    用图模型来表示以上公式如Figure3中的(a),而(b)是pLSA模型的另外一种等价形式,公式可写作:

     p(d_i,w_j)=sum_{k=1}^{K} p(w_j |z_k) p(z_k)p(d_i |z_k)


    模型确定好了,已知的数据集N,我们可以利用Maximum Likelihood准则来确定模型的参数,目标函数可写作:

     mathcal{L} &= sum_{i=1}^{N}sum_{j=1}^{M} n(d_i, w_j) log p(d_i, w_j)\ &= sum_{i=1}^{N} n(d_i) {log p(d_i) + sum_{j=1}^{M} frac{n(d_i, w_j)}{n(d_i)} log sum_{k=1}^{K} p(w_j | z_k) p(z_k | d_i) }


    此目标函数也可以解释为使p(w_j |d_i)frac{n(d_i, w_j)}{n(d_i)}两个分布之间的K-L Divergence最小,即p(w_j |d_i)更好的刻画共生矩阵的实际分布。

    EM求解

    在似然值mathcal{L}的表达式中存在对数内部的加运算,所以球pLSA最大似然解的问题没有闭式解,我们只能求助于EM算法,下面我们从最简单的启发式的角度推导出pLSA的求解过程。

    既然似然值mathcal{L}无法直接求解最大值,那么我们转而优化其下界mathcal{F},并通过迭代不断的将此下界提高,那么最终得到的解即为mathcal{L}近似最大解, 当然,此过程中寻求的下界mathcal{F}要求尽量紧确。利用琴生不等式和概率小于1的性质,我们可以得到如下推导:

     mathcal{L} &= sum_{i=1}^{N}sum_{j=1}^{M} n(d_i, w_j) log p(d_i, w_j)

      

    = sum_{i=1}^{N}sum_{j=1}^{M} n(d_i, w_j) log (sum_{k=1}^{K} p(w_j | z_k)p(z_k) p(d_i | z_k )) }

          

    ge sum_{i=1}^{N}sum_{j=1}^{M} n(d_i, w_j) sum_{k=1}^{K} log ( p(w_j | z_k) p(z_k) p(d_i | z_k )) }
     
    >  mathcal{F} &=  sum_{i=1}^{N}sum_{j=1}^{M} n(d_i, w_j) sum_{k=1}^{K} p(z_k | d_i, w_j)log ( p(w_j | z_k)p(z_k) p(d_i | z_k )) }

    这样,我们就把sum拿到了log外面来,接下来我们就可以对mathcal{F}直接求解了。注意这个最大化问题的约束条件是:
    sum p(w|z)=1, sum p(z)=1, sum p(d|z)=1


    利用拉格朗日法,我们可以得到优化目标:

     mathcal{F} &=  sum_{i=1}^{N}sum_{j=1}^{M} n(d_i, w_j) sum_{k=1}^{K} p(z_k | d_i, w_j)log ( p(w_j | z_k)p(z_k) p(d_i | z_k )) }

               

     + sum_{k=1}^K lambda_k [sum_{i=1}^N p(d_i | z_k) - 1] + sum_{k=1}^K mu_k [sum_{j=1}^M p(w_j | z_k) - 1] + xi[sum_{k=1}^K p(z_k)-1]


    对此目标函数求导,我们可以得到EM算法中的M-step:

     &p(w_j | z_k) propto sum_d n(d_i,w_j) p(z_k|d_i, w_j)

                

    p(d_i | z_k) propto sum_w n(d_i,w_j) p(z_k|d_i, w_j)

                             

    p(z_k) propto sum_d sum_w n(d_i,w_j) p(z_k|d_i, w_j)

      而EM算法中的E-step也就是求已知d_i, w_j时隐含变量z_k的后验概率:

     p(z_k|d_i, w_j)= frac { p(w_j | z_k) p(z_k) p(d_i | z_k )}{sum_k' p(w_j | z_k') p(z_k') p(d_i | z_k' )}


    观察可以得到,E-step与M-step互相依赖,可以证明每一步都使得下界mathcal{F}的期望值提高,通过不断的迭代求解即可最后求得原问题的近似最大似然解。

    pLSA与LSA的关系

    由Figure4可以看到pLSA与LSA之间的对应关系。其中p(z)刻画了Latent Space也即topic space的信息;p(w|z)刻画了topic space与term space之间的关系,对应着LSA中的正交基V;在文档分类是,这两部分也就是我们在模型训练结束需要保存的信息,当一个新的文档的到来时, 我们可以再次利用EM算法得到新的文档与主题的对应关系p(d|z),并由此得到文档在topic空间上的表示 p(z|d)

    image

    pLSA的优势

    1. 定义了概率模型,而且每个变量以及相应的概率分布和条件概率分布都有明确的物理解释;
    2. 相比于LSA隐含了高斯分布假设,pLSA隐含的Multi-nomial分布假设更符合文本特性;
    3. pLSA的优化目标是是KL-divergence最小,而不是依赖于最小均方误差等准则;
    4. 可以利用各种model selection和complexity control准则来确定topic的维数;

    pLSA的不足

    1. 概率模型不够完备:在document层面上没有提供合适的概率模型,使得pLSA并不是完备的生成式模型,而必须在确定document i的情况下才能对模型进行随机抽样;
    2. 随着document和term 个数的增加,pLSA模型也线性增加,变得越来越庞大;
    3. 当一个新的document来到时,没有一个好的方式得到$p(d_i)$;
    4. EM算法需要反复的迭代,需要很大计算量;

    针对pLSA的不足,研究者们又提出了各种各样的topic based model, 其中包括大名鼎鼎的Latent Dirichlet Allocation (LDA),在此就不再多说了。

    4. 参考文献

    1. Thomas Hofmann, “Unsupervised Learning by Probabilistic Latent Semantic Analysis,” Machine Learning 42, no. 1 (January 1, 2001): 177-196
  • 相关阅读:
    二 web爬虫,scrapy模块以及相关依赖模块安装
    一 web爬虫,requests请求
    Linux 常用命令大全
    HTTP响应状态码参考
    python-进程,线程,协程
    SVN图形管理工具-Submint
    python-Socket网络编程
    python基础-pickle与shelve
    python-面向对象
    10分钟看懂, Java NIO 底层原理
  • 原文地址:https://www.cnblogs.com/end/p/3177336.html
Copyright © 2011-2022 走看看