引言
文本生成類任務(wù)應(yīng)用場景廣泛,挑戰(zhàn)性強(qiáng),隨著Attention-Seq2seq,Copy-Net,GPT這類極具影響力的工作出現(xiàn),以及CNN/DM,LCSTS這樣大規(guī)模生成類數(shù)據(jù)集的提出,生成類任務(wù)的熱度也逐漸攀升,ACL2019僅摘要生成就有20余篇(劉鵬飛博士對此做了非常詳盡的總結(jié)),不過其成熟度還遠(yuǎn)不及文本匹配,實(shí)體識(shí)別這類任務(wù),生成結(jié)果無關(guān)重復(fù),丟失重點(diǎn)的現(xiàn)象依舊容易出現(xiàn)。本文基于摘要生成,重點(diǎn)考慮如何幫助模型生成特定領(lǐng)域的知識(shí)點(diǎn),并簡要介紹一些用于應(yīng)對無關(guān)重復(fù)這類退化現(xiàn)象的方案。
基礎(chǔ)生成
在語料充分時(shí),神經(jīng)網(wǎng)絡(luò)"理解"文本句式的能力很強(qiáng),生成結(jié)果也相對流暢,tensor2tensor這類成熟開源項(xiàng)目效果很好。但實(shí)際場景下數(shù)據(jù)量可能有限,開源項(xiàng)目的潛力不易發(fā)揮,Transformer也未必優(yōu)于LSTM,因此,我們?nèi)匀贿x擇基于LSTM的經(jīng)典seq2seq結(jié)構(gòu)。此外,受2015年pointer-net啟發(fā),2016年的copy-net讓模型對文本段中的oov不再束手無策,在此基礎(chǔ)上,google次年發(fā)布的pointer-generator大大簡化了copy機(jī)制的過程,同時(shí)提出了coverage機(jī)制應(yīng)對生成重復(fù)問題,CNN/DM數(shù)據(jù)集也出自本文。對比一些開源項(xiàng)目后,我們也以本文結(jié)構(gòu)作為baseline。
Get To The Point: Summarization with Pointer-Generator Networks
本文模型結(jié)構(gòu)簡潔,思路清晰,與基礎(chǔ)的seq2seq比較非常方便,在這兩年很多摘要生成工作中都作為baseline出現(xiàn),表現(xiàn)不俗。作為一個(gè)子任務(wù)工作,項(xiàng)目star已達(dá)1.5k+,也說明一定影響力。

文中用attention作為分布的方法,就源于2015年的pointer-net:

Pointer-net直接用attention結(jié)果a^t作為分布預(yù)測生成點(diǎn),生成結(jié)果必定出現(xiàn)在原文中。所以這種方法可以讓模型生成原文中出現(xiàn)的OOV詞,另外還可以強(qiáng)化部分詞在分布中的概率。從筆者的實(shí)驗(yàn)來看,在數(shù)據(jù)量有限時(shí),seq2seq能力欠佳,疊加attention帶來的收益相當(dāng)可觀。
此外,本文所用的coverage機(jī)制指的是用covloss來懲罰重復(fù)現(xiàn)象,即:

不難理解,c就是之前attention分布的疊加,所以之前的重復(fù)位置i會(huì)強(qiáng)化向量c的第i維,顯然累積分布越分散covloss就越小,這樣,covloss就起到了懲罰作用。
融入實(shí)體知識(shí)
知識(shí)的表示和融合可以說是幾乎所有NLP任務(wù)的擴(kuò)展方向,畢竟完全依賴神經(jīng)網(wǎng)絡(luò)黑箱潛力的方向即便可行,恐怕也因計(jì)算資源限制將多數(shù)團(tuán)隊(duì)拒之門外(例如Google最新的 T5)另外我們也認(rèn)為,特別對于很多垂直領(lǐng)域,專業(yè)知識(shí)帶來的收益是很大的。在醫(yī)療方向的摘要生成上,我們同樣希望能借助實(shí)體知識(shí)提升模型能力。
其實(shí)考慮實(shí)體知識(shí)特征的生成類工作已有不少了,最容易想到的大致有實(shí)體,模版以及主題,下面將簡要介紹與這三種相關(guān)的工作。
Neural Question Generation from Text- A Preliminary Study
無論是依靠知識(shí)圖譜,還是借助BERT類模型在NER任務(wù)上的良好表現(xiàn),實(shí)體特征的獲取應(yīng)該都很容易實(shí)現(xiàn)。在文本分類相關(guān)任務(wù)中,融合外部特征的常見做法,就是編碼這些特征,然后選擇不同的encoding層做concat,本文在問題生成任務(wù)中,對這類融合方式做了實(shí)驗(yàn)對比,模型結(jié)構(gòu)上除了加入copy機(jī)制外,沒有更多值得特別注意的改變。不過本文對concat各種特征做了實(shí)驗(yàn)比較,作者選取了word case,POS,NER,answer-tag作為額外特征,結(jié)果在下表中顯示:

其中有幾處指標(biāo)變化值得關(guān)注,首先NQG+表示增加了copy機(jī)制,與NQG對比可見提升比較明顯;此外下面與NQG對比,NER,POS,Case這三種的下降都不明顯,似乎說明concat這幾種特征效果并不好;最后Answer這一項(xiàng)效果顯著,這是作者用類似NER的tag標(biāo)識(shí)了問題中答案的部分,似乎這一特征起到了決定性的作用。
這樣看來,直接concat特征,把麻煩交給編碼器的思路并不可行,而影響巨大的answer特征也許是起到了"過濾"的作用,我們知道,生成摘要就是組織關(guān)鍵信息,直覺上過濾無用信息應(yīng)該對生成模型有所幫助,或許借助知識(shí)特征進(jìn)行過濾的思路值得試試。
BiSET: Bi-directional Selective Encoding with Template for Abstractive Summarization
模版往往是抽取式模型常用的方式,本文則是提出了利用模版過濾原文編碼特征的方法。

思路和實(shí)現(xiàn)都很直白,就是常見的加入gate單元計(jì)算概率。圖中的(b)就是(a)中的Selective模塊,對輸入文本段和模版分別編碼,然后構(gòu)造兩個(gè)可訓(xùn)練的gate單元計(jì)算權(quán)重,最后的z就是過濾后的輸入編碼。

本文提供了另一個(gè)用外部特征進(jìn)行過濾的思路,模型結(jié)構(gòu)并不復(fù)雜,但構(gòu)造模版并不輕松,需要結(jié)合應(yīng)用場景考慮。相比之下,下面這種方法簡單粗暴,卻也能帶來不錯(cuò)的效果。
Multi-Source Pointer Network for Product Title Summarization
當(dāng)你用了pointer generator,又考慮融入實(shí)體知識(shí)特征時(shí),就會(huì)自然想到這篇文章的做法。既然可以用attention作為分布強(qiáng)化原文中詞的概率,那用在實(shí)體知識(shí)特征上當(dāng)然也沒問題。

特別對于垂直領(lǐng)域語料,模型準(zhǔn)確生成一個(gè)領(lǐng)域?qū)嶓w詞的價(jià)值遠(yuǎn)大于生成流暢的廢話,本文是用于生成商品描述,我們則是用在醫(yī)療數(shù)據(jù)集上,目的都是讓生成結(jié)果盡可能涵蓋關(guān)鍵信息。相比于上面concat的做法,這里再用一次attention疊加的效果更明顯。

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">實(shí)例-1</figcaption>

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">實(shí)例-2</figcaption>

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">實(shí)例-3</figcaption>
上面是pointer generator加實(shí)體attention疊加的生成結(jié)果,訓(xùn)練數(shù)據(jù)集不足時(shí),通過抽取實(shí)體輔助生成,模型可以相對準(zhǔn)的抓住原文的關(guān)鍵信息。
不過這種方法有一個(gè)麻煩,就是受實(shí)體特征的影響很大,畢竟關(guān)鍵詞和實(shí)體詞還是有差別的,基于BERT的NER模型可以覆蓋相對完整的實(shí)體,但無法識(shí)別出哪些是關(guān)鍵詞,而關(guān)鍵詞的重要性更大于實(shí)體詞,丟失了關(guān)鍵詞很容易誤導(dǎo)模型。因此,單純的NER并不滿足。
我們考慮主題的思路,但在pointer-generator的結(jié)構(gòu)下,需要詞一級的準(zhǔn)確性,LDA并不滿足,之后我們嘗試了上一篇blog內(nèi)介紹的方法(應(yīng)用知識(shí)圖譜的文本標(biāo)簽方法),在知識(shí)圖譜和主題模型的共同幫助下,相比于僅用BERT,抽取關(guān)鍵詞效果更好,生成結(jié)果錯(cuò)誤生成/丟失關(guān)鍵詞的現(xiàn)象也有所緩解。
退化現(xiàn)象
重復(fù)一直是文本生成類任務(wù)的通病,這在一些文章中被稱為退化,我們也在尋找合適的應(yīng)對方案,coverage機(jī)制就是一種方案,但并不足夠,下面的工作介紹了另一種損失函數(shù),在詞和子句(ngram)兩個(gè)點(diǎn)共同發(fā)力應(yīng)對退化現(xiàn)象。
NEURAL TEXT DEGENERATION WITH UNLIKELIHOOD TRAINING
本文提出用Unlikelihood損失來懲罰重復(fù)生成(解決退化現(xiàn)象),其實(shí)基本通過標(biāo)題就能想到,Likelihood是用來預(yù)測詞表中的下一個(gè)生成詞,Unlikelihood就是預(yù)測不想生成的詞。

沒錯(cuò),最后損失函數(shù)就長這樣,有一個(gè)詞表表示不想生成的詞,已經(jīng)生成的詞在里面可以緩解重復(fù)現(xiàn)象,還能根據(jù)不同需求加入一些詞避免錯(cuò)誤。在詞級別的Unlikelihood基礎(chǔ)上,作者還設(shè)計(jì)子句級的Unlikelihood,形式也基本一樣,就是避免重復(fù)n-gram,各位感興趣可以閱讀文章附錄的詳細(xì)分析。
The Curious Case of Neural Text Degeneration
雖然本文相關(guān)的實(shí)驗(yàn)均基于續(xù)寫類任務(wù),但仍極具參考價(jià)值。該團(tuán)隊(duì)重點(diǎn)關(guān)注生成結(jié)果的多樣性,并提出新生成方法,作者對比了beam search生成的概率分布與真人自然語言分布的差異,指出這種生成策略是產(chǎn)生重復(fù)現(xiàn)象的重要原因。

大家知道beam search可以看作視野更開闊的貪心搜索,即便是有窗口K,每一步仍然是選擇累計(jì)概率高的詞作為輸出,正如圖中黃線所示,這與藍(lán)線表示的自然語言差異巨大,通常人們產(chǎn)生的語句是由高頻日常用語和特定場景的低頻詞共同組成的??梢源笾抡J(rèn)為,beam search無法產(chǎn)生足夠豐富的語句。
此外,作者還表示,傾向于最大概率的生成策略不僅在每一步丟失豐富性,還會(huì)累積地強(qiáng)化重復(fù)現(xiàn)象。不難想象,正因?yàn)橹貜?fù)的n-gram概率高,現(xiàn)有模型才容易變成結(jié)巴。

針對上述問題,作者提出用Nucleus Sampling替換主流的beam search作為生成策略。不同于之前的搜索方法,采樣方法希望通過增加隨機(jī)性來提高生成的豐富性,同時(shí)要注意降低生成低頻詞帶來的語句錯(cuò)誤。Nucleus Sampling又稱Top-p Sampling,具體的,先設(shè)定一個(gè)概率闕值p ,將現(xiàn)有詞概率由大到小排序,取累積概率值達(dá)到p的前N個(gè)詞,重新計(jì)算softmax再從中采樣。對比Top-k采樣策略,Top-p限制了生成低頻詞帶來的語句錯(cuò)誤,這種方法也被應(yīng)用在GPT-2生成上,感興趣的讀者可以參考其中的參數(shù)設(shè)定。
Non-Autoregressive
LevT: Levenshtein Transformer
我們一直奢望找到讓生成模型更靈活的方法,傳統(tǒng)的自回歸模型,無論如何融入特征,基本框架都是編解碼器提供歷史向量編碼,輸出端計(jì)算詞典概率p(x_t|x_old),能否讓模型對輸出端的token有更強(qiáng)的控制呢?本文提供了一種大膽的思路,從標(biāo)題已經(jīng)能看出,作者把編Levenshtein距離的操作和Transformer融合在一起做生成模型,輸出端不僅要決定詞本身,還要決定對詞施加的操作。

LevT模型包含插入和刪除兩種操作,用Levenshtein距離作為回報(bào)函數(shù)指導(dǎo)模型選擇操作。具體如上圖所示,對于刪除操作,模型僅需要做二分類抉擇,而對插入操作,模型首先需要插入占位符,再從詞典中選擇插入詞,下式描述了操作策略。

作者提出用模仿學(xué)習(xí)訓(xùn)練該策略模型。構(gòu)造一個(gè)專家策略,從模型策略中采樣序列作為輸入,交給專家策略判斷操作。專家策略有兩種構(gòu)造方法,一種是構(gòu)造一個(gè)oracle,每次接收真實(shí)序列,返回最優(yōu)操作a*,另一種可以訓(xùn)練一個(gè)字回歸模型作為teacher,用beam search的生成結(jié)果作為真實(shí)序列。
個(gè)人認(rèn)為,即便是在Non-autoregressive領(lǐng)域內(nèi),這應(yīng)該也算是創(chuàng)新性非常強(qiáng)的工作了,可以對生成結(jié)果進(jìn)行修改,操作策略也能自主學(xué)習(xí),而且操作之間可以并行,速度并不慢。
總結(jié)
數(shù)據(jù)量有限時(shí),pointer-generator可能比復(fù)雜的baseline或開源項(xiàng)目更適合,在此基礎(chǔ)上,融合實(shí)體知識(shí)有更多可以參考的工作,此外結(jié)合實(shí)體知識(shí)后分詞和詞典整理之類的細(xì)節(jié)不容忽視。相比于語義匹配這類相對成熟的任務(wù),文本生成類工作更難達(dá)到一個(gè)可以接受的結(jié)果,目前的模型都無法完全避免生成重復(fù),生成錯(cuò)誤,丟失關(guān)鍵點(diǎn)等問題,在應(yīng)用場景中。如何應(yīng)對重復(fù)問題,提高生成多樣性依舊老生常談但成效有限,另外Non-autoregressive方向有一些非常新穎的工作,除了上面提到的LevT外,還有一些從生成位置入手的工作值得學(xué)習(xí),BERT之后的XLNet也針對Non-autoregressive有獨(dú)特的設(shè)計(jì),可見這一領(lǐng)域的潛力,最后評價(jià)指標(biāo)一直是生成領(lǐng)域的弱項(xiàng),也為應(yīng)用。
引用
[1] Pointer Networks
[2] Incorporating Copying Mechanism in Sequence-to-Sequence Learning
[3] Get To The Point: Summarization with Pointer-Generator Networks
[4] Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
[5] Neural Question Generation from Text: A Preliminary Study
[6] BiSET: Bi-directional Selective Encoding with Template for Abstractive Summarization
[7] Multi-Source Pointer Network for Product Title Summarization
[8] 知識(shí)圖譜如何應(yīng)用到文本標(biāo)簽化算法中
[9] Neural Text Generation with Unlikelihood Training
[10] The Curious Case of Neural Text Degeneration
[11] Levenshtein Transformer