首页 > 代码库 > Topic Model之Probabilistic Latent Semantic Indexing(PLSI/PLSA)

Topic Model之Probabilistic Latent Semantic Indexing(PLSI/PLSA)

Probabilistic Latent Semantic Indexing(PLSI/PLSA)是常用的话题模型之一,他通过生成模型来模拟文档的产生过程,然后用Maximum likelihood的方法估计模型中未知参数的值,来获取整个生成模型中的参数值,从而构建起整个生成模型。

一、 基本概念

1.  SVD奇异值分解:SVD主要用来求低阶近似问题。当给定一个MXN的矩阵C时(其秩为r),我们希望找到一个近似矩阵C‘(其秩不大于k),当k远小于r时,我们称C’为C的低阶近似,设X = C - C‘为两个矩阵的差,X的F-范数为:


SVD计算步骤:

a、 给定一个矩阵C,对其奇异值进行分解:C = U ∑ V

b、 构造∑ ‘, 其秩为k,选择将∑ 中奇异值最小的r-k个值置为0,即得到∑ ’

c、 计算C‘ = U ∑’ V

因为特征值大小对矩阵和向量乘法的影响大小成正比,而奇异值和特征值也是成正比,因而选择最小的r-k个奇异值置为0 是合理的。

2. PCA主成分分析:PCA试图在丢失数据信息最少的情况下,对多维的数据进行最优综合简化,对高维的变量空间进行降维处理。

PCA计算步骤:

a、 首先计算训练样本的均值和协方差矩阵:

b、 对协方差矩阵进行特征值分解:

c、 选择前k个最大的特征值对应的特征向量作为主成分分量,这些分量构成特征空间,我们就得到变换矩阵

任何一条数据X,通过如下变化,将其转化到新的特征空间中的向量y:

 

3.  TF-IDF: 

首先介绍TF-term frequency,它用来度量 一个单词在一个文档中出现的频率。由于不同的文档长短不同,为了防止TF偏向于长文件,通常对词频进行归一化处理。

通常一个文档中如果某个词出现的频率较高,可以认为这个文档和这个词的相关性比较高,但是,如果所有的文档都含有这个词,这时候,这个词的区分度反而就不是那么高。因此,可以用IDF来度量一个词的区分度:逆向文件频率——将总文件数除以包含该词语的文件数,将结果取对数,即得到逆向文件频率。

最后,综合TF和IDF,我们得到TF-IDF的计算方法:

某一个特定文件中的高频词,以及该词在所有文件中的低文件频率,可以产生出较高的TFIDF. TF-IDF倾向于过滤掉常见词,保留区分度较高的词。

4. BOW: bag of words

BOW将一篇文章看成是词汇的集合,忽略单词在文章中出现的位置、句法语法等信息。利用文章中出现过的词构建一个词表,基于词表将每一篇文章转化为一个向量,向量的每一维对应一个单词,每一维的值对应单词出现的次数。


二、 LSI模型

LSA(LSI)使用SVD来对单词-文档矩阵进行分解。SVD可以看作是从单词-文档矩阵中发现不相关的索引变量(因子),将原来的数据映射到语义空间内。在单词-文档矩阵中不相似的两个文档,可能在语义空间内比较相似。

SVD,亦即奇异值分解,是对矩阵进行分解的一种方法,一个t*d维的矩阵(单词-文档矩阵)X,可以分解为T*S*DT,其中T为t*m维矩阵,T中的每一列称为左奇异向量(left singular bector),S为m*m维对角矩阵,每个值称为奇异值(singular value),D为d*m维矩阵,D中的每一列称为右奇异向量。在对单词文档矩阵X做SVD分解之后,我们只保存S中最大的K个奇异值,以及T和D中对应的K个奇异向量,K个奇异值构成新的对角矩阵S’,K个左奇异向量和右奇异向量构成新的矩阵T’和D’:X’=T’*S’*D’T形成了一个新的t*d矩阵。

假设索引的文档的集合如下:


对应的单词-文档矩阵X如下:

[[ 1.  0.  0.  1.  0.  0.  0.  0.  0.]
[ 1.  0.  1.  0.  0.  0.  0.  0.  0.]
[ 1.  1.  0.  0.  0.  0.  0.  0.  0.]
[ 0.  1.  1.  0.  1.  0.  0.  0.  0.]
[ 0.  1.  1.  2.  0.  0.  0.  0.  0.]
[ 0.  1.  0.  0.  1.  0.  0.  0.  0.]
[ 0.  1.  0.  0.  1.  0.  0.  0.  0.]
[ 0.  0.  1.  1.  0.  0.  0.  0.  0.]
[ 0.  1.  0.  0.  0.  0.  0.  0.  1.]
[ 0.  0.  0.  0.  0.  1.  1.  1.  0.]
[ 0.  0.  0.  0.  0.  0.  1.  1.  1.]
[ 0.  0.  0.  0.  0.  0.  0.  1.  1.]]

对其进行SVD分解得到X=T*S*DT:

其中T如下:

[-0.22 -0.11  0.29 -0.41 -0.11 -0.34 -0.52  0.06  0.41]
[-0.2  -0.07  0.14 -0.55  0.28  0.5   0.07  0.01  0.11]
[-0.24  0.04 -0.16 -0.59 -0.11 -0.25  0.3  -0.06 -0.49]
[-0.4   0.06 -0.34  0.1   0.33  0.38 -0.    0.   -0.01]
[-0.64 -0.17  0.36  0.33 -0.16 -0.21  0.17 -0.03 -0.27]
[-0.27  0.11 -0.43  0.07  0.08 -0.17 -0.28  0.02  0.05]
[-0.27  0.11 -0.43  0.07  0.08 -0.17 -0.28  0.02  0.05]
[-0.3  -0.14  0.33  0.19  0.11  0.27 -0.03  0.02  0.17]
[-0.21  0.27 -0.18 -0.03 -0.54  0.08  0.47  0.04  0.58]
[-0.01  0.49  0.23  0.02  0.59 -0.39  0.29 -0.25  0.23]
[-0.04  0.62  0.22  0.   -0.07  0.11 -0.16  0.68 -0.23]
[-0.03  0.45  0.14 -0.01 -0.3   0.28 -0.34 -0.68 -0.18]
DT如下:

[-0.2  -0.61 -0.46 -0.54 -0.28 -0.   -0.01 -0.02 -0.08]
[-0.06  0.17 -0.13 -0.23  0.11  0.19  0.44  0.62  0.53]
[ 0.11 -0.5   0.21  0.57 -0.51  0.1   0.19  0.25  0.08]
[-0.95 -0.03  0.04  0.27  0.15  0.02  0.02  0.01 -0.02]
[ 0.05 -0.21  0.38 -0.21  0.33  0.39  0.35  0.15 -0.6 ]
[-0.08 -0.26  0.72 -0.37  0.03 -0.3  -0.21  0.    0.36]
[-0.18  0.43  0.24 -0.26 -0.67  0.34  0.15 -0.25 -0.04]
[ 0.01 -0.05 -0.01  0.02  0.06 -0.45  0.76 -0.45  0.07]
[ 0.06 -0.24 -0.02  0.08  0.26  0.62 -0.02 -0.52  0.45]
S如下:

[ 3.34                                                                              
        2.54                                                                     
              2.35                                                           
                    1.64                                                   
                         1.50                                          
                               1.31                                
                                    0.85                       
                                         0.56            
                                              0.36] 

如果我们只保留奇异值最大的两个,则得到T’
[-0.22 -0.11]
[-0.2  -0.07]
[-0.24  0.04]
[-0.4   0.06]
[-0.64 -0.17]
[-0.27  0.11]
[-0.27  0.11]
[-0.3  -0.14]
[-0.21  0.27]
[-0.01  0.49]
[-0.04  0.62]
[-0.03  0.45]

得到的D‘T如下:

[-0.2  -0.61 -0.46 -0.54 -0.28 -0.   -0.01 -0.02 -0.08]
[-0.06  0.17 -0.13 -0.23  0.11  0.19  0.44  0.62  0.53]
S’如下:

[[ 3.34        0.    ]
 [ 0.          2.54  ]]
最后还原得到X‘如下:

[ 0.16  0.4   0.38  0.47  0.18 -0.05 -0.12 -0.16 -0.09]
[ 0.14  0.37  0.33  0.4   0.16 -0.03 -0.07 -0.1  -0.04]
[ 0.15  0.51  0.36  0.41  0.24  0.02  0.06  0.09  0.12]
[ 0.26  0.84  0.61  0.7   0.39  0.03  0.08  0.12  0.19]
[ 0.45  1.23  1.05  1.27  0.56 -0.07 -0.15 -0.21 -0.05]
[ 0.16  0.58  0.38  0.42  0.28  0.06  0.13  0.19  0.22]
[ 0.16  0.58  0.38  0.42  0.28  0.06  0.13  0.19  0.22]
[ 0.22  0.55  0.51  0.63  0.24 -0.07 -0.14 -0.2  -0.11]
[ 0.1   0.53  0.23  0.21  0.27  0.14  0.31  0.44  0.42]
[-0.06  0.23 -0.14 -0.27  0.14  0.24  0.55  0.77  0.66]
[-0.06  0.34 -0.15 -0.3   0.2   0.31  0.69  0.98  0.85]
[-0.04  0.25 -0.1  -0.21  0.15  0.22  0.5   0.71  0.62]
还原后的X’与X差别很大,这是因为我们认为之前X存在很大的噪音,X’是对X处理过同义词和多义词后的结果。
 在查询时,对与每个给定的查询,我们根据这个查询中包含的单词(Xq)构造一个伪文档:Dq=XqTS-1,然后该伪文档和D’中的每一行计算相似度(余弦相似度)来得到和给定查询最相似的文档。

(此处参考:http://www.cnblogs.com/kemaswill/)


三、 PLSI

1. Model引入:


PLSI是一个生成模型,它同时产生文档d和文档中包含的词w,以及文档的话题z(隐变量)。

下图示意了PLSI的生成过程:


首先从语料库中以P(d)的概率选择一篇文档d,然后从文档d中以P(z|d)的概率选择文档所包含的话题z,对于话题z,以P(w|z)的概率从词表中选择话题z包含的词w。在话题模型中,单词-文档矩阵被分解成为两个矩阵:一个话题矩阵Φ和一个文档矩阵Θ。


2. PLSI的应用介绍

这样的分解方式,可以有很多应用,中间的隐变量(话题)在不同的场景下可以有不同的理解:


以上这个例子中,将隐变量(话题)理解为客户的Latent Profile,根据用户的Latent Profile可以知道什么样的客户喜欢什么样的Product。这样可以用来为客户推荐新的Product。



再比如,对于文档而言,我们可以将文档-单词矩阵X表示成文档-话题矩阵V(用话题来表示文档),以及话题-单词矩阵U(用单词来表示话题)。

3. Maxium Likelihood

为了理解PLSI模型,我们首先介绍一下Maxium Likelihood:

我们知道,很多的概率分布函数都是由一些参数所控制着,例如,对于正态分布(X~N(μ,σ^))有均值和方差两个参数控制,当我们知道参数的时候,我们就知道了随机变量X的分布情况。假如我们有了一个从某分布产生的数据集X={x1, x2, ..., xn},但是我们不知道分布的参数,那么我们可以假定,这个参数最有可能是使得产生数据集X的概率最大的参数。假定我们已经知道这个参数,那么产生数据集X的概率可以用下面这个式子来表示:


注:a、此处假定数据集中的每个样本都是独立同分布的;b、实际上这个式子是概率的对数形式——log-likelihood。

有了关于数据集X的概率的表达式,我们寻求使这个概率最大的参数Θ*,在参数Θ取这个Θ*时,概率L最大。那我们有理由认为,Θ很有可能就是我们求得的Θ*.

4. PLSI的推导

依据Maxium Likelihood的原理,我们按照PLSI的生成模型来计算已知文档的log-likelihood.


以上的Θ即我们这个生成模型中控制所有概率分布的位置参数,我们得到likelihood的表达式以后,通过最大化likelihood来求解Θ的值。

在求解使likelihood最大的Θ的值的过程中,我们用到了Jensen不等式。Jensen不等式的直观理解如下图所示:


设随机变量X以及一个凸函数f,对于随机变量f(X)的期望值E[f(x)]大于或者等于X的期望值EX对应的函数值f(EX).等号成立当且仅当X = EX,即X是一个常量

直接求解L是比较困难的,我们可以通过不断迭代,每次寻求一个L的下界(lower-bound),然后不断优化这个lower-bound的值,使其逼近最优值。


按照上面的思路,我们来推导PLSI:

我们首先定义

把之前求得的L应用Jensen不等式计算一个Lower-bound


得到lower-bound的表达式以后,我们用拉格朗日乘子法来求解未知参数。


E-Step:

a、 求解:P(w|z)

由于ΣP(w|z) = 1,所以采用拉格朗日乘子法以后,我们将得到的拉格朗日表达式对P(w|z)求导,得到下式


   解得:

由于ΣP(w|z) = 1, 我们可以得到:

b、 求解P(d|z): 同a,我们求得表达式如下


c、 求解P(z)

由于条件ΣP(z) = 1,我们同样采用拉格朗日乘子法,

求解得到:

由于条件ΣP(z) = 1我们得到:

M-Step:


最终迭代更新的方程为:


5. PLSI算法设计:

:初始化的时候,几个待求的未知参数可以设置为随机的值,只要满足所有概率的总和为1即可。