论文阅读-基于LSA的摘要生成


原文《Generic Text Summarization Using Relevance Measure and
Latent Semantic Analysis》介绍了两种摘要生成的方法,但是我主要阅读了第二部分,即利用LSA的方法。

简介

LSA的工作原理是将数据投影到较低维空间而不会有任何重要信息丢失。解释该空间分解操作的一种方式是奇异向量可以捕获并表示在语料库中重复出现的单词组合模式。奇异值的大小表示模式在文档中的重要性。

1、句子向量化

那怎么把文档中的句子变成向量呢?原文

TiT_{i}是passageii的词频向量,向量中每一个值tjit_{ji}表示的是词jj在passageii出现的频率。这里passageii可以是一个短语,也可以是句子,还可以是段落,甚至是整篇文档。(有i个passage,j个词)

那么,passageii的加权词频向量Ai=[a1ia2iani]TA_{i}=\left[\begin{array}{llll}a_{1i}&a_{2i}& \ldots & a_{ni}\end{array}\right]^T,向量每一个值为:

aji=L(tji)G(tji) a_{j i}=L\left(t_{j i}\right) \cdot G\left(t_{j i}\right)

1.1 权重选择

权重的选择也是有很多方法的。

1.1.1 局部权重

先说L(i)L(i)的选择方式:

  1. 使用词频tf(i)tf(i),即词ii在句子出现的次数
  2. 只要词ii在句子出现,L(i)=1L(i)=1,反之,L(i)=0L(i)=0
  3. 按照L(i)=0.5+0.5(˙tf(i)=tf(max))L(i) = 0.5 + 0.5 \dot (tf (i)=tf (max)),就是先用出现次数最多的那个词做一个归一化
  4. 还可以通过L(i)=log(1+tf(i))L(i)=log(1+tf(i))来进行计算

1.1.2 全局权重

对于G(i)G(i)也有很多种选择方式:

  1. 可以让全局的权重一样,即G(i)=1G(i)=1
  2. 逆文档频率,即G(i)=log(N/n(i))G(i) = log(N/n(i))NN是句子总数,n(i)n(i)是包含词i的句子数

下面是奇异值分解(SVD)过程:句子矩阵
A=[A1A2An]\mathbf{A}=\left[\begin{array}{llll}A_{1} & A_{2} & \ldots & A_{n}\end{array}\right]
每一列向量AiA_{i}表示的是句子ii在整个文档中的加权词频向量(weighted term-frequence vector),如果一共有mm个词和nn个句子,那么文档的A\mathbf{A}矩阵维度是 m×nm \times n.如果每一词在句子中出现的频率都很低,那么A\mathbf{A}就是一个稀疏矩阵。

一般来说,mnm \geq n,那么矩阵A\mathbf{A}的SVD定义为:

A=UΣVT \mathbf{A}=\mathbf{U} \Sigma \mathbf{V}^{T}
其中U=[uij]\mathbf{U}=[u_{ij}]是一个m×nm \times n的列正交矩阵,每一列称为左奇异向量(即特征向量UU\mathbf{U}\mathbf{U}^{*}Σ=diag(σ1,σ2,,σn)\Sigma=\operatorname{diag}\left(\sigma_{1}, \sigma_{2}, \ldots, \sigma_{n}\right)是一个n×nn \times n的对角矩阵,对角线上每一个值都是非负的奇异值,按降序排列。V=[vij]\mathbf{V}=[v_{ij}]是一个n×nn \times n的对角矩阵,每一列是右奇异向量(即特征向量VV\mathbf{V}^{*}\mathbf{V}

在线性代数中,一个矩阵A的列秩是A的线性独立的纵列的极大数目。记rank(A)=r\operatorname{rank}(\mathbf{A})=r,那么Σ\Sigma满足:

σ1σ2σr>σr+1==σn=0 \sigma_{1} \geq \sigma_{2} \cdots \geq \sigma_{r}>\sigma_{r+1}=\cdots=\sigma_{n}=0
从上面式子可以看出,我们只需要一个rrr*r的对角矩阵,就可以覆盖大多数(90%)的原来的信息,这就是一个降维的过程。即
Am×n=Um×mΣm×nVn×nTUm×rΣr×rVr×nT A_{m \times n}=U_{m \times m} \Sigma_{m \times n} V_{n \times n}^{T} \approx U_{m \times r} \Sigma_{r \times r} V_{r \times n}^{T}

2、SVD过程

可以从两方面来理解SVD过程。从矩阵变换的角度看,这是一个降维的过程,从mm维到rr维,前者是加权词频向量,后者是线性无关向量。我们回顾下A\mathbf{A}的每一列表示的是句子i的加权词频向量,每一行表示的是词j在每个文档中出现次数。这个映射将矩阵A\mathbf{A}中的每一列ii映射到 矩阵VT\mathbf{V}^{T}的列向量ψi=[vi1vi2vir]T\psi_{i}=\left[\begin{array}{llll}v_{i 1} & v_{i 2} & \cdots & v_{i r}\end{array}\right]^{T};将矩阵A\mathbf{A}中的每一行向量映射到矩阵U\mathbf{U}的一行φj=[uj1uj2ujr]\varphi_{j}=\left[\begin{array}{llll}u_{j 1} & u_{j 2} & \cdots & u_{j r}\end{array}\right]

从语义角度再来看这个过程,SVD从文档中学习出一种可以表示矩阵A\mathbf{A}的隐语义结构。SVD将原始文档拆成rr个相互独立的基本向量或者概念,每一个词或者句子都可以用一个索引表示,比如vixv_{ix}表示列向量ψi\psi{i}的第xx^{'}个值,ujyu_{jy}表述行向量φj\varphi_{j}的第yy^{'}个值。

相比于传统的信息检索技术,SVD更能捕捉、学习到词之间的关系,所以可以更好的从语义层面上去对词和句子进行聚类。举个例子,我们来看这样一组词医生、医师、医院、药、护士医生、医师是同义词,而医院、药、护士都是和他们相关的词语。那么,医生、医师这两个词出现的文本一定是相似的,而且很大概率也会出现医院、药、护士这些词。那么在SVD过程中,医生、医师这两个词的r维奇异值向量也会很相似。

可以得到假设(结论)的是每一个奇异向量表示的就是一个文档的关键主题(概念),向量中的每一个值,代表的则是这个主题(概念)在一个文档中的重要程度。

3、摘要生成过程

所以,基于SVD的文档摘要生成过程如下:

  1. 将文档 D 分为单句,组成句子集合,记为S,记k=1k=1
  2. 构建词-句子矩阵 A
  3. 对矩阵A进行SVD,得到奇异值矩阵Σ\Sigma,右奇异值矩阵,矩阵的列向量ψi=[vi1vi2vir]T\psi_{i}=\left[\begin{array}{llll}v_{i 1} & v_{i 2} & \cdots & v_{i r}\end{array}\right]^{T}就是句子ii的向量表示
  4. 选择VT\mathbf{V}^{T}的第kk个向量
  5. 从上面向量中选择值最大的索引对应的句子,把它放到摘要结果中。
  6. 如果kk已经达到预设值,那么终止,否则再跳回第四步重复执行。

4、个人理解


我们就来消化一下:

  1. σi\sigma_{i}是什么?作为对角矩阵Σ\Sigma的元素,σi\sigma_{i}是由大到小排序的,表示的是concept对message的重要程度。也就是说,当SVD结束的时候,这个重要程度排序已经是一个事实了。
  2. 为什么要从k=1k=1开始选呢?其实这个kk对应的是Σ\Sigma对角矩阵的某一个σi\sigma_{i}, krk \leq r.我们要从最重要的开始,所以从1开始。
  3. ΣVT\Sigma V^{T} 是什么意思?我们知道Σ\Sigma是一个对角矩阵,VTV^{T}的每一列是句子向量,那么这个矩阵相乘的结果,就是每一个句子的第一个元素的重要程度。就是说,k=1k=1时,就是用σ1\sigma_{1}nn个句子的第一个元素值相乘,即 σ1\sigma_{1}去乘[v11v21v31vn1]\left[\begin{array}{llll}v_{11} &v_{21}& v_{31} \cdots & v_{n1}\end{array}\right],如果 σ1×v31\sigma_{1} \times v_{31} 最大,那么我们就选第三个句子,放入最终的摘要结果中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章