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


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

简介

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

1、句子向量化

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

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

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

a j i = L ( t j i ) G ( t j i ) 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. 使用词频 t f ( i ) tf(i) ,即词 i i 在句子出现的次数
  2. 只要词 i i 在句子出现, L ( i ) = 1 L(i)=1 ,反之, L ( i ) = 0 L(i)=0
  3. 按照 L ( i ) = 0.5 + 0.5 ( ˙ t f ( i ) = t f ( m a x ) ) L(i) = 0.5 + 0.5 \dot (tf (i)=tf (max)) ,就是先用出现次数最多的那个词做一个归一化
  4. 还可以通过 L ( i ) = l o g ( 1 + t f ( i ) ) L(i)=log(1+tf(i)) 来进行计算

1.1.2 全局权重

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

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

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

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

A = U Σ V T \mathbf{A}=\mathbf{U} \Sigma \mathbf{V}^{T}
其中 U = [ u i j ] \mathbf{U}=[u_{ij}] 是一个 m × n m \times n 的列正交矩阵,每一列称为左奇异向量(即特征向量 U U \mathbf{U}\mathbf{U}^{*} Σ = diag ( σ 1 , σ 2 , , σ n ) \Sigma=\operatorname{diag}\left(\sigma_{1}, \sigma_{2}, \ldots, \sigma_{n}\right) 是一个 n × n n \times n 的对角矩阵,对角线上每一个值都是非负的奇异值,按降序排列。 V = [ v i j ] \mathbf{V}=[v_{ij}] 是一个 n × n n \times n 的对角矩阵,每一列是右奇异向量(即特征向量 V V \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
从上面式子可以看出,我们只需要一个 r r r*r 的对角矩阵,就可以覆盖大多数(90%)的原来的信息,这就是一个降维的过程。即
A m × n = U m × m Σ m × n V n × n T U m × r Σ r × r V r × n T 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过程。从矩阵变换的角度看,这是一个降维的过程,从 m m 维到 r r 维,前者是加权词频向量,后者是线性无关向量。我们回顾下 A \mathbf{A} 的每一列表示的是句子i的加权词频向量,每一行表示的是词j在每个文档中出现次数。这个映射将矩阵 A \mathbf{A} 中的每一列 i i 映射到 矩阵 V T \mathbf{V}^{T} 的列向量 ψ i = [ v i 1 v i 2 v i r ] 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 = [ u j 1 u j 2 u j r ] \varphi_{j}=\left[\begin{array}{llll}u_{j 1} & u_{j 2} & \cdots & u_{j r}\end{array}\right]

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

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

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

3、摘要生成过程

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

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

4、个人理解


我们就来消化一下:

  1. σ i \sigma_{i} 是什么?作为对角矩阵 Σ \Sigma 的元素, σ i \sigma_{i} 是由大到小排序的,表示的是concept对message的重要程度。也就是说,当SVD结束的时候,这个重要程度排序已经是一个事实了。
  2. 为什么要从 k = 1 k=1 开始选呢?其实这个 k k 对应的是 Σ \Sigma 对角矩阵的某一个 σ i \sigma_{i} , k r k \leq r .我们要从最重要的开始,所以从1开始。
  3. Σ V T \Sigma V^{T} 是什么意思?我们知道 Σ \Sigma 是一个对角矩阵, V T V^{T} 的每一列是句子向量,那么这个矩阵相乘的结果,就是每一个句子的第一个元素的重要程度。就是说, k = 1 k=1 时,就是用 σ 1 \sigma_{1} n n 个句子的第一个元素值相乘,即 σ 1 \sigma_{1} 去乘 [ v 11 v 21 v 31 v n 1 ] \left[\begin{array}{llll}v_{11} &v_{21}& v_{31} \cdots & v_{n1}\end{array}\right] ,如果 σ 1 × v 31 \sigma_{1} \times v_{31} 最大,那么我们就选第三个句子,放入最终的摘要结果中。
发布了120 篇原创文章 · 获赞 35 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u012328476/article/details/105314828