mf模型 svd++_02 主题模型 - SVD矩阵分解、LSA模型

主题模型 克服了传统信息检索中文档相似度计算方法的缺点,并且能够在海量的数据中找出文字间的语义主题。主题模型在自然语言和给予文本的搜索上起到了重要的作用。

怎样才能生成主题?对文章的主题应该怎么分析?这是主题模型要解决的问题。

6a5fd64151e1?from=timeline

从结果上来看,我们希望将一个包含(词语×文档)的矩阵,分解成(词语×主题)和(主题×文档)两个矩阵相乘的结果。如果可以分解成功,那么矩阵对应的主题向量就是我们所有获取的主题信息。 从而达到了文档分类的结果。

当我们想要提取文档隐含主题的时候,我们可以通过矩阵分解来提取我们需要的信息。下面介绍矩阵分解的算法。

三、SVD 奇异值分解

6a5fd64151e1?from=timeline

将m×n的矩阵,分解成三个m×r、r×r、r×n的矩阵。这是我们本质上想要做的事情。但是有些时候我们的原始m×n矩阵比较大,我们可以这样操作:

1、在m×r矩阵中取前k列。

2、在r×r矩阵中我们取对角线的k个元素。

3、在r×n矩阵中取前k行。

即分解形成:m×k、k×k、k×n三个矩阵。这三个矩阵相乘的结果近似于原始矩阵m×n矩阵。

求解SVD的方法:

定义: 现在有矩阵An×n,Xn×1是一个向量。如果AX=λX;那么λ就是矩阵A的一个特征值,X是当前特征值λ对应的特征向量。

一个特征向量可以对应多少特征值?1个。

一个特征值可以对应多少特征向量?多个。

为了使特征向量唯一,我们要对特征向量做标准化。

有了特征向量和特征值以后,我们便可以对原始矩阵A进行矩阵分解了。

思考: 我们想将方阵An×n分解成:A=WΣW-1 。

W是特征向量形成的矩阵,Σ是系数,就类似特征值λ;

标准化操作,令 |W|=1 即 WiTWi

∴ WTW=1 → WT = W-1→ A=WΣW-1

但上述的前提是矩阵A是一个方阵。如果A不是方阵,那么矩阵分解就必须用到SVD的方法。

SVD的特性

对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。

6a5fd64151e1?from=timeline

由于可以使用小矩阵来近似的描述样本信息的这个重要特性,SVD可以常用于PCA降维、推荐系统以及主题模型等场景中。

四、LSA模型

潜在语义分析(Latent Semantic Analysis, LSA),也叫做Latent Semantic Indexing, LSI. 是一种常用的简单的主题模型。LSA是基于奇异值分解(SVD)的方法得到文本主题的一种方式。

6a5fd64151e1?from=timeline

分析为什么用近似值: 我们在做奇异值分解的时候,我们可以得到一个矩阵相乘的分解结果。我们认为可以用前K个特征构成一个近似的分解结果。我们来分析一下,如果分解的结果是这样的形式:Um×m∑m×nVTn×n;分解出来的矩阵大小和我的文章个数 |μ文| 或词的个数 |μ词| 挂钩。如果文章里的词特别多,那么我分解出来的结果,即提取出来的主题个数,不是m就是n,就没有了分解的意义。

所以我们要通过一个近似的方法,k代表的是我们主题的个数。|μ主题|

总结: 我们输入的有m个文本,每个文本有n个词。而Aij则对应第i个文本的第j个词的特征值。k是我们假设的主题数,一般要比文本数少。

SVD分解后:

Uil 对应第i个文本和第l个主题的相关度。

Vjm 对应第j个词和第m个词义的相关度。

Σlm 对应第l个主题和第m个词义的相关度

值得注意的是:Vjm词义相关度也是一个隐含变量。

思考: 我们通过奇异值分解出来的是3个矩阵。Am×n = Um×k∑k×kVTn×k; 那么三个矩阵需要由几个不同的变量?

1、一个矩阵分解成两个个矩阵的时候,有文章、词语、主题三个变量。我认为多出来的一维变量是主题。

6a5fd64151e1?from=timeline

2→3

2、那么现在两个个矩阵矩阵分解到三个矩阵的时候,有文章、词语、主题、词义 四个变量。多出来的一维变量是词义 。

6a5fd64151e1?from=timeline

Uil 对应第i个文本和第l个主题的相关度。

Vjm 对应第j个词和第m个词义的相关度。

Σlm 对应第l个主题和第m个词义的相关度

下面通过一个例子来进一步解释这个问题。

LSA案例

假设有10个词、3个文本对应的词频TF矩阵如下:

6a5fd64151e1?from=timeline

我们该如何去做矩阵分解?

假定主题数为2,通过SVD降维后的三个矩阵分布为:

6a5fd64151e1?from=timeline

通过SVD矩阵分解我们可以得到文本、词与主题、语义之间的相关性,但是这个时候计算出来的内容存在负数,我们比较难解释,所以我们可以对LSI得到文本主题矩阵使用余弦相似度计算文本的相似度的计算。最终我们得到第一个和第三个文档比较相似,和第二个文档不太相似。(备注:这个时候直接在文本主题矩阵的基础上直接应用聚类算法即可)

6a5fd64151e1?from=timeline

LSA主题模型总结

除非数据规模比较小,而且希望快速的粗粒度的找出一些主题分布关系,否则我们一般不会使用LSA主题模型。

优点:

原理简单,一次SVD分解即可得到主题模型,可以同时解决词义的问题。

缺点:

1、SVD分解的计算非常耗时,对于高维度矩阵做SVD分解非常困难;

2、主题模型数量的选取对于结果的影响非常大,很难选择合适的k值;

3、LSA模型不是概率模型,缺乏统计基础,结果难以直观的解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值