【NLP】一文詳解生成式文本摘要經(jīng)典論文Pointer-Generator
寫在前面
Pointer-Generator Network 以及微軟的 Unilm 是小喵在20年所研讀的自動文本摘要方向系列論文中的兩篇,到今天為止個人依舊認為它們是非常值得一讀的。今天我們先分享 Pointer-Generator Networks。
簡單地說,Pointer-Generator Networks 這篇論文的idea以及背后的動機具備說服力。它直接拋出問題,給出解決辦法,并且解決辦法的motiviation以及本身的描述都不會讓人困惑,接受度強。
需要注意的是,Pointer-Generator Networks 所針對的是 長文本摘要(multi-sentences summaries、longer-text summarization),而不是 短文本摘要(headline、short-text summarization)。
本文關(guān)鍵詞:自動文本摘要、文本生成、copy機制、attention
論文名稱:《Get To The Point:Summarization with Pointer-Generator Networks》
論文鏈接:https://arxiv.org/abs/1704.04368
代碼地址:https://www.github.com/abisee/pointer-generator
1. 背景
1.1 為什么要做文本摘要
簡單地說就是信息過載,再加上時間就是金錢。大家可能不愿意同時也沒有那么多時間從頭到尾去看一篇或許自己并不感興趣的文章。
這個時候,就需要咱們的 NLP 的技術(shù)了。可以利用 摘要/關(guān)鍵詞/實體識別 等技術(shù)對文章進行加工處理獲得一些概括性信息。這些信息雖然短,但表達了文章的大意、關(guān)鍵信息,可以讓讀者對文章有個大體的認識,幫助讀者更快地過濾信息,進而選擇自己更感興趣的文章再去了解細節(jié)。
1.2 文本摘要的主要技術(shù)路線
自動文本摘要主要有兩條技術(shù)路線:抽取式和生成式。
(1) 抽取式文本摘要
抽取式文本摘要 通常是從原文中抽取短語/詞/句子形成摘要,也可視為二分類問題或者是重要性排序問題。
其優(yōu)點是概括精準且語法正確。但是,抽取式的結(jié)果不符合大多數(shù)情況下人閱讀以后做總結(jié)/概括的模式:建立在理解的基礎(chǔ)上,可能會用原文中的詞,也可能會用新詞(未出現(xiàn)在原文中的詞)來做表述,即允許一定的用詞靈活性。
(2)生成式文本摘要
與 生成式文本摘要 類似的任務(wù)有:標簽生成、關(guān)鍵詞生成等。通常,生成式任務(wù)的模型基礎(chǔ)就是 seq2seq/encoder+decoder,也就是一個序列到序列的生成模型。attention 出現(xiàn)以后,生成式的基礎(chǔ)模型就是 seq2seq+attention。
其優(yōu)點是相比于抽取式而言用詞更加靈活,因為所產(chǎn)生的詞可能從未在原文中出現(xiàn)過。總的來說,與我們在閱讀文章后為其寫摘要或總結(jié)的模式一致:基于對原文的理解,并以相較于原文更簡短的語句來重述故事。
2. 問題
根據(jù)第1部分所述,似乎生成式相比于抽取式更加優(yōu)越。其實不然,因為我們還沒有提生成式的缺點。那這一節(jié),我們就來看看生成式弱在哪兒?
2.1 生成式的基本原理

生成類模型的基本建模思想是語言模型:
這是一個序列生成過程:每個time step(時間步)都在一個fixed vocabulary(預(yù)先設(shè)定好的固定詞庫)中選一個詞。實際上,每個時間步都在做多分類,我們通過計算固定詞表中的每個詞在當前條件下出現(xiàn)的概率,來選出當前時間步下應(yīng)該出現(xiàn)的詞。
2.2 生成式模型的問題
總的來說,抽取式技術(shù)畢竟用的就是原文的內(nèi)容,所以通常在語法層面的正確性以及對原文概括的準確性上比較占優(yōu)勢;而生成式的靈活性則導致了生成式模型普遍具有的問題:易重復;還原事實時不可控:可能生成語義不完整/不連續(xù)的句子,或者壓根就跟原文表達的意思相去甚遠;OOV問題。
(1) OOV
既然是 fixed vocabulary,那么必然就會有詞 out of the fixed vocabulary。換句話說,生成模型存在 OOV 問題:無法生成OOV的詞,只能生成固定詞表中的詞。
(2) 重復性
另外一點就是重復性,模型可能在某些time step上生成先前time step 已經(jīng)生成過的詞。
(3) 語義不連貫、語法邏輯性低、重述準確性不高
每一步去 fixed vocabulary 中選詞,最終形成摘要,這里面就會存在生成的摘要語義不連貫、語義不通順。相較于抽取式,更為嚴重的問題就是重述原文的準確性不高。
3. 核心思想
那么如何解決生成式模型的這些問題,以提高生成式摘要的質(zhì)量呢?
其實,我們可以看到生成式的這些缺點都是相較于抽取式而言的。那么融合抽取模式,是不是就可能既保留了生成式的靈活性,又將生成的摘要的質(zhì)量向抽取式的質(zhì)量標桿靠近了些呢?
答案是可以的。那究竟怎么做呢?
3.1 hybird pointer-generator network
針對重述語義不正確/精確的問題,同時也針對OOV問題,設(shè)計了一個個融合模型 pointer-generator。
模型基礎(chǔ)依舊是 seq2seq+attention,這部分作為 generator;此外,引入了 pointer。所以,它既能基于 pointer 從原文中選詞,也能基于 generator 生成詞。
注意這里的 generator 本質(zhì)上還是選詞,但是是基于固定的詞庫通過 softmax 來選。詞庫本身是在訓練模型時從訓練數(shù)據(jù)統(tǒng)計構(gòu)造的。
3.2 coverage-mechinism
針對重復性問題,設(shè)計了coverage-mechinism。其本質(zhì)上是會跟蹤記錄在當前step前已經(jīng)被選過的詞,這樣能在后續(xù)step生成詞時弱化對這部分的關(guān)注,從而減少重復性問題。
4. 模型細節(jié)

4.1 baseline model:seq2seq+attention
這部分主要分享其思想,就不再贅述相關(guān)公式了。
編碼器(encoder): 雙向序列模型,如雙向lstm/rnn。
解碼器(decoder): 因為解碼的過程是一個馬爾可夫過程,要確保不能見到將來的信息,所以解碼器一般是單向序列模型,如單向的lstm/rnn。
注意力機制(attention): 基于當前解碼步的decoder state 以及編碼器所有時刻的 hidden state 計算 attention score,即對編碼器的所有時刻 hidden state 的關(guān)注程度。然后基于 attention score 加權(quán)編碼器端的 hidden state 形成當前解碼步的 context vector。解碼步再基于這個 context vector 和當前 decode state 去生成詞。
4.2 pointer-generator network
(1) 思路
要抽取原文的內(nèi)容,加一個 pointer 就可以,它的作用是告訴我們當前 time step 應(yīng)該從原文中選擇哪一個詞。
另一方面,生成的靈活性我們也不能丟掉。那么問題就可以這樣
轉(zhuǎn)換成這樣:
其中,就是生成式的模型,是抽取式的模型。也就是說每個 time step的詞一定概率我們用生成獲取,一定概率我們用抽取獲取。
進一步還可以更加 soft,不是非此即彼,而是二者加權(quán)表決。怎么做呢?
(2) 解法
在決定生成哪一個詞時,取二者的加權(quán)和:
其中:
生成式模型,也就是公式中的,計算方式和 baseline model一致; 抽取式模型,利用pointer來實現(xiàn),也即公式中的,這里就是簡單地就是利用生成模型計算出的attention求和,表示所有位置處對該詞關(guān)注度的和。 則利用contex vector和decode state、decode input來計算,表示是生成式的權(quán)重;代表抽取式的權(quán)重。
這里相當于是擴展詞庫了,利用待抽取摘要的文章中的詞把 fixed vocabulary 變成 extened vocabulary,模型有能力可以生成 OOV的詞。
對于OOV的詞來說,它的,所以是利用pointer從原文中獲??;而對于未出現(xiàn)在原文中的詞來說,我們自然有它的,所以是依靠generator從固定詞庫中獲取。對于既出現(xiàn)在原文又出現(xiàn)在詞庫中的詞,當然就是兩部分一起作用。
4.3 coverage-mechinism
(1) 思路
說了這么多,還有一個待解決的問題,就是repetition(重復性問題)。
要怎么解決呢。簡單且直觀的做法就是追蹤前面已經(jīng)用過的詞,這樣就能避免或者說一定程度上減緩重復。
(2) 解法
具體怎么做呢,就是利用一個coverage vector,綜合計算每個詞在當前時間步前受到的總的關(guān)注度。這里呢,主要就是累加各個時間步的 attention score:
這個可以這么理解:pointer的部分不就是利用attention score 來選詞的嗎(選 attention score 大的詞),所以我把這個記住,然后加一個損失懲罰來懲罰選詞的重復性:
顯然只有 attention 和 coverage vector 在每一個位置上都極大差異,這個損失才能最?。ㄓ猩辖绲膿p失)。所以這個損失可以避免attention的重復:也就是當前時間步盡可能被忽視在當前時間步之前受關(guān)注度大的詞(極大可能已經(jīng)被選過的詞)。
此外,對于generator部分,我們可以動的就是改進attention的計算:
每一步,把先前的這個coverage vector考慮進去,讓它起作用:期望能夠生成不一樣的attention score, 從而產(chǎn)生不一樣的context vector,進而在解碼生成詞的時候不一樣。
最終每一步的損失即為兩部分損失和,一部分為抽取式的,另一部分為生成式的負對數(shù)似然:
而總的損失即為:
總結(jié)
好了,關(guān)于生成式摘要論文 pointer-generator Networks 的內(nèi)容就到這里了。如果本文對你有幫助的話,歡迎點贊&在看&分享,這對我繼續(xù)分享&創(chuàng)作優(yōu)質(zhì)文章非常重要。感謝??!
往期精彩回顧
適合初學者入門人工智能的路線及資料下載 (圖文+視頻)機器學習入門系列下載 中國大學慕課《機器學習》(黃海廣主講) 機器學習及深度學習筆記等資料打印 《統(tǒng)計學習方法》的代碼復現(xiàn)專輯 機器學習交流qq群955171419,加入微信群請掃碼
