李 想,王衛(wèi)兵,尚學(xué)達
(哈爾濱理工大學(xué)計算機科學(xué)與技術(shù)學(xué)院,哈爾濱 150080)
(?通信作者電子郵箱wangweibing163@163.com)
面臨著信息過載問題的日益嚴重,對于各類文本信息進行“降維”處理顯得格外重要,其中文本摘要是一個有效的解決方式。文本摘要旨在將文本或文本集合轉(zhuǎn)換為包含關(guān)鍵信息的簡短摘要。按照輸出類型可分為抽取式摘要和生成式摘要。抽取式摘要從源文檔中抽取關(guān)鍵句和關(guān)鍵詞組成摘要,摘要全部來源于原文。生成式摘要根據(jù)原文,允許生成原文本中沒有的詞語或是進行同義替換來生成摘要。
目前工業(yè)領(lǐng)域所使用的抽取式摘要已經(jīng)愈發(fā)成熟并得到了廣泛的應(yīng)用,與之相比生成式摘要難度更大且更具有挑戰(zhàn)性。文獻[1]提出的Seq2Seq(Sequence-to-Sequence)模型在生成式任務(wù)中取得了重大突破,隨后基于長短時記憶(Long Short Term Memory,LSTM)神經(jīng)網(wǎng)絡(luò)的Seq2Seq模型在生成式摘要的任務(wù)中也得以廣泛應(yīng)用。隨著文獻[2]模型的提出,Transformer 在機器翻譯等任務(wù)中的表現(xiàn)超越了基于LSTM 實現(xiàn)的Seq2Seq 模型,隨后文獻[3]也證明了Transformer 在抽取式的摘要中同樣擁有良好的表現(xiàn),所以本文旨在驗證采用Transformer 來實現(xiàn)生成式文本摘要任務(wù)是否可以取得更好的結(jié)果。
然而無論是Transformer還是Seq2Seq,在生成式任務(wù)中都面臨著兩個相同的問題:第一點是生成的文本中含有大量的重復(fù)詞,第二點是生成的詞表無法覆蓋(Out Of Vocabulary,OOV)全部的生成詞匯,從而導(dǎo)致了生成的文本準確率降低。
本文基于文獻[4-5]在機器翻譯任務(wù)出現(xiàn)重復(fù)的問題所使用的Coverage Vector 同樣適用于摘要任務(wù)中,實驗結(jié)果表明引入Coverage 機制減少了重復(fù)率。文獻[6]提出的CopyNet可以解決在機器翻譯中所遇到的詞表無法覆蓋(OOV)的問題,同樣本文采用類似的方法指針生成網(wǎng)絡(luò)(Pointer Generator Network)來解決摘要中OOV 的問題。本文的模型基于Pointer Generator Network 同時具備生成新的詞以及在原文中拷貝詞的能力,如果待生成詞匯生成詞表中無法找到,便通過指針在原文中復(fù)制一詞。
Transformer 模型摒棄了以往深度學(xué)習(xí)任務(wù)中所使用到的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),其核心部分是注意力機制。注意力機制緩解了RNN 以往解決自然語言處理(Natural Language Processing,NLP)任務(wù)的兩點不足:首先RNN 是一個自回歸模型,時間片t的計算依賴于t-1 時刻的計算結(jié)果,這樣忽略的t時刻之后的信息是無法捕捉到的,同時也限制了模型并行計算的能力。第二點是順序計算的過程會信息丟失,尤其對于長文本任務(wù)捕捉全文信息的能力不足。雖然針對RNN 的缺陷提出了LSTM 及雙向LSTM 用來緩解長期依賴問題以及捕捉t時刻前后的位置信息,但是在機器翻譯、問答系統(tǒng),文本摘要領(lǐng)域Transformer的表現(xiàn)都要優(yōu)于基于RNN的Seq2Seq模型。
Transformer 分為編碼器和解碼器兩個部分。編碼器部分負責(zé)編碼語義信息,經(jīng)過詞嵌入表達將詞轉(zhuǎn)換成詞向量后,經(jīng)過多頭注意力機制來獲取每個詞與當(dāng)前句子內(nèi)的其他詞的語意相關(guān)性。首先利用注意力機制來計算當(dāng)前詞與其他詞的得分分布,再通過softmax 函數(shù)進行一次映射,經(jīng)過映射后的得分越高說明兩個詞的相關(guān)性越強。Transformer的研究者提出多頭注意力機制通過將詞向量的維度切分,并行做注意力分布的計算從而加強語義信息的解析,計算式為:
其中:Wq、Wk、Wv是3 個可學(xué)習(xí)的參數(shù)矩陣;dk為詞向量的維度,XEncoderInput為Encoder 輸入的詞向量,而自注意力機制中作線性變換的向量XEncoderInput來源相同,這也是和后續(xù)解碼器中的編碼器與解碼器的多頭注意力機制(Encoder-Decoder Multi-Head Attention)不同之處;at是通過自注意力計算后得到的每個詞對同一句話中所有詞的注意力分布;Context_vector是編碼器階段輸出的隱向量。
在解碼器結(jié)構(gòu)中進行兩次注意力計算:第一次是利用覆蓋的多頭自注意力機制(Mask Multi-Head Self-Attention)對解碼器中的輸入信息進行語意解析,然后通過Encoder-Decoder Multi-Head Attention 解碼由編碼器中輸出的信息,這里的Encoder-Decoder Multi-Head Attention 計算式與式(1)~(2)中所給相同,但是做點積的元素略有不同:
其中:Context_vector是編碼器階段的輸出結(jié)果,而Xt則是解碼器的階段中的輸入信息經(jīng)過Mask Multi-Head Self-Attention后得到的輸出結(jié)果。此處的at是生成的詞向量對編碼器中輸出的Context_vector的注意力分布,Decoder_outputt是t時刻Encoder-Decoder Multi-Head Attention的輸出。
將上面得到的Decoder_outputt,經(jīng)過兩層線性變換及softmax函數(shù)得到了最終的詞表分布Pvocab:
其中:W'、W、b、b'都是可學(xué)習(xí)的參數(shù);Pvocab是詞表中所有單詞的概率分布。利用最終的概率分布得到當(dāng)前時刻預(yù)測的詞w:
本文將上述模型部分作為實驗中的Baseline 模型進行對比,模型結(jié)構(gòu)如圖1所示。
圖1 Transformer摘要模型結(jié)構(gòu)Fig.1 Structure of Transformer-based summarization model
Pointer Network 最開始被Vinyals等[7]所提出,目前被廣泛應(yīng)用于NLP 任務(wù)中,如機器翻譯[8]和語言模型[9]。本文所提出的Pointer Generator Network 是介于Transformer 和Pointer Network之間的混合形式。
Pointer Generator Network 所解決的問題是經(jīng)過Pvocab得到的詞最終詞表沒有覆蓋,也就是生成式任務(wù)中的OOV 問題。因此本文定義一個概率分布Pgen,將上面章節(jié)得到的Decoder_outputt、at,以及t時刻編碼器中的輸入Xt進行拼接(Concat)后進行一層線性變換后,再經(jīng)過sigmoid 函數(shù)進行一次映射得到[0,1]區(qū)間的映射:
其中W、b是可學(xué)習(xí)參數(shù)。
在生成摘要的過程中,是通過Pvocab在詞表中生成新的詞匯還是根據(jù)得到的文本的概率分布at在原文中拷貝一個相關(guān)性最大的詞,本文可以通過Pgen進行一次軟性選擇:
如果w是一個詞表沒有覆蓋的詞,則Pvocab(w)的值為0,相反如果w并沒有在原文本中出現(xiàn),則at為0。解決OOV 的能力是本文模型的一個重大優(yōu)勢,本文會在后續(xù)實驗章節(jié)中將其與本文的baseline 模型的結(jié)果作比較。Transformer 摘要模型的主要模塊如圖2所示。
圖2 Transformer+Pointer Network 摘要模型流程Fig.2 Flow chart of Transformer-based summarization model with Pointer Network
在生成式任務(wù)中,采用注意力機制的模型產(chǎn)生重復(fù)問題是一個常見的問題,尤其是產(chǎn)生多個句子的任務(wù)中。這一點文獻[10-12]也都有提及。因為在按時間片t去逐個生成詞時,很有可能連續(xù)幾個時間片得到最高分的都是同一個詞,從而導(dǎo)致了這個得分最高的詞不斷地重復(fù),影響到語意的通順性。
為此本文嘗試在損失函數(shù)中加入覆蓋損失(Coverage Loss)去懲罰不斷重復(fù)位置。在本文的模型里,首先定義向量ct,它所表達的含義是t時刻之前t-1時刻分布的累加和:其中,ct所表示的是前t-1 時刻的詞匯分布,即到t時刻位置這些單詞從注意力機制中獲得的覆蓋程度(預(yù)測t時刻的單詞時,讓模型看到前t-1 時刻中原文本注意力分布的情況)。初始化c0是一個零向量,因為第1個時刻沒有文本被覆蓋。
本文希望模型更多地注意到之前沒有關(guān)注到的信息,所以在ct、at之間取得一個最小值:
其中:at是t時刻的注意力分布,i代表了詞向量的維度;min表示t時刻第i維詞向量在和中取最小。在cov_loss中加入超參數(shù)λ,并得到模型最終的損失函數(shù):
模型在生成概率分布之后,需要到詞表中進行查詢,在實驗中本文使用束搜索(Beam Search)算法[13]進行查找。
由于模型最終可以學(xué)習(xí)到t時刻的條件概率分布,即p(yt|x,y1,y2,…,yt-1),并且該研究任務(wù)的目標是根據(jù)編碼器階段的輸出x以及前t-1 時刻所生成的詞尋找到t時刻生成概率最大的詞,所以目標函數(shù)可表示為:
因為概率值都是在[0,1]內(nèi),連乘會導(dǎo)致數(shù)值下溢,為了方便計算及存儲數(shù)值,取目標函數(shù)的對數(shù)值如下:
對于一個較長的句子,不斷地對概率值進行連乘會得到一個很小的值,這樣目標函數(shù)會傾向于生成一個較短的摘要。雖然上文中將概率分布取了對數(shù)值,但是數(shù)值的分布區(qū)間是小于0 的,多個負數(shù)進行累加同樣會出現(xiàn)長文本生成較短摘要的問題。所以本文對目標函數(shù)進一步進行優(yōu)化,將目標函數(shù)通過除以輸出文本的長度的方式進行了歸一化處理。最終可以取得每個單詞的概率對數(shù)的平均值,很明顯地減少了對輸出長的結(jié)果的懲罰。在實驗中本文加入了一個超參數(shù)軟性因子α,作為輸出文本長度Ty的指數(shù):
這天一大早,我往那群“倒數(shù)前十”中間一坐,盡量忽視四周飽含各種意味的小眼神,表現(xiàn)得從容而友好??晌业膬?nèi)心實在是無比尷尬,感覺自己就像一個明晃晃的“間諜”。其實,作為同班同學(xué),我們也在一起玩過,說不熟也不可能,但實在是交往不深。我自顧自地跟成績較勁,他們墊底墊得默默無聞,大家相見客客氣氣?,F(xiàn)在我這一來,一下子打破了后半間教室的“和諧氛圍”——說“一粒老鼠屎壞了一鍋粥”吧,真心不合適;說“鶴立雞群”吧,勉強維護了我的自尊。
基于貪心搜索(Greedy Search)方法在生成每個詞時都挑選概率最大的詞作為當(dāng)前時刻的最優(yōu)解,但是在生成式任務(wù)中概率最大的詞通常不是最優(yōu)的表達方式。
Beam Search 算法可以看作是對于Greedy Search 的改進算法,相較于貪心算法擴大了搜索空間,但是時間開銷又遠小于窮舉算法,可以看作是二者的折中方案。
Beam Search 存在一個超參數(shù)beam size,設(shè)為k。第一個時間步長,選取當(dāng)前條件概率最大的k個詞,當(dāng)作候選輸出序列的第一個詞。之后的每個時間步長,基于上個步長的輸出序列,挑選出所有組合中條件概率最大的k個,作為該時間步長下的候選輸出序列。始終保持k個候選值,最后從k個候選值中挑出最優(yōu)的。當(dāng)k=1 時,Beam Search 等價于Greedy Search。
本文將Rouge 函數(shù)[14]作為模型生成的摘要的評價標準。ROUGE-N函數(shù)計算式如下:
其中:c是生成的摘要文本;Sref是參考摘要;match(gramn)是在生成的摘要中n元詞組(N-gram)出現(xiàn)的次數(shù);count(gramn)是N-gram在參考摘要中出現(xiàn)的次數(shù)。
ROUGE-N 是從N-gram 維度去比較參考摘要和生成摘要,ROUGE-L是從最長子序列的維度去比較的:
其中:LCS(X,Y)表示X、Y最長公共子序列的長度,X表示參考摘要,Y表示生成摘要;m和n分別表示X和Y的長度;Rlcs、Plcs分別表示召回率和準確率,β=Rlcs/Plcs。
本文實驗采用的是Hu 等[15]提供的新浪微博數(shù)據(jù)集LSCST(Large Scale Chinese Short Text summarization dataset)。該數(shù)據(jù)集以微博短文及其摘要作為文本摘要對。整個數(shù)據(jù)集分為訓(xùn)練、驗證和測試三部分。數(shù)據(jù)集中包含了人工對摘要和文本相關(guān)程度的打分(1~5分),經(jīng)過打分不低于3分的篩選和采樣,最終每個部分分別保留20 000、5 000和700條數(shù)據(jù)。
實驗過程中模型遵循標準的Transformer 結(jié)構(gòu),使用了6層編碼器和解碼器,Multi-Head Attention 中頭使用了8 個。本文實現(xiàn)了Transformer 研究中所建議的衰減學(xué)習(xí)率,在熱啟動時學(xué)習(xí)率線性增加,之后隨著時間衰減學(xué)習(xí)率。
Dropout 設(shè)置為0.3,batch size 設(shè)置為32,最大原文輸入長度設(shè)置為512,生成摘要的長度設(shè)置為100,本文使用的損失函數(shù)是交叉熵損失函數(shù)。對模型一共訓(xùn)練了400個epoch。
作為對比,本文將Transformer 作為baseline,第二個對比模型是Transformer 中加入Point Generator Network,第三個對比模型是Transformer 中加入Pointer Generator Network 和Coverage Loss。其中Coverage Loss 中的超參數(shù)λ最終設(shè)置為1。
以一條數(shù)據(jù)為例,原文內(nèi)容為:春運期間,鹽城交警加大對客運車輛的檢查力度大力開展“兩客一危”專項整治行動2 月17 日14 時左右鹽城交警高速三大隊在鹽城北收費站對一輛號牌為蘇mj3940 駛進行檢查時發(fā)現(xiàn)了客車狹小的過道里竟擠滿了人,經(jīng)過核查相關(guān)證件得知該車核載人數(shù)為53 人而車上竟有61 人超員8 人!在對車輛進行檢查時民警發(fā)現(xiàn)車輛的前擋風(fēng)玻璃上竟還有一道裂縫!民警楊星隨后責(zé)令車輛駁載通知泰興市運輸總公司安全主管人員24 小時內(nèi)到鹽城交警高速三大隊接受約談。千萬不要認為“擠一擠沒事”下面這位網(wǎng)友的做法就值得表揚鹽城交警也迅速反應(yīng),對涉事車輛進行了處罰不要為了趕時間而乘坐超員車不要認為擠一擠沒有事不要認為自己有座就漠不關(guān)心拒絕超員車,平安回家路。
摘要內(nèi)容為:核定53人,實載61人,前擋風(fēng)玻璃竟然還有一道裂縫!你真的認為乘坐超員車只是“擠一擠沒事兒”嗎?安全問題不容忽略!
針對該短文各模型的結(jié)果展示如表1所示。
表1 Transformer及其優(yōu)化模型的摘要結(jié)果對比Tab.1 Comparison of summarization results of Transformer and its optimization models
通過對比實驗中得出的結(jié)果可知,Baseline得出的結(jié)果中存在大量的無法覆蓋的字符([UNK]),表明詞表沒有覆蓋的信息,這類無法覆蓋的詞大多是成語、人名或者一些網(wǎng)絡(luò)自造詞,這些詞語通過預(yù)訓(xùn)練語料也是難以覆蓋全面的。同時Baseline的結(jié)果中也存在大量的重復(fù)字詞,由于生成長度的限制如果摘要中出現(xiàn)了大量的重復(fù)無意義的信息,必然會導(dǎo)致最后生成的摘要不完整,從而影響語意的通順。
引入Pointer Generator Network 后的實驗結(jié)果表明,解決了因為詞表無法覆蓋從而產(chǎn)生[UNK]的問題,語意大致連貫。但是由于重復(fù)造成的語意斷層、前后銜接不連貫的問題仍然存在。
引入Coverage Loss 后的實驗結(jié)果表明,Coverage Loss 在一定程度上可以解決重復(fù)問題,結(jié)果中重復(fù)頻次大幅度減小,語意連貫性也顯著增強,所以對比實驗結(jié)果表明加入Pointer Generator Network和Coverage Loss后作用明顯。
ROUGE函數(shù)評價不同模型的得分如表2所示。
表2 Transformer及其優(yōu)化模型的摘要結(jié)果ROUGE得分對比 單位:%Tab.2 Comparison of ROUGE scores of summarization results of Transformer and its optimization models unit:%
本文所提出的基于Transformer 實現(xiàn)文本摘要的模型,分別利用Pointer Generator Network 以及Coverage Loss 解決了OOV、表達重復(fù)以及不準確的問題。實驗結(jié)果表明,每加入新的模塊后得分都會相較之前有所提高,從驗證集的結(jié)果來看,每加入新的模塊得到的摘要內(nèi)容也更加具有可讀性,這也驗證了本文后續(xù)加入的兩個模塊在Baseline 的基礎(chǔ)上提升了模型的性能。