LSA算法介绍

本帖最后由 oraclesmith 于 2014-8-13 15:32 编辑

SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题,一个分为3个部分,第一部分讨论线性代数中的一些基础知识,第二部分讨论SVD矩阵分解,第三部分讨论低阶近似。本节讨论的矩阵都是实数矩阵。

基础知识

1. 矩阵的秩:矩阵的秩是矩阵中线性无关的行或列的个数

2. 对角矩阵:对角矩阵是除对角线外所有元素都为零的方阵

3. 单位矩阵:如果对角矩阵中所有对角线上的元素都为零,该矩阵称为单位矩阵

4. 特征值:对一个M x M矩阵C和向量X,如果存在λ使得下式成立

则称λ为矩阵C的特征值,X称为矩阵的特征向量。非零特征值的个数小于等于矩阵的秩。

5. 特征值和矩阵的关系:考虑以下矩阵

该矩阵特征值λ1 = 30,λ2 = 20,λ3 = 1。对应的特征向量

假设VT=(2,4,6) 计算S x VT

有上面计算结果可以看出,矩阵与向量相乘的结果与特征值,特征向量有关。观察三个特征值λ1 = 30,λ2 = 20,λ3 = 1,λ3值最小,对计算结果的影响也最小,如果忽略λ3,那么运算结果就相当于从(60,80,6)转变为(60,80,0),这两个向量十分相近。这也表示了数值小的特征值对矩阵-向量相乘的结果贡献小,影响小。这也是后面谈到的低阶近似的数学基础。

矩阵分解

1. 方阵的分解

1) 设S是M x M方阵,则存在以下矩阵分解

其中U 的列为S的特征向量, 

为对角矩阵,其中对角线上的值为S的特征值,按从大到小排列:

2) 设S是M x M 方阵,并且是对称矩阵,有M个特征向量。则存在以下分解

其中Q的列为矩阵S的单位正交特征向量, 

仍表示对角矩阵,其中对角线上的值为S的特征值,按从大到小排列。最后,QT=Q-1,因为正交矩阵的逆等于其转置。

2. 奇异值分解

上面讨论了方阵的分解,但是在LSA中,我们是要对Term-Document矩阵进行分解,很显然这个矩阵不是方阵。这时需要奇异值分解对Term-Document进行分解。奇异值分解的推理使用到了上面所讲的方阵的分解。

假设C是M x N矩阵,U是M x M矩阵,其中U的列为CCT的正交特征向量,V为N x N矩阵,其中V的列为CTC的正交特征向量,再假设r为C矩阵的秩,则存在奇异值分解:

其中CCT和CTC的特征值相同,为 

Σ为M X N,其中 

 ,其余位置数值为0,  的值按大小降序排列。以下是Σ的完整数学定义:

σi称为矩阵C的奇异值。

用C乘以其转置矩阵CT得:

上式正是在上节中讨论过的对称矩阵的分解。

奇异值分解的图形表示:

从图中可以看到Σ虽然为M x N矩阵,但从第N+1行到M行全为零,因此可以表示成N x N矩阵,又由于右式为矩阵相乘,因此U可以表示为M x N矩阵,VT可以表示为N x N矩阵

3. 低阶近似

LSA潜在语义分析中,低阶近似是为了使用低维的矩阵来表示一个高维的矩阵,并使两者之差尽可能的小。本节主要讨论低阶近似和F-范数。

给定一个M x N矩阵C(其秩为r)和正整数k,我们希望找到一个M x N矩阵Ck,其秩不大于K。设X为C与Ck之间的差,X=C – Ck,X的F-范数为

当k远小于r时,称Ck为C的低阶近似,其中X也就是两矩阵之差的F范数要尽可能的小。

SVD可以被用与求低阶近似问题,步骤如下:

1. 给定一个矩阵C,对其奇异值分解: 

2. 构造 

,它是将  的第k+1行至M行设为零,也就是把  的最小的r-k个(the r-k smallest)奇异值设为零。

3. 计算Ck: 

回忆在基础知识一节里曾经讲过,特征值数值的大小对矩阵-向量相乘影响的大小成正比,而奇异值和特征值也是正比关系,因此这里选取数值最小的r-k个特征值设为零合乎情理,即我们所希望的C-Ck尽可能的小。完整的证明可以在Introduction to Information Retrieval[2]中找到。

我们现在也清楚了LSA的基本思路:LSA希望通过降低传统向量空间的维度来去除空间中的“噪音”,而降维可以通过SVD实现,因此首先对Term-Document矩阵进行SVD分解,然后降维并构造语义空间。


435 2014-08-13-.png (16.08 KB)

435 2014-08-13-.png

434 2014-08-13-.png (69.35 KB)

434 2014-08-13-.png

433 2014-08-13-.png (52.67 KB)

433 2014-08-13-.png
### LSA算法原理 潜在语义分析(Latent Semantic Analysis, LSA)是一种用于挖掘文本数据中隐藏模式的技术。其核心思想是从文档集合中提取出潜在的概念或主题,从而克服传统基于关键词匹配的方法所带来的局限性。LSA假设词语和概念之间并非一一对应的关系,而是通过一种复杂的映射关联在一起。 #### 文档-术语矩阵构建 LSA的第一步是创建一个文档-术语矩阵 \( X \),其中每一行代表一篇文档,每一列代表一个独特的词汇项。矩阵中的每个元素表示某个单词在某篇文档中的出现频率或其他权重形式(如TF-IDF)。这一过程可以通过以下方式完成: \[ X_{ij} = f(w_i, d_j) \] 这里 \( w_i \) 表示第i个词,\( d_j \) 表示第j篇文档,函数f可以根据具体需求定义为词频或者更高级的加权方案[^1]。 #### 奇异值分解(SVD) 一旦得到了文档-术语矩阵 \( X \),下一步就是对其进行奇异值分解(Singular Value Decomposition, SVD)。SVD将原始矩阵分解成三个部分: \[ X = U\Sigma V^T \] - \( U \): 左奇异向量构成的矩阵,反映的是文档空间内的主要方向。 - \( Σ \): 对角线上包含奇异值的矩阵,这些数值反映了各个维度的重要性程度。 - \( V^T \): 右奇异向量转置后的矩阵,体现的是词汇空间的主要趋势[^2]。 通过对上述三者的选择性保留,可以达到降低维度的目的,即只选取前k个最大奇异值及其对应的左、右奇异向量形成新的低秩近似矩阵。此操作不仅减少了存储开销还可能增强泛化能力[^3]。 #### 新坐标系的理解 从几何角度来看,SVD实际上完成了这样一个任务——把原本杂乱无章的数据点投射到一个新的正交基底上,在那里它们能够更好地分离并展示内在结构。正如参考资料里提到,“SVD的作用就相当于是一个坐标系变换的过程”,它使得原来可能存在冗余甚至噪声干扰的信息变得清晰有序[^4]。 ### Python 实现代码 下面给出一段简单的Python代码用来演示如何利用Scikit-Learn库执行LSA流程: ```python from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.decomposition import TruncatedSVD import numpy as np def perform_lsa(corpus, n_components=2): vectorizer = TfidfVectorizer(stop_words='english') dt_matrix = vectorizer.fit_transform(corpus) svd_model = TruncatedSVD(n_components=n_components, algorithm='randomized', n_iter=100, random_state=42) lsa_result = svd_model.fit_transform(dt_matrix) explained_variance_ratio = svd_model.explained_variance_ratio_ return lsa_result, explained_variance_ratio corpus = [ 'The sky is blue.', 'The sun is bright today.', 'The sun in the sky is very bright.' ] lsa_results, variance_ratios = perform_lsa(corpus, n_components=2) print("LSA Results:\n", lsa_results) print("Explained Variance Ratios:", variance_ratios) ``` 这段脚本首先使用`TfidfVectorizer`类生成TF-IDF加权的稀疏矩阵;接着调用`TruncatedSVD`对象来进行截断版的SVD运算以获取指定数量的新特征组合结果以及各成分解释总变异的比例情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值