使用Python自動提取內容摘要


https://www.biaodianfu.com/automatic-text-summarizer.html

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

自動摘要(Automatic Summarization)的方法主要有兩種:Extraction和Abstraction。其中Extraction是抽取式自動文摘方法,通過提取文檔中已存在的關鍵詞,句子形成摘要;Abstraction是生成式自動文摘方法,通過建立抽象的語意表示,使用自然語言生成技術,形成摘要。由於自動摘要方法需要復雜的自然語言理解和生成技術支持,應用領域受限。,抽取式摘要成為現階段主流,它也能在很大程度上滿足人們對摘要的需求。

目前抽取式的主要方法:

  • 基於統計:統計詞頻,位置等信息,計算句子權值,再簡選取權值高的句子作為文摘,特點:簡單易用,但對詞句的使用大多僅停留在表面信息。
  • 基於圖模型:構建拓撲結構圖,對詞句進行排序。例如,TextRank/LexRank
  • 基於潛在語義:使用主題模型,挖掘詞句隱藏信息。例如,采用LDA,HMM
  • 基於線路規划:將摘要問題轉為線路規划,求全局最優解。

2007年,美國學者的論文《A Survey on Automatic Text Summarization》(Dipanjan Das, Andre F.T. Martins, 2007)總結了目前的自動摘要算法。其中,很重要的一種就是詞頻統計。這種方法最早出自1958年的IBM公司科學家 H.P. Luhn的論文《The Automatic Creation of Literature Abstracts》

Luhn博士認為,文章的信息都包含在句子中,有些句子包含的信息多,有些句子包含的信息少。”自動摘要”就是要找出那些包含信息最多的句子。句子的信息量用”關鍵詞”來衡量。如果包含的關鍵詞越多,就說明這個句子越重要。Luhn提出用”簇”(cluster)表示關鍵詞的聚集。所謂”簇”就是包含多個關鍵詞的句子片段。

cluster

上圖就是Luhn原始論文的插圖,被框起來的部分就是一個”簇”。只要關鍵詞之間的距離小於”門檻值”,它們就被認為處於同一個簇之中。Luhn建議的門檻值是4或5。也就是說,如果兩個關鍵詞之間有5個以上的其他詞,就可以把這兩個關鍵詞分在兩個簇。下一步,對於每個簇,都計算它的重要性分值。

cluster-2

以上圖為例,其中的簇一共有7個詞,其中4個是關鍵詞。因此,它的重要性分值等於 ( 4 x 4 ) / 7 = 2.3。

然后,找出包含分值最高的簇的句子(比如5句),把它們合在一起,就構成了這篇文章的自動摘要。具體實現可以參見 《Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites》(O’Reilly, 2011)一書的第8章,python代碼見github

Luhn的這種算法后來被簡化,不再區分”簇”,只考慮句子包含的關鍵詞。下面就是一個例子(采用偽碼表示),只考慮關鍵詞首先出現的句子。

類似的算法已經被寫成了工具,比如基於Java的Classifier4J庫的SimpleSummariser模塊、基於C語言的OTS庫、以及基於classifier4J的C#實現python實現

參考文章:

TextTeaser

TextTeaser 原本是為在線長文章(所謂 tl;dr:too long; didn’t read)自動生成摘要的服務,其原本的收費標准是每摘要 1000 篇文章付費 12 美元或每月 250 美元。巴爾賓稱 TextTeaser 可以為任何使用羅馬字母的文本進行摘要,而且比同類工具如 Cruxbot 和 Summly(在 2013 年 3 月被 雅虎斥資 3000 萬美元收購)更准確。其創造者霍洛•巴爾賓(Jolo Balbin)表示,在“發現一些擴展問題,特別是 API 中的問題后”,他決定將 TextTeaser 代碼開源。

TextTeaser開源的代碼一共有三個class,TextTeaser,Parser,Summarizer。

  • TextTeaser,程序入口類。給定待摘要的文本和文本題目,輸出文本摘要,默認是原文中最重要的5句話。
  • Summarizer,生成摘要類。計算出每句話的分數,並按照得分做排序,然后按照原文中句子的順序依次輸出得分最高的5句話作為摘要。
  • Parser,文本解析類。對文本進行去除停用詞、去除標點符號、分詞、統計詞頻等一些預處理操作。

其中打分模型分為四部分:

  • 句子長度,長度為20的句子為最理想的長度,依照距離這個長度來打分。
  • 句子位置,根據句子在全文中的位置,給出分數。(巴爾賓認為一篇文章的第二句比第一句更重要,因為很多作家都習慣到第二句話引入關鍵點)備注:用段落效果會怎樣?
  • 文章標題與文章內容的關系,句子是否包含標題詞,根據句子中包含標題詞的多少來打分。
  • 句子關鍵詞打分,文本進行預處理之后,按照詞頻統計出排名前10的關鍵詞,通過比較句子中包含關鍵詞的情況,以及關鍵詞分布的情況來打分(sbs,dbs兩個函數)。

開源版本:

自己嘗試這個調用Python版本。主要:不要使用pip install textteaser進行安裝,該安裝方式安裝的是這個項目:

https://github.com/jgoettsch/py-textteaser,該項目並非算法實現,而是API實現。直接下載代碼即可:https://github.com/DataTeaser/textteaser

下載完成后在Windows下運營test.py會報錯,報錯信息如下:

針對報錯信息,做如下修改:

1、將”D:\textteaser\textteaser\parser.py”第62行進行修改:

2、找到”\Lib\site-packages\nltk\data.py”第924行,將

修改為:

注意:TextTeaser目前只支持英文摘要。

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 的得分定義如下:

TextRank

其中, d 為阻尼系數, 取值范圍為 0 到 1, 代表從圖中某一特定點指向其他任意點的概率, 一般取值為 0.85。使用TextRank 算法計算圖中各點的得分時, 需要給圖中的點指定任意的初值, 並遞歸計算直到收斂, 即圖中任意一點的誤差率小於給定的極限值時就可以達到收斂, 一般該極限值取 0.0001。

基於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”加入關鍵詞序列。

基於TextRank的自動文摘

基於TextRank的自動文摘屬於自動摘錄,通過選取文本中重要度較高的句子形成文摘,其主要步驟如下:

  1. 預處理:將輸入的文本或文本集的內容分割成句子得,構建圖G =(V,E),其中V為句子集,對句子進行分詞、去除停止詞,得,其中是保留后的候選關鍵詞。
  2. 句子相似度計算:構建圖G中的邊集E,基於句子間的內容覆蓋率,給定兩個句子,采用如下公式進行計算:simikarity-1若兩個句子之間的相似度大於給定的閾值,就認為這兩個句子語義相關並將它們連接起來,即邊的權值:similarity-2
  3. 句子權重計算:根據公式,迭代傳播權重計算各句子的得分;
  4. 抽取文摘句:將3得到的句子得分進行倒序排序,抽取重要度最高的T個句子作為候選文摘句。
  5. 形成文摘:根據字數或句子數要求,從候選文摘句中抽取句子組成文摘。

參考資料:

玻森自動摘要

玻森采用的是最大邊緣相關模型(Maximal Marginal Relevance)的一個變種。MMR是無監督學習模型,它的提出是為了提高信息檢索(Information Retrieval)系統的表現。例如搜索引擎就是目前大家最常用的信息檢索系統。大家可能經常會碰到,對於我們輸入的一個關鍵詞,搜索引擎通常會給出重復的或者內容太接近的檢索的情況。為了避免這個現象,搜索引擎可以通過MMR來增加內容的多樣性,給出多方面考慮的檢索結果,以此來提高表現。這樣的思想是可以被借鑒用來做摘要的,因為它是符合摘要的基本要求的,即權衡相關性和多樣性。不難理解,摘要結果與原文的相關性越高,它就接近全文中心意思。而考慮多樣性則使得摘要內容更加的全面。非常的直觀和簡單是該模型的一個優點。

相比於其他無監督學習方法,如TextRank(TR), PageRank(PR)等,MMR是考慮了信息的多樣性來避免重復結果。TR,PR是基於圖(Graph)的學習方法,每個句子看成點,每兩個點之間都有一條帶權重(Weighted)的無向邊。邊的權重隱式定義了不同句子間的游走概率。這些方法把做摘要的問題看成隨機游走來找出穩態分布(Stable Distribution)下的高概率(重要)的句子集,但缺點之一便是無法避免選出來的句子相互之間的相似度極高的現象。而MMR方法可以較好地解決句子選擇多樣性的問題。具體地說,在MMR模型中,同時將相關性和多樣性進行衡量。因此,可以方便的調節相關性和多樣性的權重來滿足偏向“需要相似的內容”或者偏向“需要不同方面的內容”的要求。對於相關性和多樣性的具體評估,玻森是通過定義句子之間的語義相似度實現。句子相似度越高,則相關性越高而多樣性越低。

自動摘要的核心便是要從原文句子中選一個句子集合,使得該集合在相關性與多樣性的評測標准下,得分最高。數學表達式如下:

mmr

需要注意的是,D,Q,R,S都為句子集,其中,D表示當前文章,Q表示當前中心意思,R表示當前非摘要,S表示當前摘要。可以看出,在給定句子相似度的情況下,上述MMR的求解為一個標准的最優化問題。但是,上述無監督學習的MMR所得摘要准確性較低,因為全文的結構信息難以被建模,如段落首句應當有更高的權重等。為了提高新聞自動摘要的表現,玻森在模型中加入了全文結構特征,將MMR改為有監督學習方法。從而模型便可以通過訓練從“標准摘要”中學習特征以提高准確性。

玻森采用摘要公認的Bi-gram ROUGE F1方法來判斷自動生成的摘要和“標准摘要”的接近程度。經過訓練,玻森在訓練數集上的表現相對於未學習的摘要結果有了明顯的提升——訓練后的摘要系統F1提高了30%。值得一提的是,在特征訓練中,為了改善摘要結果的可讀性,玻森加指代關系特征,使得模型表現提高了8%。

相關鏈接:

其他相關開源項目


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM