02.27 Pointer Network 生成文本摘要

指針網絡 Pointer Network 是一種 Seq2Seq 模型,但是其 Decoder 預測的結果是從 Encoder 的輸入序列中得到的。Pointer Network 從輸入序列中得到輸出結果,所以比較適合用於文本摘要的生成,並且可以比較好的避免 OOV (Out of vocabulary) 問題。本文主要介紹兩種利用 Pointer Network 的文本摘要算法:Pointer-Generator Networks 和 Multi-Source Pointer Network。

1.引言

在之前的文章中介紹過指針網絡 Pointer Network,指針網絡是一種 Seq2Seq 模型,但是其 Decoder 預測的結果是從 Encoder 的輸入序列中得到的。指針網絡改變了傳統 Seq2Seq 模型 Attention 的用法,用 Encoder 輸入序列中 Attention 得分最高的作為當前輸出。下圖展示了傳統 Seq2Seq Attention 與 Pointer Network 使用上的區別。簡單來說,傳統的 Seq2Seq 在預測時計算的是整個字典中的概率分佈,而 Pointer Network 預測時計算的是輸入序列中每個單詞的概率分佈。

Pointer Network 生成文本摘要

Seq2Seq Attention

Pointer Network 生成文本摘要

Pointer Network 機制

而文章摘要是 NLP 中一個比較重要的領域,常見的文章摘要方法可以分為抽取式摘要和生成式摘要。抽取式摘要主要從源文檔中提取現成的句子作為摘要句,一般在語句流暢程度上比生成式摘要好,但是容易引入較多的冗餘信息。生成式摘要主要根據源文檔內容,通過算法模型生成摘要,而非提取原文的句子。

Pointer Network 由於可以複製輸入序列的 token 作為輸出,因此比較適合用於文本摘要,另外 Pointer Network 可以在一定程度上緩解 OOV 問題。例如訓練集裡面沒有出現 "哈士奇" 這一個單詞,但是在預測的時候出現了 "哈士奇",一般的 Seq2Seq 在生成摘要時通常會用 "UNK" 替換 "哈士奇",但是 Pointer Network 可以直接從輸入序列中複製 "哈士奇" 作為輸出。

本文主要介紹兩種利用 Pointer Network 的文本摘要算法:Pointer-Generator Networks 和 Multi-Source Pointer Network。Pointer-Generator Networks 是一種同時利用了抽取式和生成式的摘要算法,而 Multi-Source Pointer Network 主要是抽取式。

2.Pointer-Generator Networks

Pointer-Generator Networks 出自論文 《Get To The Point: Summarization with Pointer-Generator Networks》。Pointer-Generator Networks 的主要內容包括以下兩點:

  • 傳統 Seq2Seq 模型可以計算輸出時整個字典所有 token 的概率分佈,Pointer-Generator Networks 在此基礎上融合了指針網絡計算出的輸入序列 token 概率分佈。從而可以緩解 OOV 問題,並且同時賦予模型生成新單詞和複製原始序列兩種能力。
  • 為了解決 Seq2Seq 生成摘要時容易重複相同單詞的問題,Pointer-Generator Networks 加入了 coverage 機制,coverage 可以記錄已生成的內容,避免重複生成。

2.1 模型

Pointer-Generator Networks 在 Seq2Seq 基礎上加入了指針網絡,首先看一下 Seq2Seq 的模型結構圖,如下圖所示。

Pointer Network 生成文本摘要

Seq2Seq

Seq2Seq 中利用 Decoder 的輸出和 Encoder 每一時刻的輸出計算出 Attention 分數,並根據 Attention 分數融合 Encoder 的輸出得到 context vector,將 context vector 和 Decoder 的輸出傳入 Softmax 得到字典中 token 的概率分佈。計算的公式如下:

Pointer Network 生成文本摘要

Pointer-Generator Networks 在 Seq2Seq 中加入了指針網絡的機制,模型如下圖所示。

Pointer Network 生成文本摘要

Pointer-Generator Networks

可以看到,Pointer-Generator Networks 在 Seq2Seq 預測的概率分佈 P_vocab (圖中綠色部分) 加上了 Attention 分佈 (圖中藍色部分),得到最後的概率分佈。可以看到 P_vocab 中原本沒有單詞 "2-0",但是在 Attention 分佈中包含了 "2-0",因此最後的分佈也加入了 "2-0",從而減緩 OOV 問題。Pointer-Generator Networks 通過一個參數 p_gen 將兩個分佈加在一起,p_gen 通過學習得到。

Pointer Network 生成文本摘要

Pointer-Generator Networks 概率分佈

2.2 coverage 機制

Pointer-Generator Networks 為了避免模型生成重複的序列以及遺漏翻譯,加入了 coverage 機制。通過一個 coverage 向量 ct 記錄 t 時刻前所有的 Attention 分數,因此可以通過 coverage 向量中每個 token 的取值判斷該 token 是否被使用過,取值高的更可能被使用過。

Pointer Network 生成文本摘要

coverage 向量

然後在計算 Attention 時要加入 coverage 向量。

Pointer Network 生成文本摘要

加入 coverage 後 Attention 的計算

最後要在 Loss 中加上 coverage loss,可以看到對於第 i 個單詞,如果其 attention 值和 coverage 值都很大,說明之前已經大概率生成過單詞 i,則此時 coverage loss 會很大。

Pointer Network 生成文本摘要

加入 coverage 之後的 loss

2.3 實驗效果

Pointer Network 生成文本摘要

上面是三種模型的摘要對比,藍色的是參考摘要,紅色的是錯誤的摘要,可以看到 Seq2Seq 模型的摘要包含較多錯誤以及 UNK 單詞。綠色的是重複的摘要,Pointer-Generator Networks 雖然比較少錯誤和未知單詞,但是其會生成重複的摘要。而加上了 coverage 機制的 Pointer-Generator Networks 則可以比較好避免重複摘要。

3.Multi-Source Pointer Network

Multi-Source Pointer Network (以下簡稱 MS-Pointer) 出自論文《Multi-Source Pointer Network for Product Title Summarization》,是阿里巴巴團隊提出的,用於生成產品的標題。

MS-Pointer 需要兩個數據源,其中一個是商品原來的標題,另一個是一些額外的信息。額外的信息稱為 "knowledge",主要包含商品名和品牌名,類似與一些商品的標籤。

由於產品的標題不應該引入不相關的信息並且要保留原來的重要信息,所以 MS-Pointer 採用了抽取式的方法,摘要中所有的 token 均來自標題或者 "knowledge"。

MS-Pointer 和 Pointer-Generator Networks 比較類似,區別在於 MS-Pointer 使用一個標題 Encoder 得到標題 token 的 Attention 分佈,使用一個 "knowledge" Encoder 得到 "knowledge" 的 Attention 分佈,將兩個 Attention 分佈融合在一起。模型的示意圖如下:

Pointer Network 生成文本摘要

MS-Pointer

如上圖所示,MS-Pointer 將兩個 Attention 分佈融合,融合的參數用以下公式計算:

Pointer Network 生成文本摘要

MS-Pointer 兩個 Attention 融合係數

4.參考文獻

Get To The Point: Summarization with Pointer-Generator Networks

Multi-Source Pointer Network for Product Title Summarization



分享到:


相關文章: