原文《Generic Text Summarization Using Relevance Measure and
Latent Semantic Analysis》介绍了两种摘要生成的方法,但是我主要阅读了第二部分,即利用LSA的方法。
简介
LSA的工作原理是将数据投影到较低维空间而不会有任何重要信息丢失。解释该空间分解操作的一种方式是奇异向量可以捕获并表示在语料库中重复出现的单词组合模式。奇异值的大小表示模式在文档中的重要性。
1、句子向量化
那怎么把文档中的句子变成向量呢?原文
即
Ti是passage
i的词频向量,向量中每一个值
tji表示的是词
j在passage
i出现的频率。这里passage
i可以是一个短语,也可以是句子,还可以是段落,甚至是整篇文档。(有i个passage,j个词)
那么,passage
i的加权词频向量
Ai=[a1ia2i…ani]T,向量每一个值为:
aji=L(tji)⋅G(tji)
1.1 权重选择
权重的选择也是有很多方法的。
1.1.1 局部权重
先说
L(i)的选择方式:
- 使用词频
tf(i),即词
i在句子出现的次数
- 只要词
i在句子出现,
L(i)=1,反之,
L(i)=0
- 按照
L(i)=0.5+0.5(˙tf(i)=tf(max)),就是先用出现次数最多的那个词做一个归一化
- 还可以通过
L(i)=log(1+tf(i))来进行计算
1.1.2 全局权重
对于
G(i)也有很多种选择方式:
- 可以让全局的权重一样,即
G(i)=1
- 逆文档频率,即
G(i)=log(N/n(i)),
N是句子总数,
n(i)是包含词
i
的句子数
下面是奇异值分解(SVD)过程:句子矩阵
A=[A1A2…An]
每一列向量
Ai表示的是句子
i在整个文档中的加权词频向量(weighted term-frequence vector),如果一共有
m个词和
n个句子,那么文档的
A矩阵维度是
m×n.如果每一词在句子中出现的频率都很低,那么
A就是一个稀疏矩阵。
一般来说,
m≥n,那么矩阵
A的SVD定义为:
A=UΣVT
其中
U=[uij]是一个
m×n的列正交矩阵,每一列称为左奇异向量(即特征向量
UU∗;
Σ=diag(σ1,σ2,…,σn)是一个
n×n的对角矩阵,对角线上每一个值都是非负的奇异值,按降序排列。
V=[vij]是一个
n×n的对角矩阵,每一列是右奇异向量(即特征向量
V∗V)
在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。记
rank(A)=r,那么
Σ满足:
σ1≥σ2⋯≥σr>σr+1=⋯=σn=0
从上面式子可以看出,我们只需要一个
r∗r的对角矩阵,就可以覆盖大多数(90%)的原来的信息,这就是一个降维的过程。即
Am×n=Um×mΣm×nVn×nT≈Um×rΣr×rVr×nT
2、SVD过程
可以从两方面来理解SVD过程。从矩阵变换的角度看,这是一个降维的过程,从
m维到
r维,前者是加权词频向量,后者是线性无关向量。我们回顾下
A的每一列表示的是句子i
的加权词频向量,每一行表示的是词j
在每个文档中出现次数。这个映射将矩阵
A中的每一列
i映射到 矩阵
VT的列向量
ψi=[vi1vi2⋯vir]T;将矩阵
A中的每一行向量映射到矩阵
U的一行
φj=[uj1uj2⋯ujr]。
从语义角度再来看这个过程,SVD从文档中学习出一种可以表示矩阵
A的隐语义结构。SVD将原始文档拆成
r个相互独立的基本向量或者概念,每一个词或者句子都可以用一个索引表示,比如
vix表示列向量
ψi的第
x′个值,
ujy表述行向量
φj的第
y′个值。
相比于传统的信息检索技术,SVD更能捕捉、学习到词之间的关系,所以可以更好的从语义层面上去对词和句子进行聚类。举个例子,我们来看这样一组词医生、医师、医院、药、护士,医生、医师是同义词,而医院、药、护士都是和他们相关的词语。那么,医生、医师这两个词出现的文本一定是相似的,而且很大概率也会出现医院、药、护士这些词。那么在SVD过程中,医生、医师这两个词的r
维奇异值向量也会很相似。
可以得到假设(结论)的是每一个奇异向量表示的就是一个文档的关键主题(概念),向量中的每一个值,代表的则是这个主题(概念)在一个文档中的重要程度。
3、摘要生成过程
所以,基于SVD的文档摘要生成过程如下:
- 将文档 D 分为单句,组成句子集合,记为S,记
k=1
- 构建词-句子矩阵 A
- 对矩阵A进行SVD,得到奇异值矩阵
Σ,右奇异值矩阵,矩阵的列向量
ψi=[vi1vi2⋯vir]T就是句子
i的向量表示
- 选择
VT的第
k个向量
- 从上面向量中选择值最大的索引对应的句子,把它放到摘要结果中。
- 如果
k已经达到预设值,那么终止,否则再跳回第四步重复执行。
4、个人理解
我们就来消化一下:
-
σi是什么?作为对角矩阵
Σ的元素,
σi是由大到小排序的,表示的是concept对message的重要程度。也就是说,当SVD结束的时候,这个重要程度排序已经是一个事实了。
- 为什么要从
k=1开始选呢?其实这个
k对应的是
Σ对角矩阵的某一个
σi,
k≤r.我们要从最重要的开始,所以从1开始。
-
ΣVT 是什么意思?我们知道
Σ是一个对角矩阵,
VT的每一列是句子向量,那么这个矩阵相乘的结果,就是每一个句子的第一个元素的重要程度。就是说,
k=1时,就是用
σ1和
n个句子的第一个元素值相乘,即
σ1去乘
[v11v21v31⋯vn1],如果
σ1×v31 最大,那么我们就选第三个句子,放入最终的摘要结果中。