自動摘要生成技術


本文鏈接:

https://blog.csdn.net/hlang8160/article/details/88310815

 

一、 概念

自動摘要技術解決的問題描述很簡單,就是用一些精煉的話來概括整片文章的大意,用戶通過讀文摘就可以了解到原文要表達的意思。

 

問題解決的思路有兩種:

一種是Extractive抽取式的,就是從原文中找到一些關鍵的句子,組合成一篇摘要;

另外一種是Abstractive摘要式的,這就需要計算機可以讀懂原文的內容,並且用自己的意思變大出來。

 

現階段,相對成熟的是抽取式方案,有很多很多算法,也有一些baseline測試,但得到的摘要效果差強人意。對后者的研究並不是很多,人類語言包括字、詞、短語、句子、段落、文檔這幾個level,研究難度依次遞增,理解句子、段落尚且困難,何況是文檔,這是摘要生成最大的難點。

二、Extractive抽取式算法 - TextRank

https://www.cnblogs.com/xueyinzhe/p/7101295.html

https://www.cnblogs.com/chenbjin/p/4600538.html

 

TextRank是一種用來做關鍵詞提取的算法,也可以用於提取短語和自動摘要,因為TextRank基於PageRank的。PageRank設計之初是用於Google的網頁排名的,以該公司創辦人拉里·佩奇(Larry Page)之姓來命名。Google用它來體現網頁的相關性和重要性,在搜索引擎優化操作中是經常被用來評估網頁優化的成效因素之一。PageRank通過互聯網中的超鏈接關系來確定一個網頁的排名,其公式是通過一種投票的思想來設計的:如果我們要計算網頁APageRank值(以下簡稱PR值),那么我們需要知道有哪些網頁鏈接到網頁A,也就是要首先得到網頁A的入鏈,然后通過入鏈給網頁A的投票來計算網頁APR值。這樣設計可以保證達到這樣一個效果:當某些高質量的網頁指向網頁A的時候,那么網頁APR值會因為這些高質量的投票而變大,而網頁A被較少網頁指向或被一些PR值較低的網頁指向的時候,APR值也不會很大,這樣可以合理地反映一個網頁的質量水平。那么根據以上思想,佩奇設計了下面的公式:

該公式中,Vi表示某個網頁,Vj表示鏈接到Vi的網頁(即Vi的入鏈),S(Vi)表示網頁的PR值,In(Vi)表示網頁Vi的所有入鏈的集合,Out(Vj)表示網頁Vj中的鏈接指向的網頁的集合(即網頁Vj鏈接的網頁集合),d表示阻尼系數,是用來克服這個公式中 "d *" 后面部分的固有缺陷,即如果僅僅只有求和的部分,那么該公式將無法處理沒有入鏈的網頁的PR值,因為此時根據公式,這些網頁的PR值為0,但實際情況不是如此,所以加入了一個阻尼系數來確保每個網頁都有一個大於0PR根據實驗結果,在0.85的阻尼系數下,大約100多次的迭代PR值就能收斂到一個穩定的值,而當阻尼系數接近1時,需要迭代的次數會驟然增加很多,且排序不穩定。公式中S(Vj)前面的分數指的是Vj所有出鏈指向的網頁應該平分VjPR,這樣才算是把自己的票分給了自己鏈接到的網頁。

 

比如:a、b、c表示網頁

S(Va) = (1 – 0.85) + 0.85 * ((1/2)*S(Vb) + (1/1) * S(Vc))

= 0.15 + 0.85 * (0.5 + 1) = 1.425

S(Vb) = 0.15

S(Vc) = 0.575

More iterations ……

 

1TextRank算法提取關鍵詞

 

提取出若干關鍵詞,若原文本中存在若干個關鍵詞相鄰的情況,那么這些關鍵詞可以構成一個關鍵短語。

TextRank是由PageRank改進而來,其公式有頗多相似之處,這里給出TextRank的公式:

可以看出,該公式僅僅比PageRank多了一個權重項Wji,用來表示兩個節點之間的邊連接有不同的重要程度,單詞i和單詞j共現的次數越多,權重Wij就越大。TextRank用於關鍵詞提取的算法如下:

 

1)把給定的文本T按照完整句子進行切割,即T=[S1, S2, ..., Sm];# 分句

2)對於每個句子Si(屬於T),進行分詞和詞性標注處理,並過濾掉停用詞,只保留指定詞性的單詞,如名詞、動詞、形容詞,即Si = [t_{i,1}, t_{i,2}, ..., t_{i,n} ],其中t_{i,j}表示保留后的候選關鍵詞

3)構建候選關鍵詞圖G =(V, E),其中V為節點集,由(2)生成的候選關鍵詞組成,然后采用共現關系(co-occurrence)構造任兩點之間的邊,兩個節點之間存在邊,當且僅當它們對應的詞匯在長度為K的窗口中共現,K表示窗口的大小,即最多共現K個單詞

4)根據上面的公式,迭代傳播各節點的權重,直至收斂

5)對節點權重進行倒序排序,從而得到最重要的T個單詞,作為候選關鍵詞

6)由(5)得到最重要的T個單詞,在原始文本中進行標記,若形成相鄰詞組,則組合成關鍵詞短語

 

2TextRank算法提取關鍵詞短語

提取關鍵詞短語的方法基於關鍵詞提取,可以簡單認為:如果提取出的若干關鍵詞在文本中相鄰,那么構成一個被提取的關鍵短語。

 

3TextRank算法生成摘要

將文本中的每個句子分別看做一個節點,如果兩個句子有相似性,那么認為這兩個句子對應的節點之間存在一條無向有權邊,權值Wji是相似度,然后通過pagerank算法計算得到的重要性最高的若干句子可以當作摘要。考察句子相似度的方法是下面這個公式:

公式中,SiSj分別表示兩個句子ij|Si|為句子i的單詞數量,Wk表示句子中的詞,那么分子部分的意思是同時出現在兩個句子中的同一個詞的個數,分母是對句子中詞的個數求對數之和,分母這樣設計可以遏制較長的句子在相似度計算上的優勢

 

1)根據以上相似度公式循環計算任意兩個節點之間的相似度,

2)根據閾值去掉兩個節點之間相似度較低的邊連接,構建出節點連接圖,然后計算TextRank值(PR值),

3)然后使用冪迭代法不斷更新節點PR值,直到收斂,最終的PR值為句子的重要性得分

4)最后對所有TextRank值排序,選出TextRank值最高的幾個節點對應的句子作為摘要。

 

無監督TextRank算法優勢:

1)TextRank不依賴於文本單元的局部上下文,而是考慮全局信息,從全文中不斷迭代采樣的文本信息進行文本單元重要性學習;

2)TextRank識別文本中各種實體間的連接關系,利用了推薦的思想。文本單元會推薦與之相關的其他文本單元,推薦的強度是基於文本單元的重要性不斷迭代計算得到。被其他句子高分推薦的句子往往在文本中更富含信息量,因此得分也高;

3)TextRank實現了"文本沖浪"的思路,意思與文本凝聚力類似。對於文本中的某一概念c,我們往往更傾向於接下來看與概念c相關的其他概念;

4)通過迭代機制,TextRank能夠基於連接的文本單元的重要性來計算文本單元得分。

 

TextRank算法存在的問題及解決策略:

1)摘要句子重復; 去除相似句子

2)摘要開頭句子不適合作為句子;

3)部分摘要句子太長。 限定摘要句子長度

 

 

三、Abstractive抽取式算法

   

自動總結(Automatic Summarization)類型的模型一直是研究熱點。直接抽出重要的句子的抽取式方法較為簡單,有如textrank之類的算法,而生成式(重新生成新句子)較為復雜,效果也不盡如人意。目前比較流行的Seq2Seq模型,由 Sutskever等人提出,基於一個Encoder-Decoder的結構將source句子先Encode成一個固定維度d的向量,然后通過Decoder部分一個字符一個字符生成Target句子。添加入了Attention注意力分配機制后,使得Decoder在生成新的Target Sequence時,能得到之前Encoder編碼階段每個字符的隱藏層的信息向量Hidden State,使得生成新序列的准確度提高。

 

encoder-decoder框架的工作機制是:先使用encoder,將輸入編碼到語義空間,得到一個固定維數的向量,這個向量就表示輸入的語義;然后再使用decoder,將這個語義向量解碼,獲得所需要的輸出,如果輸出是文本的話,那么decoder通常就是語言模型。這種機制的優缺點都很明顯,優點:非常靈活,並不限制encoder、decoder使用何種神經網絡,也不限制輸入和輸出的模態(例如image caption任務,輸入是圖像,輸出是文本);而且這是一個端到端(end-to-end)的過程,將語義理解和語言生成合在了一起,而不是分開處理。缺點的話就是由於無論輸入如何變化,encoder給出的都是一個固定維數的向量,存在信息損失;在生成文本時,生成每個詞所用到的語義向量都是一樣的,這顯然有些過於簡單。

   

這里主要介紹兩種算法:1)seq2seq + attention模型;2)基於Pointer Network的生成式摘要算法

 

1seq2seq + attention模型

  • 自然語言處理中的自注意力機制 seq2seq + attention機制的應用 深度學習中Attention Mechanism詳細介紹:原理、分類及應用
  •  

    1)seq2seq

     

    RNN最重要的一個變種:N vs M,這種結構又叫Encoder-Decoder模型,也可以稱之為Seq2Seq模型,即序列到序列模型。原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。序列形的數據就不太好用原始的神經網絡處理了,為了建模序列問題,RNN引入了隱狀態h(hidden state)的概念,h可以對序列形的數據提取特征,接着再轉換為輸出。

    為此,Encoder-Decoder結構先將輸入數據編碼成一個上下文向量c:

       

    得到c有多種方式,最簡單的方法就是把Encoder的最后一個隱狀態賦值給c,還可以對最后的隱狀態做一個變換得到c,也可以對所有的隱狀態做變換。

    拿到c之后,就用另一個RNN網絡對其進行解碼,這部分RNN網絡被稱為Decoder。具體做法就是將c當做之前的初始狀態h0輸入到Decoder中:

     

    還有一種做法是將c當做每一步的輸入:

     

     

     

    由於這種Encoder-Decoder結構不限制輸入和輸出的序列長度,因此應用的范圍非常廣泛,比如:

       

    機器翻譯。Encoder-Decoder的最經典應用,事實上這一結構就是在機器翻譯領域最先提出的

    文本摘要。輸入是一段文本序列,輸出是這段文本序列的摘要序列。

    閱讀理解。將輸入的文章和問題分別編碼,再對其進行解碼得到問題的答案。

    語音識別。輸入是語音信號序列,輸出是文字序列。

    …………

    2)attention機制

     

    a. 概念

     

    Attention是一種用於提升基於RNN(LSTM或GRU)的Encoder + Decoder模型的效果的的機制(Mechanism),一般稱為Attention Mechanism。Attention Mechanism目前非常流行,廣泛應用於機器翻譯、語音識別、圖像標注(Image Caption)等很多領域,之所以它這么受歡迎,是因為Attention給模型賦予了區分辨別的能力,例如,在機器翻譯、語音識別應用中,為句子中的每個詞賦予不同的權重,使神經網絡模型的學習變得更加靈活(soft)。比如在圖像標注應用中,可以解釋圖片不同的區域對於輸出Text序列的影響程度

    通過上述Attention Mechanism在圖像標注應用的case可以發現,Attention Mechanism與人類對外界事物的觀察機制很類似,當人類觀察外界事物的時候,一般不會把事物當成一個整體去看,往往傾向於根據需要選擇性的去獲取被觀察事物的某些重要部分,比如我們看到一個人時,往往先Attention到這個人的臉,然后再把不同區域的信息組合起來,形成一個對被觀察事物的整體印象。因此,Attention Mechanism可以幫助模型對輸入的X每個部分賦予不同的權重,抽取出更加關鍵及重要的信息,使模型做出更加准確的判斷,同時不會對模型的計算和存儲帶來更大的開銷,這也是Attention Mechanism應用如此廣泛的原因。

     

    Encoder-Decoder結構中,Encoder把所有的輸入序列都編碼成一個統一的語義特征c再解碼,因此,c中必須包含原始序列中的所有信息,它的長度就成了限制模型性能的瓶頸。如機器翻譯問題,當要翻譯的句子較長時,一個c可能存不下那么多信息,就會造成翻譯精度的下降。 所謂注意力機制,就是說在生成每個詞的時候,對不同的輸入詞給予不同的關注權重。谷歌博客里介紹神經機器翻譯系統時所給出的動圖形象地展示了attention


免責聲明!

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



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