當前位置:成語大全網 - 新華字典 - Pointer Network 生成文本摘要

Pointer Network 生成文本摘要

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

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

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

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

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

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

可以看到,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-Generator Networks 為了避免模型生成重復的序列以及遺漏翻譯,加入了 coverage 機制。通過壹個 coverage 向量 c t 記錄 t 時刻前所有的 Attention 分數,因此可以通過 coverage 向量中每個 token 的取值判斷該 token 是否被使用過,取值高的更可能被使用過。

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

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

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

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 分布融合在壹起。模型的示意圖如下:

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

Get To The Point: Summarization with Pointer-Generator Networks

Multi-Source Pointer Network for Product Title Summarization