自然语言处理 - LSA

LSA利用奇异值分解进行降维,通过矩阵低秩近似减少元素数量。步骤包括构建词汇-文档矩阵,进行奇异值分解和降维,形成潜在语义空间。实际应用中,通过gensim和Scipy实现矩阵处理,LSA能实现文章和单词聚类,降低噪声,但存在不适合所有场景、一词多义处理问题和计算复杂度高等缺点。
摘要由CSDN通过智能技术生成

LSA (Latent Semantic Analysis)潜在语义分析,是利用线性代数奇异值分解的方法来达到降维的目的。
有关奇异值分解,可以去参考线性代数的书籍。
使用奇异值如何达到降维?正常的情况下,奇异值的分解并不能降低向量空间的复杂度。比如语料库是1000个单词,200篇文档的情况下,矩阵M的维度是1000x200,该矩阵有20万个元素。通过奇异值分解,可以得到三个矩阵,分别是1000x1000,200,200x200,一共有1,200,200个元素。可以发现经过奇异值分解后的维度增加了,而不是减少了。
在这里插入图片描述
可以使用矩阵低秩近似的方法降低维度。首先将矩阵S中的n-k个最小的奇异值设为0,得到矩阵Sk(k要远远小于n)。再将矩阵U降维为Uk=m*k,矩阵V降维为Vk=k*n,令Mk=Uk*Sk*Vk,这样得到的矩阵就是矩阵M的低秩近似矩阵,并且低秩近似矩阵的维度远远低于M。
在这里插入图片描述
潜在语义分析(LSA)的原理以及实现方法如下:
(1)分析文档,建立词汇-文档矩阵
(2)对词汇-文档矩阵进行奇异值分解
(3)对奇异值分解后的矩阵进行降维
(4)使用降维后的矩阵构建潜在语义空间

下面通过一个具体的实例演示如何实现LSA。我们从网络是选取一些关于深度学习、神经网络以及语音识别的论文题目:

序号 文字名称
1 Recurrent neural network based language model
2 Statistical Language Model Based on Neural Network
3 On the Importance of Initialization and Momentum in Deep Learning
4 A guide to recurrent neural network and backpropagation
5 Making Deep Belief Network Effective for Large Vocabulary Continuous Speech Recognition
6 Application Of Pretrained Deep Neural Network To Large Vocabulary Speech Recognition
7 Deep Neural Network for Acoustic Modeling in Speech Recognition
8 Flexible, High Performance Convolutional Neural Network for Image Classification
9 Best Practices for Convolutional Neural Network Applied to Visual Document Analysis
10 Deep Learning For Signal And Information Processing

实现步骤如下:
(1)建立待分析的论文题目数组documents
(2)去掉一些不需要分析的词,比如:'for a of from on with in the and to’等
(3)构建字典对象,遍历所有的分词,统计每个分词出现的频率
(4)使用gensim的corpora生成字典。该字典包含有语料库里面出现频度大于1的词:

0 based
1 language
2 model
3 network
4 neural
5 recurrent
6 deep
7 learning
8 large
9 recognition
10 speech
11 vocabulary
12 convolutional

(5)使用gensim的词袋功能doc2word生成词频统计矩阵,矩阵如下:

[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)],
 [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1)],
 [(6, 1), (7, 1)],
 [(3, 1), (4, 1), (5, 1)],
 [(3, 1), (6, 1), (8, 1), (9, 1), (10, 1), (11, 1)],
 [(3, 1), (4, 1), (6, 1), (8, 1), (9, 1), (10, 1), (11, 1)],
 [(3, 1), (4, 1), (6, 1), (9, 1), (10, 1)],
 [(3, 1), (4, 1), (12, 1)],
 [(3, 1), (4, 1), (12, 1)],
 [(6, 1), (7, 1)]]

此矩阵由(词索引,频次)的二元数组组成。比如(0,1)表示索引为0的词(based)在第一个文章标题中出现了一次。(Recurrent neural network based language model)
(6)上面步骤生成的矩阵是无法直接给Numpy和Scipy使用的,需要使用共现矩阵。在共现矩阵中每一行代表一个词,而每一列是表示不同的上下文。矩阵中的元素表示相关词在上下文中出现的次数。

[[1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [1., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [1., 1., 0.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值