李 想,王衛兵,尚學達
(哈爾濱理工大學計算機科學與技術學院,哈爾濱 150080)
(?通信作者電子郵箱wangweibing163@163.com)
面臨著信息過載問題的日益嚴重,對于各類文本信息進行“降維”處理顯得格外重要,其中文本摘要是一個有效的解決方式。文本摘要旨在將文本或文本集合轉換為包含關鍵信息的簡短摘要。按照輸出類型可分為抽取式摘要和生成式摘要。抽取式摘要從源文檔中抽取關鍵句和關鍵詞組成摘要,摘要全部來源于原文。生成式摘要根據原文,允許生成原文本中沒有的詞語或是進行同義替換來生成摘要。
目前工業領域所使用的抽取式摘要已經愈發成熟并得到了廣泛的應用,與之相比生成式摘要難度更大且更具有挑戰性。文獻[1]提出的Seq2Seq(Sequence-to-Sequence)模型在生成式任務中取得了重大突破,隨后基于長短時記憶(Long Short Term Memory,LSTM)神經網絡的Seq2Seq模型在生成式摘要的任務中也得以廣泛應用。隨著文獻[2]模型的提出,Transformer 在機器翻譯等任務中的表現超越了基于LSTM 實現的Seq2Seq 模型,隨后文獻[3]也證明了Transformer 在抽取式的摘要中同樣擁有良好的表現,所以本文旨在驗證采用Transformer 來實現生成式文本摘要任務是否可以取得更好的結果。
然而無論是Transformer還是Seq2Seq,在生成式任務中都面臨著兩個相同的問題:第一點是生成的文本中含有大量的重復詞,第二點是生成的詞表無法覆蓋(Out Of Vocabulary,OOV)全部的生成詞匯,從而導致了生成的文本準確率降低。
本文基于文獻[4-5]在機器翻譯任務出現重復的問題所使用的Coverage Vector 同樣適用于摘要任務中,實驗結果表明引入Coverage 機制減少了重復率。文獻[6]提出的CopyNet可以解決在機器翻譯中所遇到的詞表無法覆蓋(OOV)的問題,同樣本文采用類似的方法指針生成網絡(Pointer Generator Network)來解決摘要中OOV 的問題。本文的模型基于Pointer Generator Network 同時具備生成新的詞以及在原文中拷貝詞的能力,如果待生成詞匯生成詞表中無法找到,便通過指針在原文中復制一詞。
Transformer 模型摒棄了以往深度學習任務中所使用到的卷積神經網絡(Convolutional Neural Network,CNN)和循環神經網絡(Recurrent Neural Network,RNN),其核心部分是注意力機制。注意力機制緩解了RNN 以往解決自然語言處理(Natural Language Processing,NLP)任務的兩點不足:首先RNN 是一個自回歸模型,時間片t的計算依賴于t-1 時刻的計算結果,這樣忽略的t時刻之后的信息是無法捕捉到的,同時也限制了模型并行計算的能力。第二點是順序計算的過程會信息丟失,尤其對于長文本任務捕捉全文信息的能力不足。雖然針對RNN 的缺陷提出了LSTM 及雙向LSTM 用來緩解長期依賴問題以及捕捉t時刻前后的位置信息,但是在機器翻譯、問答系統,文本摘要領域Transformer的表現都要優于基于RNN的Seq2Seq模型。
Transformer 分為編碼器和解碼器兩個部分。編碼器部分負責編碼語義信息,經過詞嵌入表達將詞轉換成詞向量后,經過多頭注意力機制來獲取每個詞與當前句子內的其他詞的語意相關性。首先利用注意力機制來計算當前詞與其他詞的得分分布,再通過softmax 函數進行一次映射,經過映射后的得分越高說明兩個詞的相關性越強。Transformer的研究者提出多頭注意力機制通過將詞向量的維度切分,并行做注意力分布的計算從而加強語義信息的解析,計算式為:

其中:Wq、Wk、Wv是3 個可學習的參數矩陣;dk為詞向量的維度,XEncoderInput為Encoder 輸入的詞向量,而自注意力機制中作線性變換的向量XEncoderInput來源相同,這也是和后續解碼器中的編碼器與解碼器的多頭注意力機制(Encoder-Decoder Multi-Head Attention)不同之處;at是通過自注意力計算后得到的每個詞對同一句話中所有詞的注意力分布;Context_vector是編碼器階段輸出的隱向量。
在解碼器結構中進行兩次注意力計算:第一次是利用覆蓋的多頭自注意力機制(Mask Multi-Head Self-Attention)對解碼器中的輸入信息進行語意解析,然后通過Encoder-Decoder Multi-Head Attention 解碼由編碼器中輸出的信息,這里的Encoder-Decoder Multi-Head Attention 計算式與式(1)~(2)中所給相同,但是做點積的元素略有不同:

其中:Context_vector是編碼器階段的輸出結果,而Xt則是解碼器的階段中的輸入信息經過Mask Multi-Head Self-Attention后得到的輸出結果。此處的at是生成的詞向量對編碼器中輸出的Context_vector的注意力分布,Decoder_outputt是t時刻Encoder-Decoder Multi-Head Attention的輸出。
將上面得到的Decoder_outputt,經過兩層線性變換及softmax函數得到了最終的詞表分布Pvocab:

其中:W'、W、b、b'都是可學習的參數;Pvocab是詞表中所有單詞的概率分布。利用最終的概率分布得到當前時刻預測的詞w:

本文將上述模型部分作為實驗中的Baseline 模型進行對比,模型結構如圖1所示。

圖1 Transformer摘要模型結構Fig.1 Structure of Transformer-based summarization model
Pointer Network 最開始被Vinyals等[7]所提出,目前被廣泛應用于NLP 任務中,如機器翻譯[8]和語言模型[9]。本文所提出的Pointer Generator Network 是介于Transformer 和Pointer Network之間的混合形式。
Pointer Generator Network 所解決的問題是經過Pvocab得到的詞最終詞表沒有覆蓋,也就是生成式任務中的OOV 問題。因此本文定義一個概率分布Pgen,將上面章節得到的Decoder_outputt、at,以及t時刻編碼器中的輸入Xt進行拼接(Concat)后進行一層線性變換后,再經過sigmoid 函數進行一次映射得到[0,1]區間的映射:

其中W、b是可學習參數。
在生成摘要的過程中,是通過Pvocab在詞表中生成新的詞匯還是根據得到的文本的概率分布at在原文中拷貝一個相關性最大的詞,本文可以通過Pgen進行一次軟性選擇:

如果w是一個詞表沒有覆蓋的詞,則Pvocab(w)的值為0,相反如果w并沒有在原文本中出現,則at為0。解決OOV 的能力是本文模型的一個重大優勢,本文會在后續實驗章節中將其與本文的baseline 模型的結果作比較。Transformer 摘要模型的主要模塊如圖2所示。

圖2 Transformer+Pointer Network 摘要模型流程Fig.2 Flow chart of Transformer-based summarization model with Pointer Network
在生成式任務中,采用注意力機制的模型產生重復問題是一個常見的問題,尤其是產生多個句子的任務中。這一點文獻[10-12]也都有提及。因為在按時間片t去逐個生成詞時,很有可能連續幾個時間片得到最高分的都是同一個詞,從而導致了這個得分最高的詞不斷地重復,影響到語意的通順性。

為此本文嘗試在損失函數中加入覆蓋損失(Coverage Loss)去懲罰不斷重復位置。在本文的模型里,首先定義向量ct,它所表達的含義是t時刻之前t-1時刻分布的累加和:其中,ct所表示的是前t-1 時刻的詞匯分布,即到t時刻位置這些單詞從注意力機制中獲得的覆蓋程度(預測t時刻的單詞時,讓模型看到前t-1 時刻中原文本注意力分布的情況)。初始化c0是一個零向量,因為第1個時刻沒有文本被覆蓋。
本文希望模型更多地注意到之前沒有關注到的信息,所以在ct、at之間取得一個最小值:

其中:at是t時刻的注意力分布,i代表了詞向量的維度;min表示t時刻第i維詞向量在和中取最小。在cov_loss中加入超參數λ,并得到模型最終的損失函數:

模型在生成概率分布之后,需要到詞表中進行查詢,在實驗中本文使用束搜索(Beam Search)算法[13]進行查找。
由于模型最終可以學習到t時刻的條件概率分布,即p(yt|x,y1,y2,…,yt-1),并且該研究任務的目標是根據編碼器階段的輸出x以及前t-1 時刻所生成的詞尋找到t時刻生成概率最大的詞,所以目標函數可表示為:

因為概率值都是在[0,1]內,連乘會導致數值下溢,為了方便計算及存儲數值,取目標函數的對數值如下:

對于一個較長的句子,不斷地對概率值進行連乘會得到一個很小的值,這樣目標函數會傾向于生成一個較短的摘要。雖然上文中將概率分布取了對數值,但是數值的分布區間是小于0 的,多個負數進行累加同樣會出現長文本生成較短摘要的問題。所以本文對目標函數進一步進行優化,將目標函數通過除以輸出文本的長度的方式進行了歸一化處理。最終可以取得每個單詞的概率對數的平均值,很明顯地減少了對輸出長的結果的懲罰。在實驗中本文加入了一個超參數軟性因子α,作為輸出文本長度Ty的指數:
這天一大早,我往那群“倒數前十”中間一坐,盡量忽視四周飽含各種意味的小眼神,表現得從容而友好。可我的內心實在是無比尷尬,感覺自己就像一個明晃晃的“間諜”。其實,作為同班同學,我們也在一起玩過,說不熟也不可能,但實在是交往不深。我自顧自地跟成績較勁,他們墊底墊得默默無聞,大家相見客客氣氣。現在我這一來,一下子打破了后半間教室的“和諧氛圍”——說“一粒老鼠屎壞了一鍋粥”吧,真心不合適;說“鶴立雞群”吧,勉強維護了我的自尊。

基于貪心搜索(Greedy Search)方法在生成每個詞時都挑選概率最大的詞作為當前時刻的最優解,但是在生成式任務中概率最大的詞通常不是最優的表達方式。
Beam Search 算法可以看作是對于Greedy Search 的改進算法,相較于貪心算法擴大了搜索空間,但是時間開銷又遠小于窮舉算法,可以看作是二者的折中方案。
Beam Search 存在一個超參數beam size,設為k。第一個時間步長,選取當前條件概率最大的k個詞,當作候選輸出序列的第一個詞。之后的每個時間步長,基于上個步長的輸出序列,挑選出所有組合中條件概率最大的k個,作為該時間步長下的候選輸出序列。始終保持k個候選值,最后從k個候選值中挑出最優的。當k=1 時,Beam Search 等價于Greedy Search。
本文將Rouge 函數[14]作為模型生成的摘要的評價標準。ROUGE-N函數計算式如下:

其中:c是生成的摘要文本;Sref是參考摘要;match(gramn)是在生成的摘要中n元詞組(N-gram)出現的次數;count(gramn)是N-gram在參考摘要中出現的次數。
ROUGE-N 是從N-gram 維度去比較參考摘要和生成摘要,ROUGE-L是從最長子序列的維度去比較的:

其中:LCS(X,Y)表示X、Y最長公共子序列的長度,X表示參考摘要,Y表示生成摘要;m和n分別表示X和Y的長度;Rlcs、Plcs分別表示召回率和準確率,β=Rlcs/Plcs。
本文實驗采用的是Hu 等[15]提供的新浪微博數據集LSCST(Large Scale Chinese Short Text summarization dataset)。該數據集以微博短文及其摘要作為文本摘要對。整個數據集分為訓練、驗證和測試三部分。數據集中包含了人工對摘要和文本相關程度的打分(1~5分),經過打分不低于3分的篩選和采樣,最終每個部分分別保留20 000、5 000和700條數據。
實驗過程中模型遵循標準的Transformer 結構,使用了6層編碼器和解碼器,Multi-Head Attention 中頭使用了8 個。本文實現了Transformer 研究中所建議的衰減學習率,在熱啟動時學習率線性增加,之后隨著時間衰減學習率。
Dropout 設置為0.3,batch size 設置為32,最大原文輸入長度設置為512,生成摘要的長度設置為100,本文使用的損失函數是交叉熵損失函數。對模型一共訓練了400個epoch。
作為對比,本文將Transformer 作為baseline,第二個對比模型是Transformer 中加入Point Generator Network,第三個對比模型是Transformer 中加入Pointer Generator Network 和Coverage Loss。其中Coverage Loss 中的超參數λ最終設置為1。
以一條數據為例,原文內容為:春運期間,鹽城交警加大對客運車輛的檢查力度大力開展“兩客一危”專項整治行動2 月17 日14 時左右鹽城交警高速三大隊在鹽城北收費站對一輛號牌為蘇mj3940 駛進行檢查時發現了客車狹小的過道里竟擠滿了人,經過核查相關證件得知該車核載人數為53 人而車上竟有61 人超員8 人!在對車輛進行檢查時民警發現車輛的前擋風玻璃上竟還有一道裂縫!民警楊星隨后責令車輛駁載通知泰興市運輸總公司安全主管人員24 小時內到鹽城交警高速三大隊接受約談。千萬不要認為“擠一擠沒事”下面這位網友的做法就值得表揚鹽城交警也迅速反應,對涉事車輛進行了處罰不要為了趕時間而乘坐超員車不要認為擠一擠沒有事不要認為自己有座就漠不關心拒絕超員車,平安回家路。
摘要內容為:核定53人,實載61人,前擋風玻璃竟然還有一道裂縫!你真的認為乘坐超員車只是“擠一擠沒事兒”嗎?安全問題不容忽略!
針對該短文各模型的結果展示如表1所示。

表1 Transformer及其優化模型的摘要結果對比Tab.1 Comparison of summarization results of Transformer and its optimization models
通過對比實驗中得出的結果可知,Baseline得出的結果中存在大量的無法覆蓋的字符([UNK]),表明詞表沒有覆蓋的信息,這類無法覆蓋的詞大多是成語、人名或者一些網絡自造詞,這些詞語通過預訓練語料也是難以覆蓋全面的。同時Baseline的結果中也存在大量的重復字詞,由于生成長度的限制如果摘要中出現了大量的重復無意義的信息,必然會導致最后生成的摘要不完整,從而影響語意的通順。
引入Pointer Generator Network 后的實驗結果表明,解決了因為詞表無法覆蓋從而產生[UNK]的問題,語意大致連貫。但是由于重復造成的語意斷層、前后銜接不連貫的問題仍然存在。
引入Coverage Loss 后的實驗結果表明,Coverage Loss 在一定程度上可以解決重復問題,結果中重復頻次大幅度減小,語意連貫性也顯著增強,所以對比實驗結果表明加入Pointer Generator Network和Coverage Loss后作用明顯。
ROUGE函數評價不同模型的得分如表2所示。

表2 Transformer及其優化模型的摘要結果ROUGE得分對比 單位:%Tab.2 Comparison of ROUGE scores of summarization results of Transformer and its optimization models unit:%
本文所提出的基于Transformer 實現文本摘要的模型,分別利用Pointer Generator Network 以及Coverage Loss 解決了OOV、表達重復以及不準確的問題。實驗結果表明,每加入新的模塊后得分都會相較之前有所提高,從驗證集的結果來看,每加入新的模塊得到的摘要內容也更加具有可讀性,這也驗證了本文后續加入的兩個模塊在Baseline 的基礎上提升了模型的性能。