前不久做了有關自動文摘的學習,采用方法是TextRank算法,整理和大家分享。
一. 關於自動文摘
利用計算機將大量的文本進行處理,產生簡潔、精煉內容的過程就是文本摘要,人們可通過閱讀摘要來把握文本主要內容,這不僅大大節省時間,更提高閱讀效率。但人工摘要耗時又耗力,已不能滿足日益增長的信息需求,因此借助計算機進行文本處理的自動文摘應運而生。近年來,自動文摘、信息檢索、信息過濾、機器識別、等研究已成為了人們關注的熱點。
自動文摘(Automatic Summarization)的方法主要有兩種:Extraction和Abstraction。其中Extraction是抽取式自動文摘方法,通過提取文檔中已存在的關鍵詞,句子形成摘要;Abstraction是生成式自動文摘方法,通過建立抽象的語意表示,使用自然語言生成技術,形成摘要。由於生成式自動摘要方法需要復雜的自然語言理解和生成技術支持,應用領域受限。所以本人學習的也是抽取式的自動文摘方法。
目前主要方法有:
- 基於統計:統計詞頻,位置等信息,計算句子權值,再簡選取權值高的句子作為文摘,特點:簡單易用,但對詞句的使用大多僅停留在表面信息。
- 基於圖模型:構建拓撲結構圖,對詞句進行排序。例如,TextRank/LexRank
- 基於潛在語義:使用主題模型,挖掘詞句隱藏信息。例如,采用LDA,HMM
- 基於整數規划:將文摘問題轉為整數線性規划,求全局最優解。(~.~我也不懂)
二. TextRank算法
TextRank 算法是一種用於文本的基於圖的排序算法。其基本思想來源於谷歌的 PageRank算法, 通過把文本分割成若干組成單元(單詞、句子)並建立圖模型, 利用投票機制對文本中的重要成分進行排序, 僅利用單篇文檔本身的信息即可實現關鍵詞提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先對多篇文檔進行學習訓練, 因其簡潔有效而得到廣泛應用。
TextRank 一般模型可以表示為一個有向有權圖 G =(V, E), 由點集合 V和邊集合 E 組成, E 是V ×V的子集。圖中任兩點 Vi , Vj 之間邊的權重為 wji , 對於一個給定的點 Vi, In(Vi) 為 指 向 該 點 的 點 集 合 , Out(Vi) 為點 Vi 指向的點集合。點 Vi 的得分定義如下:
其中, d 為阻尼系數, 取值范圍為 0 到 1, 代表從圖中某一特定點指向其他任意點的概率, 一般取值為 0.85。使用TextRank 算法計算圖中各點的得分時, 需要給圖中的點指定任意的初值, 並遞歸計算直到收斂, 即圖中任意一點的誤差率小於給定的極限值時就可以達到收斂, 一般該極限值取 0.0001。
1. 基於TextRank的關鍵詞提取
關鍵詞抽取的任務就是從一段給定的文本中自動抽取出若干有意義的詞語或詞組。TextRank算法是利用局部詞匯之間關系(共現窗口)對后續關鍵詞進行排序,直接從文本本身抽取。其主要步驟如下:
(1)把給定的文本T按照完整句子進行分割,即
(2)對於每個句子,進行分詞和詞性標注處理,並過濾掉停用詞,只保留指定詞性的單詞,如名詞、動詞、形容詞,即
,其中
是保留后的候選關鍵詞。
(3)構建候選關鍵詞圖G = (V,E),其中V為節點集,由(2)生成的候選關鍵詞組成,然后采用共現關系(co-occurrence)構造任兩點之間的邊,兩個節點之間存在邊僅當它們對應的詞匯在長度為K的窗口中共現,K表示窗口大小,即最多共現K個單詞。
(4)根據上面公式,迭代傳播各節點的權重,直至收斂。
(5)對節點權重進行倒序排序,從而得到最重要的T個單詞,作為候選關鍵詞。
(6)由(5)得到最重要的T個單詞,在原始文本中進行標記,若形成相鄰詞組,則組合成多詞關鍵詞。例如,文本中有句子“Matlab code for plotting ambiguity function”,如果“Matlab”和“code”均屬於候選關鍵詞,則組合成“Matlab code”加入關鍵詞序列。
2. 基於TextRank的自動文摘
基於TextRank的自動文摘屬於自動摘錄,通過選取文本中重要度較高的句子形成文摘,其主要步驟如下:
(1)預處理:將輸入的文本或文本集的內容分割成句子得,構建圖G =(V,E),其中V為句子集,對句子進行分詞、去除停止詞,得
,其中
是保留后的候選關鍵詞。
(2)句子相似度計算:構建圖G中的邊集E,基於句子間的內容覆蓋率,給定兩個句子,采用如下公式進行計算:
若兩個句子之間的相似度大於給定的閾值,就認為這兩個句子語義相關並將它們連接起來,即邊的權值;
(3)句子權重計算:根據公式,迭代傳播權重計算各句子的得分;
(4)抽取文摘句:將(3)得到的句子得分進行倒序排序,抽取重要度最高的T個句子作為候選文摘句。
(5)形成文摘:根據字數或句子數要求,從候選文摘句中抽取句子組成文摘。
三. 其它
分析研究可知,相似度的計算方法好壞,決定了關鍵詞和句子的重要度排序,如果在相似度計算問題上有更好的解決方案,那么結果也會更加有效。其它計算相似度的方法有:基於編輯距離,基於語義詞典,余弦相似度等。這里不一一描述。
本人實現了一個簡單的文摘系統,代碼可參考ASExtractor,代碼風格比較坑爹,注釋也沒寫好,將就看看,請見諒。
來源於:https://www.cnblogs.com/chenbjin/p/4600538.html