Text Summarization文本摘要與注意力機制

引言:

本文的路線:從文本摘要的需求引出Seq2Seq->Encoder->Decoder,由於長文本,所以又引出了Attention機制。

什麼是NLP中的文本摘要

自動文本摘要是在保持關鍵信息內容和整體含義的同時,生成簡潔流暢的摘要的任務。文本摘要目前大致可以分為抽取式與生成式兩種類型:

1. Extractive Summarization:根據詞語重要性、句子重要性排序,抽取出重要度高的句子,從而形成摘要。主要是對文本的選擇,算法過程相對更容易,但是對於複雜的文本時,很難僅僅通過選擇文本來形成摘要,如小說。

2. Abstractive Summarization:過程更為複雜,但生成能力更強,可認為有一定的概括能力。

Extractive Summarization

由圖可以看出,這種方法提取的內容語句來自於原文。

Text Summarization文本摘要與注意力機制

Abstractive Summarization

由圖可以看出,這種方法提取的內容語句可能不存在於原文。

Text Summarization文本摘要與注意力機制

Seq2Seq模型

Seq2Seq模型可以處理一切連續型信息,包括情感分類,機器翻譯,命名實體識別等。

  1. 機器翻譯任務中,輸入是連續文本序列,輸出也是連續文本序列。

2. 命名實體識別中,輸入是連續文本序列,輸出是連續的標籤信息。

所以,我們可以利用Seq2Seq模型,通過輸入一段長文本,輸出短的摘要,實現文本摘要功能。下圖是典型的Seq2Seq模型架構:

Text Summarization文本摘要與注意力機制

通常我們可以選擇RNNs網絡的變體GRU或者LSTM,這是因為它們能夠通過克服梯度消失的問題來捕獲長期依賴性。

Encoder編碼器

LSTM中的Encoder讀取整個輸入序列,其中每個時間step上,都會有一個字輸入編碼器。然後,他在每個時間step上處理信息,並捕獲輸入序列中存在的上下文信息。

Text Summarization文本摘要與注意力機制

上一個時間step的隱藏層h1與記憶單元層c1將會用來初始化Decoder。

Decoder解碼器

Decoder是LSTM結構的另一部分。它逐字讀取整個目標序列,並以一個時間步長預測相同的序列偏移量。解碼器可以在給定前一個單詞的情況下預測序列中的下一個單詞。解碼器的初始輸入是編碼器最後一步的結果。

Text Summarization文本摘要與注意力機制

在將整個目標序列放入解碼器前,還需將[start] 與 [end]這兩個特殊的tokens加入序列中,告知模型的開始與結束。模型通過輸入的[start]開始預測第一個詞,而[end]則表示整個句子的結束。

Deocder的工作流程

假設輸入序列為[x1,x2,x3,x4],將其編碼成內部固定長度的向量。下圖顯示了每一個time step下Decoder是如何工作的。

Text Summarization文本摘要與注意力機制

推理部分

下圖是整個Encoder-Decode的結構。通過上面的理解,我覺得這個圖非常清晰。

Text Summarization文本摘要與注意力機制

  1. Encoder整個輸入序列,並且用Encoder最後一個狀態結果來初始化Decoder。
  2. 將[start]作為輸入傳遞給解碼器Decoder。
  3. 使用通過Encoder初始化過的Decoder運行一個time stpe。
  4. 輸出將是下一個單詞的概率,將選擇概率最大的單詞。
  5. 這個預測的單詞將會在下一時間Step中作為輸入。並且通過當前狀態更新內部參數。
  6. 重複步驟3-5,直到生成[end]或達到目標序列的最大長度。

Encoder-Decoder結構的侷限性

Encoder將整個輸入序列轉為固定的長度,但是當序列很長的時候,Encoder將會很難記住整個序列的內容,無法將所有必要信息準確的編碼到固定長度。但是,我們需要關注序列中所有的內容麼,不需要。

注意力機制

為了解決長句子的問題,注意力機制出現在人們的視野。注意力機制為對結果重要的部分添加高的權重,以保留主要信息。舉個例子:

  1. 需要編碼的序列[x1,x2,x3,x4,x5,x6,x7]
    Source sequence: “Which sport do you like the most?
  2. 需要解碼的序列[y1,y2,y3]
    Target sequence: I love cricket.

我們可以判斷,y1[I]與x4[you]有關,而y2[love]則與x5[like]有關。所以,相比記住序列中的所有單詞,不如增加對目標序列重要部分的權重,忽視低權重的部分。

Global Attention and Local Attention

編碼器的隱藏層中,所有部分都參與attention計算上下文。

Text Summarization文本摘要與注意力機制

編碼器的隱藏層中,僅有部分參與attention計算上下文。

Text Summarization文本摘要與注意力機制

本文最終採用全局注意力機制。(只是添加了注意力機制,編碼的固定長度依然需要固定。所以實戰中需要通過數據確定一個合適的長度數值。短了無法表達文本內容,長了會造成計算資源浪費。)

實戰

我們的目標是為亞馬遜美食評論生成文本摘要。(這裡我只提取了我覺得有用的部分)

數據表述

這些評論通常很長而且具有可描述性。數據集下載:kaggleData。數據涵蓋了超過10年的時間,包括截至2012年10月的所有〜500,000條評論。這些評論包括產品,用戶信息,評級,純文本評論和摘要。它還包括來自所有其他亞馬遜類別的評論。

數據處理

由於評論文本和摘要中涉及的預處理步驟略有不同,因此我們需要定義兩個不同的函數來預處理評論和摘要。

評論文本處理

  1. 將所有字母小寫;
  2. 移除HTML標籤;
  3. Contraction mapping;
  4. 移除(‘s);
  5. 刪除括號內的內容(覺得括號裡面的內容解釋說明不重要);
  6. 消除標點符號和特殊字符;
  7. 刪除停用詞;
  8. 刪除低頻詞;

摘要文本處理

為摘要文本添加[start]和[end]。

數據分佈

通過數據統計,可以看到摘要與文本數據的長度分佈。通過數據可視化,我們可以將評論文本的長度限定在80,而摘要的長度限定在10。

Text Summarization文本摘要與注意力機制

建立Tokenizer

通過分詞器生成詞彙表,並將單詞文本序列轉為數值序列,方便計算機計算。

模型建立

  1. 我們可以選擇是否讓LSTM在每個時間步都會生成隱藏狀態h和記憶單元狀態c。
  2. 選擇LSTM是否僅生成最後一個時間步的隱藏狀態h和記憶單元狀態c。
  3. 選擇LSTM相互堆疊提高模型效果。
  4. 選擇雙向LSTM,可以雙向處理文本數據,獲取更加豐富的上下文信息。
  5. 使用beam search strategy代替貪婪方法argmax。
  6. 根據BLEU分數評估模型的性能。
  7. 可以選擇指針生成網絡,
  8. 因為整數序列採用獨熱編碼的方式,所以損失函數採用了稀疏交叉熵,對內存友好。

數學理解注意力機制

1. 編碼器為源文本序列每一個時間步j都生成了一個隱藏狀態值hj。

2. 相似的工作,解碼器為目標文本每一個時間步i都生成了隱藏狀態值si。

3. alignment score: e_ij。用這個分數表示源文本中的第j步單詞與目標文本中第i步單詞的關聯度。可以用hj與si來計算這個分數值

Text Summarization文本摘要與注意力機制

根據所使用的得分函數的類型,有不同類型的注意力機制。這裡列舉一些流行的注意力機制:

Text Summarization文本摘要與注意力機制

4. 使用softmax函數對注意力參數的值進行歸一化。

Text Summarization文本摘要與注意力機制

5. 計算注意力權重 a_ij與編碼器hj的隱藏狀態乘積的線性總和,以產生注意力上下文向量Ci。

Text Summarization文本摘要與注意力機制

Text Summarization文本摘要與注意力機制

6. 將注意力上一下文向量Ci與目標隱藏層向量si級聯以產生新的注意力隱藏層向量Si。

Text Summarization文本摘要與注意力機制

7. 將注意力隱藏層向量傳入密集層產生yi。

Text Summarization文本摘要與注意力機制

英文原文:Comprehensive Guide to Text Summarization using Deep Learning in Python
公眾號【深度學習視覺】整理


分享到:


相關文章: