摘要是自然語言處理領域中最具挑戰性和最有趣的問題之一。它是一個從多種文本資源(如書籍、新聞文章、博客文章、研究論文、電子郵件和tweet)中生成簡潔而有意義的文本摘要的過程。現在,隨著大量的文本文檔的可用性,摘要是一個更加重要的任務。
那麼有哪些不同的方法呢?
萃取總結
這些方法依賴於從一段文本中提取幾個部分,比如短語和句子,然後將它們堆在一起創建摘要。因此,在提取方法中,識別出用於總結的正確句子是至關重要的。讓我們通過一個例子來理解這一點。
Text:Messi and Ronaldo have better records than their counterparts. Performed exceptionally across all competitions. They are considered as the best in our generation.*
Abstractive summary:Messi and Ronaldo have better records than their counterparts. Best in our generation.
正如你在上面看到的,這些粗體的單詞被提取出來並加入到一個摘要中——儘管有時這些摘要在語法上可能很奇怪。
摘要式的總結
這些方法使用先進的NLP技術產生一個全新的總結。本摘要的某些部分甚至可能不會出現在原文中。讓我們通過一個例子來理解這一點。
Text:Messi and Ronaldo have better records than their counterparts. Performed exceptionally across all competitions. They are considered as the best in our generation.
Abstractive summary:Messi and Ronaldo have better records than their counterparts, so they are considered as the best in our generation.
摘要文本摘要算法創建新的短語和句子,從原始文本中傳遞最有用的信息——就像人類一樣。
在本文中,我們將重點研究抽象摘要技術,並將利用編解碼器架構來解決這一問題。
什麼是編碼器-解碼器架構?
常用的序列-序列模型(編碼器-解碼器)的整體結構如下圖所示
該模型由編碼器、中間矢量和解碼器三部分組成。
編碼器
該編碼器基本上由一系列LSTM/GRU單元組成(請查看LSTM/GRU文檔以更好地理解架構)。編碼器接受輸入序列並將信息封裝為內部狀態向量。解碼器使用編碼器的輸出和內部狀態。在我們的文本摘要問題中,輸入序列是文本中需要匯總的所有單詞的集合。每個單詞都表示為x_i,其中i是單詞的順序。
中間(編碼器)向量
這是模型的編碼器部分產生的最終隱藏狀態。用上面的公式計算。這個向量旨在封裝所有輸入元素的信息,以幫助解碼器做出準確的預測。它作為模型的解碼器部分的初始隱藏狀態。
解碼器
一種由幾個循環單元組成的堆棧,其中每個單元在一個時間步長t預測輸出yt。每個循環單元從前一個單元接受一個隱藏狀態,並產生和輸出它自己的隱藏狀態。在摘要問題中,輸出序列是來自摘要文本的所有單詞的集合。每個單詞都表示為yi,其中i是單詞的順序。任意隱藏狀態h_i的計算公式為:
正如你所看到的,我們只是用前一個隱藏狀態來計算下一個。
t時刻的輸出y_t用公式計算:
我們使用當前時間步長的隱藏狀態和各自的權值W(S)來計算輸出。Softmax用於創建一個概率向量,它將幫助我們確定最終的輸出(例如回答問題中的單詞)。
添加一些注意力
首先,我們需要了解什麼是注意力。
為了在時間步長t生成一個單詞,我們需要對輸入序列中的每個單詞給予多少關注?這就是注意力機制概念背後的關鍵直覺。
讓我們用一個簡單的例子來理解這一點:
Question: In the last decade, who\is the best Footballer\?
Answer: Lionel Messi\is the best player\.
在上面的例子中,問題中的第五個單詞和梅西有關,第九個單詞足球運動員和第六個單詞球員有關。
因此,我們可以增加源序列中產生目標序列的特定部分的重要性,而不是查看源序列中的所有單詞。這是注意力機制背後的基本思想。
根據被關註上下文向量的推導方式,有兩種不同的注意機制:
Global Attention
在這裡,注意力被放在所有的源位置上。換句話說,為了得到參與的上下文向量,我們考慮了編碼器的所有隱藏狀態。在這個總結任務中,我們將使用Global Attention。
Local Attention
在這裡,注意力只放在幾個源位置上。在推導參與上下文向量時,只考慮編碼器的少數隱藏狀態。
現在讓我們了解這種注意力是如何真正起作用的:
編碼器輸出源序列中每個時間步長j的隱藏狀態(hj)同樣,解碼器輸出目標序列中每一個時間步長i的隱藏狀態(si)我們計算一個稱為對齊分數(eij)的分數,在這個分數的基礎上,使用一個評分函數將源單詞與目標單詞對齊。利用score函數從源隱藏狀態hj和目標隱藏狀態si計算對齊得分。由:
其中eij為目標時間步長i和源時間步長j的對齊得分。
我們使用softmax函數對對齊分數進行歸一化,以檢索注意力權重(aij):
計算編碼器hj的注意權值aij與隱藏狀態的乘積的線性和,得到上下文向量Ci:
將所述解碼器在時間步長i時的參與上下文向量與目標隱藏狀態連接,生成參與隱藏向量Si,其中Si= concatenate([Si;Ci)然後將參與的隱藏向量Si送入稠密層產生yi, yi=dense(Si)。
讓我們通過一個示例來理解上面的注意機制步驟。假設源文本序列為[x1, x2, x3, x4],目標摘要序列為[y1, y2]。
編碼器讀取整個源序列並輸出每個時間步長的隱藏狀態,例如h1, h2, h3, h4
解碼器讀取由一個時間步長偏移的整個目標序列,並輸出每個時間步長(例如s1、s2、s3)的隱藏狀態
目標timestep i = 1
利用score函數從源隱藏狀態hi和目標隱藏狀態s1計算對齊得分e1j:
e11= score(s1, h1) e12= score(s1, h2) e13= score(s1, h3) e14= score(s1, h4)
使用softmax對對齊分數e1j進行歸一化,得到注意力權重a1j:
a11= exp(e11)/((exp(e11)+exp(e12)+exp(e13)+exp(e14)) a12= exp(e12)/(exp(e11)+exp(e12)+exp(e13)+exp(e14)) a13= exp(e13)/(exp(e11)+exp(e12)+exp(e13)+exp(e14)) a14= exp(e14)/(exp(e11)+exp(e12)+exp(e13)+exp(e14))
由編碼器隱藏狀態hj與對齊得分a1j的乘積的線性和得到上下文向量C1:
C1= h1 * a11 + h2 * a12 + h3 * a13 + h4 * a14
連接上下文向量C1和目標隱藏狀態s1,生成隱藏向量s1
S1= concatenate([s1; C1])
然後將注意力隱藏向量S1輸入到稠密層,產生y1
y1= dense(S1)
我們可以用同樣的方法計算Y2。
實施
在本文中,我們將使用亞馬遜食品評論數據集。讓我們來看看數據:
數據清洗
我們首先需要清理我們的數據,所以我們需要遵循的步驟是:
將所有內容轉換為小寫字母刪除HTML標記收縮映射刪除(的)刪除括號()內的任何文本消除標點和特殊字符刪除stopwords。刪除短詞
數據分布
然後,我們將分析評語和總結的長度,從而對文章的長度分布有一個總體的認識。這將幫助我們確定序列的最大長度。
標記數據:
記號賦予器構建詞彙表並將單詞序列轉換為整數序列。我們將使用Keras』 Tokenizer來標記句子。
模型建立
我們終於到了模型製作部分。但在此之前,我們需要熟悉一些術語,這些術語在構建模型之前是必需的。
Return Sequences= True:當參數設置為True時,LSTM為每個時間步長生成隱藏狀態和單元格狀態Return State = True:當Return State = True時,LSTM只生成最後一個時間步驟的隱藏狀態和單元格狀態Initial State:用於初始化第一個時間步驟的LSTM的內部狀態Stacked LSTM:Stacked LSTM有多層的LSTM堆疊在彼此之上。這樣可以更好地表示序列。我鼓勵您試驗堆疊在彼此之上的LSTM的多個層
訓練和Early Stopping:
這就是在訓練過程中驗證損失減少的原因,我們可以推斷在 epoch10之後驗證損失略有增加。因此,在這個 epoch之後,我們將停止訓練模型。
推理
現在,我們將為編碼器和解碼器建立推斷。在這裡,編碼器和解碼器將一起工作,以產生摘要。所述解碼器將堆疊在所述編碼器之上,所述解碼器的輸出將再次饋入所述解碼器以產生下一個字。
Review: right quantity japanese green tea able either drink one sitting save later tastes great sweet Original summary: great japanese product Predicted summary: great teaReview: love body wash smells nice works great feels great skin add fact subscribe save deal great value sold Original summary: great product and value Predicted summary: great productReview: look like picture include items pictured buy gift recipient disappointed Original summary: very disappointed Predicted summary: not what expected
總結
在本文中,我們了解了如何使用序列到序列模型總結文本。我們可以通過增加數據集、使用雙向LSTM、 Beam Search策略等方法進一步改進該模型。
作者:Sayak Misra