TextRank 自動文摘

  前不久作了有關自動文摘的學習,採用方法是TextRank算法,整理和你們分享。git

一. 關於自動文摘github

  利用計算機將大量的文本進行處理,產生簡潔、精煉內容的過程就是文本摘要,人們可經過閱讀摘要來把握文本主要內容,這不只大大節省時間,更提升閱讀效率。但人工摘要耗時又耗力,已不能知足日益增加的信息需求,所以藉助計算機進行文本處理的自動文摘應運而生。近年來,自動文摘、信息檢索、信息過濾、機器識別、等研究已成爲了人們關注的熱點。web

  自動文摘(Automatic Summarization)的方法主要有兩種:Extraction和Abstraction。其中Extraction是抽取式自動文摘方法,經過提取文檔中已存在的關鍵詞,句子造成摘要;Abstraction是生成式自動文摘方法,經過創建抽象的語意表示,使用天然語言生成技術,造成摘要。因爲生成式自動摘要方法須要複雜的天然語言理解和生成技術支持,應用領域受限。因此本人學習的也是抽取式的自動文摘方法。算法

  目前主要方法有:學習

  • 基於統計:統計詞頻,位置等信息,計算句子權值,再簡選取權值高的句子做爲文摘,特色:簡單易用,但對詞句的使用大多僅停留在表面信息。
  • 基於圖模型:構建拓撲結構圖,對詞句進行排序。例如,TextRank/LexRank
  • 基於潛在語義:使用主題模型,挖掘詞句隱藏信息。例如,採用LDA,HMM
  • 基於整數規劃:將文摘問題轉爲整數線性規劃,求全局最優解。(~.~我也不懂)

二. TextRank算法ui

  TextRank 算法是一種用於文本的基於圖的排序算法。其基本思想來源於谷歌的 PageRank算法, 經過把文本分割成若干組成單元(單詞、句子)並創建圖模型, 利用投票機制對文本中的重要成分進行排序, 僅利用單篇文檔自己的信息便可實現關鍵詞提取、文摘。和 LDA、HMM 等模型不一樣, TextRank不須要事先對多篇文檔進行學習訓練, 因其簡潔有效而獲得普遍應用。spa

  TextRank 通常模型能夠表示爲一個有向有權圖 G =(V, E), 由點集合 V和邊集合 E 組成, E 是V ×V的子集。圖中任兩點 Vi , Vj 之間邊的權重爲 wji , 對於一個給定的點 Vi, In(Vi) 爲 指 向 該 點 的 點 集 合 , Out(Vi) 爲點 V指向的點集合。點 Vi 的得分定義以下:code

  其中, d 爲阻尼係數, 取值範圍爲 0 到 1, 表明從圖中某一特定點指向其餘任意點的機率, 通常取值爲 0.85。使用TextRank 算法計算圖中各點的得分時, 須要給圖中的點指定任意的初值, 並遞歸計算直到收斂, 即圖中任意一點的偏差率小於給定的極限值時就能夠達到收斂, 通常該極限值取 0.0001。blog

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,代碼風格比較坑爹,註釋也沒寫好,將就看看,請見諒。

  因爲知識不夠完備,如有出錯的地方,歡迎指導,謝謝!

參考資料

  1.  Automatic Summarization , TextRank  , PageRank

  2.  someus github:TextRank4ZH

  3.  David Adamo: TextRank

  4.  結巴分詞

相關文章
相關標籤/搜索