使用TextRank算法為文本生成關鍵字和摘要

2021-02-20 數盟
【數盟倡導「數據創造價值」,致力於打造最卓越的數據科學交流平臺,為企業、個人提供最卓越的服務】

TextRank算法基於PageRank,用於為文本生成關鍵字和摘要。其論文是:

Mihalcea R, Tarau P. TextRank: Bringing order into texts[C]. Association for Computational Linguistics, 2004.

在淺入淺出:PageRank算法這篇博客中我做過簡要的介紹,這裡再補充一下。

PageRank最開始用來計算網頁的重要性。整個www可以看作一張有向圖圖,節點是網頁。如果網頁A存在到網頁B的連結,那麼有一條從網頁A指向網頁B的有向邊。

構造完圖後,使用下面的公式:

S(Vi)是網頁i的中重要性(PR值)。d是阻尼係數,一般設置為0.85。In(Vi)是存在指向網頁i的連結的網頁集合。Out(Vj)是網頁j中的連結存在的連結指向的網頁的集合。|Out(Vj)|是集合中元素的個數。

PageRank需要使用上面的公式多次迭代才能得到結果。初始時,可以設置每個網頁的重要性為1。上面公式等號左邊計算的結果是迭代後網頁i的PR值,等號右邊用到的PR值全是迭代前的。

舉個例子:

上圖表示了三張網頁之間的連結關係,直覺上網頁A最重要。可以得到下面的表:

橫欄代表其實的節點,縱欄代表結束的節點。若兩個節點間有連結關係,對應的值為1。

根據公式,需要將每一豎欄歸一化(每個元素/元素之和),歸一化的結果是:

上面的結果構成矩陣M。我們用matlab迭代100次看看最後每個網頁的重要性:

M = [0 1 1 0 0 0 0 0 0];PR = [1; 1 ; 1];for iter = 1:100 PR = 0.15 + 0.85*M*PR; disp(iter); disp(PR);end

運行結果(省略部分):

. 95 0.4050 0.1500 0.1500 96 0.4050 0.1500 0.1500 97 0.4050 0.1500 0.1500 98 0.4050 0.1500 0.1500 99 0.4050 0.1500 0.1500 100 0.4050 0.1500 0.1500

最終A的PR值為0.4050,B和C的PR值為0.1500。

如果把上面的有向邊看作無向的(其實就是雙向的),那麼:

M = [0 1 1 0.5 0 0 0.5 0 0];PR = [1; 1 ; 1];for iter = 1:100 PR = 0.15 + 0.85*M*PR; disp(iter); disp(PR);end

運行結果(省略部分):

98 1.4595 0.7703 0.7703 99 1.4595 0.7703 0.7703 100 1.4595 0.7703 0.7703

依然能判斷出A、B、C的重要性。

將原文本拆分為句子,在每個句子中過濾掉停用詞(可選),並只保留指定詞性的單詞(可選)。由此可以得到句子的集合和單詞的集合。

每個單詞作為pagerank中的一個節點。設定窗口大小為k,假設一個句子依次由下面的單詞組成:

w1,w2,w3,w4,w5,...,wn

[w1,w2,...,wk]、[w2,w3,...,wk+1]、[w3,w4,...,wk+2]等都是一個窗口。在一個窗口中的任兩個單詞對應的節點之間存在一個無向無權的邊。

基於上面構成圖,可以計算出每個單詞節點的重要性。最重要的若干單詞可以作為關鍵詞。

參照「使用TextRank提取關鍵詞」提取出若干關鍵詞。若原文本中存在若干個關鍵詞相鄰的情況,那麼這些關鍵詞可以構成一個關鍵短語。

例如,在一篇介紹「支持向量機」的文章中,可以找到三個關鍵詞支持、向量、機,通過關鍵短語提取,可以得到支持向量機。

使用TextRank提取摘要

將每個句子看成圖中的一個節點,若兩個句子之間有相似性,認為對應的兩個節點之間有一個無向有權邊,權值是相似度。

通過pagerank算法計算得到的重要性最高的若干句子可以當作摘要。

論文中使用下面的公式計算兩個句子Si和Sj的相似度:

分子是在兩個句子中都出現的單詞的數量。|Si|是句子i的單詞數。

由於是有權圖,PageRank公式略做修改:

因為要用測試多種情況,所以自己實現了一個基於Python 2.7的TextRank針對中文文本的庫TextRank4ZH。位於:

https://github.com/someus/TextRank4ZH

下面是一個例子:

import codecs from textrank4zh import TextRank4Keyword, TextRank4Sentencetext = codecs.open('./text/01.txt', 'r', 'utf-8').read() tr4w = TextRank4Keyword(stop_words_file='./stopword.data') tr4w.train(text=text, speech_tag_filter=True, lower=True, window=2) print '關鍵詞:' print '/'.join(tr4w.get_keywords(20, word_min_len=1)) print '關鍵短語:' print '/'.join(tr4w.get_keyphrases(keywords_num=20, min_occur_num= 2)) tr4s = TextRank4Sentence(stop_words_file='./stopword.data')tr4s.train(text=text, speech_tag_filter=True, lower=True, source = 'all_filters')print '摘要:' print '\n'.join(tr4s.get_key_sentences(num=3))

運行結果如下:

關鍵詞:媒體/高圓圓/微/賓客/趙又廷/答謝/謝娜/現身/記者/新人/北京/博/展示/捧場/禮物/張杰/當晚/戴/酒店/外套關鍵短語:微博摘要:中新網北京12月1日電(記者 張曦) 30日晚,高圓圓和趙又廷在京舉行答謝宴,諸多明星現身捧場,其中包括張杰(微博)、謝娜(微博)夫婦、何炅(微博)、蔡康永(微博)、徐克、張凱麗、黃軒(微博)等高圓圓身穿粉色外套,看到大批記者在場露出嬌羞神色,趙又廷則戴著鴨舌帽,十分淡定,兩人快步走進電梯,未接受媒體採訪記者了解到,出席高圓圓、趙又廷答謝宴的賓客近百人,其中不少都是女方的高中同學

另外, jieba分詞提供的基於TextRank的關鍵詞提取工具。 snownlp也實現了關鍵詞提取和摘要生成。

文章出處:http://www.letiantian.me/2014-12-01-text-rank/

—————————————————

數盟網站:www.dataunion.org

數盟微博:@數盟社區

數盟微信:DataScientistUnion

數盟【大數據群】272089418

數盟【數據可視化群】 179287077

數盟【數據分析群】 110875722

—————————————————

點擊閱讀原文,更多精彩技術、資訊內容~

相關焦點

  • 手把手 | 基於TextRank算法的文本摘要(附Python代碼)
    本文介紹了抽取型文本摘要算法TextRank,並使用Python實現TextRank算法在多篇單領域文本數據中抽取句子組成摘要的應用。文本摘要是自然語言處理(NLP)的應用之一,一定會對我們的生活產生巨大影響。隨著數字媒體的發展和出版業的不斷增長,誰還會有時間完整地瀏覽整篇文章、文檔、書籍來決定它們是否有用呢?值得高興的是,這項技術已經在這裡了。
  • NLP之使用TextRank和TFIDF進行關鍵字自動提取
    文檔關鍵字早期的信息檢索平臺並沒有如今這麼發達,大量的類似論壇、wiki的信息發布網站都依賴文檔的關鍵字進行文檔檢索。即使是在如今的網際網路世界,大量的信息檢索還要依賴關鍵字。依靠人工歸納文章的關鍵字雖然相對準確,但是面對信息爆炸的網際網路,這幾乎成為了不可能的任務。本章將介紹如何使用TextRank和TFIDF算法自動提取文檔的關鍵字。
  • 自動生成文本摘要
    XXX視頻流出」等,可是當我們點進去的時候,往往會發現,都是標題黨,文章和內容完全不符合!如果這時候有一種工具能先替我們閱讀新聞,再提煉出關鍵內容,那麼我們肯定不會再受到標題黨的影響,這對我們的生活無疑會有非常大的便利。而這需要的就是「文本摘要自動生成」技術!
  • 京東智能內容創作算法的演進與實踐:基於關鍵詞自動生成摘要
    來源 | 京東智聯雲開發者導讀:京東商城背後的 AI 技術能力揭秘: 基於關鍵詞自動生成摘要過去幾十年間,人類的計算能力獲得了巨大提升;隨著數據不斷積累,算法日益先進,我們已經步入了人工智慧時代。確實,人工智慧概念很難理解,技術更是了不起,背後的數據和算法非常龐大複雜。
  • 抽取式摘要:TextRank和BertSum
    文本摘要,按摘要輸出的類型,可以分為抽取式摘要(Extractive)和生成式摘要(Abstractive)。
  • 無監督文本自動摘要野生技術
    現階段有監督的文本自動摘要,存在非常成熟和強大的解決方法,奈何巧婦難為無米之炊,沒有人工的摘要標記,有監督的方法寸步難行。在缺少標記數據的情況下,無監督的方法更加實用。基本概念什麼是文本自動摘要?簡而言之,文本自動摘要就是從源文本中生成簡明流暢的總結,同時保留關鍵內容和主旨的一項任務。一般來說,文本自動摘要的來源可以是一個或多個文本,摘要後的字數是原文的一半左右。
  • 賽爾筆記 | 事實感知的生成式文本摘要
    總的來說,文本摘要分為抽取式(Extractive)和生成式(Abstractive)。前者直接從原文中挑選出重要的句子拼接成一段摘要;後者模擬人進行摘要的過程,首先對原文進行理解,然後從頭生成一段摘要,可能包含原文中未曾出現過的表達。
  • 基於Python 的自動文本提取:抽象法和生成法的比較
    我們還嘗試使用Tensorflow的文本摘要算法進行抽象技術(Abstractive),但由於其極高的硬體需求(7000 GPU小時,$ 30k雲信用額),因此無法獲得良好的結果。為什麼要文字摘要?隨著推送通知和文章摘要獲得越來越多的需求,為長文本生成智能和準確的摘要已經成為流行的研究和行業問題。文本摘要有兩種基本方法:提取法和抽象法。前者從原始文本中提取單詞和單詞短語來創建摘要。後者學習內部語言表示以生成更像人類的摘要,來解釋原始文本的意圖。
  • 文本生成13:4種融合知識的text generation(推薦收藏)
    具體來說,就是以attention Seq2Seq為基礎架構,然後將Encoder共享給文本蘊含任務,也就是使用摘要模型中的Encoder與一個softmax層組成蘊含關係分類器,並且在NLI數據集上進行訓練,這樣做的目的就是使摘要模型的Encoder具有蘊含意識,論文作者在做實驗時採取的多任務學習方式是每在摘要數據集上迭代100次,就在文本蘊含數據集上迭代10次;同時呢,在Decoder
  • 使用Python和GloVe詞嵌入模型提取新聞和文章的文本摘要
    在學術上,提取摘要是一項具有挑戰性的任務。值得慶幸的是,機器學習出現了。機器學習的自然語言處理(NLP)模塊提供了許多可用於文本摘要的算法。文本摘要有兩種主要方法:創建抽象式摘要:該技術使用高級的NLP方法來生成摘要,該摘要所使用的單詞句子是全新的。這意昧著,摘要是用文章中未使用的詞創建的。
  • 基於關鍵詞的文本內容過濾算法的研究與應用
    摘要:本文對目前文本過濾技術進行了調研,並在此基礎上利用空間向量模型作為用戶需求模板,使用餘弦距離計算文本相似度,採用K-means算法進行文本聚類分析效果優化,提出了基於關鍵詞的文本內容過濾模型,能夠為人民網用戶個性化推薦新聞、廣告、文章等信息,縮簡訊息檢索時間,最大程度為用戶提供其感興趣的內容
  • ML 文本自動摘要了解一下
    本文介紹了自然語言處理中的兩種文本自動摘要生成方法——抽取式和抽象式文本摘要。這兩種方法通過計算文本中句子成分的權重來生成摘要,可以大大節省通讀全文以及歸納總結主要信息的時間,為讀者提供方便。你是否曾將一篇冗長的文檔歸納為一個小的段落?你用了多長時間呢?手動歸納總結耗費時間、枯燥乏味。
  • 谷歌大腦AI實現文本摘要生成
    為了節省時間,人們寄希望於AI能夠自動生成文本摘要,即只要輸入文檔,AI就能總結出準確、簡潔、語言流暢的摘要。然而,由於AI語義理解的困難性,這不是一項簡單的任務。最近,上述願景或許正在成為現實。Transformers架構,並結合了為生成抽象文本量身定做的預訓練目標。
  • 基於python的中文文本分析
    ,文摘生成,文本的情緒判斷及將其可視化是現今研究的重點。近幾年國內開始注重對中文文本分析的研究,但由於中文與英文語言上的差異導致中文文本有別於英文文本的分析處理,我們需要對中文進行專門的分詞研究,分詞結果的好壞很大程度上決定了數據分析結果的準確性。本文在python環境下對中文文本進行分析及可視化的處理,對文章文摘,關鍵詞及情緒的判斷進行了研究,分別對jiagu分詞和jieba分詞和tfidf和textrank進行對比分析,得到更優選擇。
  • Transformer生成論文摘要方法已出
    快樂的是可以將自己的研究公之於眾,痛苦的是有大段大段的文本內容需要完成。特別是摘要、引言、結論,需要不斷重複說明論文的主要研究、觀點和貢獻。現在,這樣的工作可以依賴 AI 完成了。Element AI 的研究者們提出了一種新的模型,使用 Transformer 架構,自動地生成論文的摘要。AI 攢論文的進程又往前走了一步。
  • 使用Word Embedding構造簡潔有效的文本摘要系統
    本文介紹下我們在2014年底2015年初時,使用WordEmbedding思想來構造文本摘要的一些思路,其中包括一種異常簡單的文本摘要實現思路,實驗效果證明這種方法雖然簡單,可能比傳統的TFIDF方法還要簡單,但是效果與比較複雜的方法是相當的。
  • 使用NLP創建摘要
    前言:個人文本摘要器不難創建——初學者可以輕鬆做到!什麼是文本摘要基本上,在保持關鍵信息的同時,生成準確的摘要,而不失去整體意義,這是一項任務。摘要有兩種一般類型:抽象摘要>>從原文中生成新句子。提取摘要>>識別重要句子,並使用這些句子創建摘要。
  • 一周論文 | 文本摘要
    2016-11-05 機器之心引文本摘要是自然語言處理的一大經典任務,研究的歷史比較長。隨著目前網際網路生產出的文本數據越來越多,文本信息過載問題越來越嚴重,對各類文本進行一個「降維」處理顯得非常必要,文本摘要便是其中一個重要的手段。
  • NLP領域文本摘要有哪些研究方法?
    在這種情況下,摘要是一段簡短的文本,它準確地捕獲和傳達我們想要摘要的文檔中包含的最重要和最相關的信息。我們目前使用的各種不同的自動文本摘要技術,其效果有許多是經過實踐檢驗的。有一些可以對自動文本摘要技術進行分類的方法,如圖1所示。本文將從摘要輸出類型的角度探討這些技術。在這方面主要有兩類技術:抽取式和抽象式。
  • 為文本摘要模型添加注意力機制:採用LSTM的編解碼器模型實現
    摘要是自然語言處理領域中最具挑戰性和最有趣的問題之一。它是一個從多種文本資源(如書籍、新聞文章、博客文章、研究論文、電子郵件和tweet)中生成簡潔而有意義的文本摘要的過程。現在,隨著大量的文本文檔的可用性,摘要是一個更加重要的任務。那麼有哪些不同的方法呢?