論文閱讀-基於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} 最大,那麼我們就選第三個句子,放入最終的摘要結果中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章