原文《Generic Text Summarization Using Relevance Measure and
Latent Semantic Analysis》介紹了兩種摘要生成的方法,但是我主要閱讀了第二部分,即利用LSA的方法。
簡介
LSA的工作原理是將數據投影到較低維空間而不會有任何重要信息丟失。解釋該空間分解操作的一種方式是奇異向量可以捕獲並表示在語料庫中重複出現的單詞組合模式。奇異值的大小表示模式在文檔中的重要性。
1、句子向量化
那怎麼把文檔中的句子變成向量呢?原文
即Ti是passagei的詞頻向量,向量中每一個值tji表示的是詞j在passagei出現的頻率。這裏passagei可以是一個短語,也可以是句子,還可以是段落,甚至是整篇文檔。(有i個passage,j個詞)
那麼,passagei的加權詞頻向量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 最大,那麼我們就選第三個句子,放入最終的摘要結果中。