吳仁守,張宜飛,王紅玲,張 迎
(蘇州大學 計算機科學與技術學院, 江蘇 蘇州 215006)
隨著互聯網的迅猛發展,人們被大量的在線信息和文檔所淹沒。為了能夠從中快速找出需要的信息,獲取它們的摘要是一個有效途徑。Radev等[1]將摘要定義為“從一個或多個文本生成的,傳達了原始文本中重要信息的文本,其長度不超過原始文本的一半,并且通常顯著小于原始文本”。但是,面對海量的信息,僅靠人工很難為所有文檔創建摘要,而自動文本摘要則能很好地解決此問題。
自動文摘[2]是自然語言處理領域的一個重要研究方向,其目的是通過對原文本進行壓縮、提煉,為用戶提供一個能夠覆蓋原文核心意思的簡明扼要的文字描述。自動文摘所采用的方法可分為抽取式文摘(extractive summarization)[3]和生成式文摘(abstractive summarization)[4]。傳統的自動文摘主要采用抽取式方法,即抽取原文本中的句子組成摘要。相比于抽取式文摘,生成式文摘能夠從文檔中獲取相關信息,創建更加精確、自然的摘要,且生成的摘要具有可讀性強、語法正確、連貫性強等優點。同時,隨著神經網絡模型被廣泛應用于自然語言處理任務,例如語言模型[5]和機器翻譯[6]等,基于神經網絡的生成式自動文摘方法受到了越來越多研究者的關注。
目前主流的神經生成式自動文摘模型主要使用借鑒于神經機器翻譯的基于編碼器—解碼器(encoder-decoder)架構的序列到序列學習模型(sequence-to-sequence learning)。但是常見的基于循環神經網絡(recurrent neural network, RNN[7])的編碼器尚不能有效地對長文檔進行語義編碼,并且目前普遍只能學習線性鏈結構的信息, 忽視了對文檔具有的層次結構信息的有效利用。而文檔本身的語義表達具備很強的結構性,各語義單元之間存在緊密聯系。因此,有效地利用文檔層次結構信息有利于自動文摘系統更加準確地判斷文檔內不同結構單元的語義關系和重要程度。從語言學角度來說,文檔的結構可對應為篇章結構,而篇章結構可分為物理結構和語義結構。本文只探索物理結構,即本文中的層次結構: 由字構成句子,句子構成文檔。同時,對文檔進行層次建模能夠縮短上層編碼器的輸入,緩解基于循環神經網絡的編碼器對長文檔編碼的缺陷。
針對上述問題,本文對當前主流的基于編碼器—解碼器架構的生成式自動文摘模型進行了以下兩點改進: (1)根據文檔的層次結構對文檔進行層次編碼。層次編碼旨在捕獲輸入文檔結構的兩個基本特征。第一,文檔具有的層次結構(字、句子、文檔)。同樣地,我們通過首先利用基于循環神經網絡的編碼器構建字級語義表示;然后由字級語義表示通過卷積神經網絡(convolutional neural networks, CNN)構建句子級語義表示,來獲得文檔不同層次的語義表示。第二,文檔中單詞和句子的重要性與上下文高度相關,即相同的單詞或句子在不同的上下文中可能具有不同的重要性。層次編碼可以較好地對這種現象進行建模。(2)本文提出了一種語義融合單元來對輸入文檔不同層次的語義表示信息進行融合和篩選,獲得包含不同層次語義信息的全局表示,并將其作為最終的文檔表示用于解碼端生成文本摘要。
傳統的生成式自動文摘方法主要包括: (1)基于結構的方法,該方法主要通過使用模板[8]、抽取規則[9]和其他結構(如樹[10]、本體[11]等)來確定文檔中最重要的信息; (2)基于語義的方法,該方法通過自然語言處理工具處理文檔,識別名詞短語和動詞短語等,并將這些語言學信息用于文本摘要生成中。基于語義的方法又包含多模態語義模型[12]、基于信息項的方法[13]和基于語義圖的方法[14]。
近年來,深度神經網絡模型已被廣泛應用于自然語言處理(NLP)任務,例如機器翻譯和文本摘要。特別是基于注意力的序列-序列框架與循環神經網絡(RNN)在NLP任務中占主導地位。Rush等[15]首次應用編碼器—解碼器架構進行生成式摘要,首先使用編碼器對輸入進行編碼,然后利用上下文敏感的注意力前饋神經網絡生成摘要,在自動文本摘要上取得良好結果。作為這項工作的擴展,Chopra等[16]使用類似的卷積模型作為編碼器,而把解碼器換成了RNN,在同樣的數據集上產生了性能更好的結果。Nallapati等[17]進一步將編碼器改為RNN編碼器,組成完整的基于RNN的序列到序列學習模型。此外,他們還拓展了傳統編碼器,增加了詞匯和統計特征,如命名實體識別(NER)和詞性標注(POS)等,這些特征在傳統的基于特征的摘要系統中均發揮了重要作用。
Gu等[18]和Gulceher[19]等提出類似的觀點,文摘任務可以從輸入文檔中復制稀有單詞來減少出現未登錄詞(unk)的情況。Gu等[18]提出CopyNet來對文本生成任務中的復制動作進行建模,這也適用于摘要任務。Gulcehre等[19]提出了一個選擇門來控制是從源文檔復制單詞還是從解碼端的詞匯表中生成單詞。Zeng等[20]在使用復制機制的同時,在GRU與LSTM的門上添加標量權重以完成自動文摘任務。
不同于常見的序列到序列模型,其輸入序列編碼(encoding)完畢之后才會開始生成(decoding)輸出序列,Yu等[21]提出了輸入序列輸入的同時交替進行編碼與解碼過程的序列到序列模型。該模型在短文本摘要任務中取得了較好的實驗效果。Shen等[22]建議在神經機器翻譯中應用最小風險訓練(MRT)來直接優化評估指標。Ayana等[23]將MRT應用于生成式自動文摘任務,實驗結果表明直接優化ROUGE評價指標可以提高系統測試性能。
然而,很少有方法在自動文本摘要任務中探索層次編碼結構的性能。Tang等[24]首先在情感分類中使用層次結構。他們使用CNN或LSTM來獲得句子向量,然后使用雙向門控循環神經網絡來組成句子向量以獲得文檔向量。Yang等[25]提出了一種用于文檔分類的層次注意力網絡。還有一些工作在序列生成[26]和語言建模中使用了層次結構。本文的層次編碼器與上述的工作類似,但是又有所創新,本文提出的基于層次結構的生成式摘要模型將文檔中每一個句子最后一個字符的語義表示作為句級編碼器的輸入,并且在字級編碼器和句子編碼器中混合使用了RNN和CNN,有效結合了兩者的優點。另外,增加了語義融合單元,將字級語義表示和句級語義表示進行融合。而上述工作通常直接利用層次結構中的最上級的句級或段級語義表示構成文檔表示。
本節首先給出自動文摘任務的通用定義,并介紹文中使用符號的含義。最后,描述本文提出的基于層次結構的生成式摘要模型。
給定輸入文檔D,將其表示為句子序列Ds=(s1,s2…,sTs)和單詞序列Dw=(w1,w2…,wTw),其中每個單詞wi來自固定的詞匯表V。自動文摘旨在將文檔D作為輸入,并生成一個簡短的摘要y=(y1,y2,…,yTy),其中T表示序列長度,Tw>Ty。
基于層次結構的生成式摘要模型(后文中使用PHS表示)主要包括: 層次文檔閱讀器、語義融合單元和配備注意力機制的解碼器。其中,層次文檔閱讀器包括字級編碼器和句級編碼器,其任務是讀取輸入文檔,并構建字級和句級語義表示。語義融合單元則包含字句對齊模塊和全局門控模塊。字句對齊模塊對獲得的字級和句級語義表示進行對齊,并利用全局門控模塊進行篩選,將其提供給解碼器生成摘要。解碼器則負責最終生成摘要。下文將分別詳細介紹層次文檔閱讀器、語義融合單元和解碼器的細節及其訓練方法。
層次文檔閱讀器結構如圖1所示,其由兩部分組成: (1)使用循環神經網絡(RNN)的字級編碼器; (2)使用卷積神經網絡(CNN)的句級編碼器。層次文檔閱讀器的層次性質反映了文檔的層次結構,即文檔是由單詞、句子,甚至更大的結構單元組合生成的。因此,層次文檔閱讀器能更好地編碼出文檔中不同層次結構的信息及其結構關系。

圖1 層次文檔閱讀器結構圖
2.1.1 字級編碼器

其中,ht∈Rn是t時刻的隱藏層狀態,n為隱藏層向量維度。f(·)是一些非線性函數,本文選擇了長短期記憶單元(LSTM)。
2.1.2 句級編碼器

我們選擇卷積神經網絡模型作為句級編碼器主要有兩個原因: (1)訓練速度快; (2)卷積核的參數共享,使得模型能夠提取某些類型的特征,特別是n元特征。與圖像相似,文本中也包含局部相關性,如短語結構、句子的內部相關性。卷積單元可以在句子間提取這些共同特征并指示句子間相關性。
對于卷積網絡,我們使用類似于Szegedy等[27]提出的inception的結構,且使用一維卷積來提取句子間的共同特征。和inception初始的設計原則不同,參考Lin等[28]的工作,我們不使用kernel=5的卷積核,而是使用kernel=3的兩個卷積核來避免較大的卷積核。具體地,該卷積網絡包含3組卷積核: 第一組有一個kernel=1卷積核和兩個kernel=3的卷積核;第二組分別有一個kernel=1和kernel=3的卷積核;第三組僅有一個kernel=1的卷積核。我們將每一組的最后一個卷積核的輸出進行拼接,作為最終的輸出。卷積網絡的細節描述如式(5)所示。
(5)
其中,ReLU為線性整流函數(Rectified Linear Unit),Wc為可訓練矩陣參數。
語義融合單元結構如圖2所示,主要包含兩個模塊: (1)字句對齊模塊; (2)全局門控模塊。字句對齊模塊獲得最終包含全局信息的文檔表示gd,全局門控模塊對獲得的gd進行進一步篩選,去除冗余,挖掘出原文檔的核心內容。

圖2 語義融合單元結構圖
2.2.1 字句對齊模塊


(6)

其中,Wo為可訓練參數矩陣。

(10)
其中,f(·)為LSTM單元。
2.2.2 全局門控模塊

其中,att(·)為注意力計算公式。在此,我們使用Vaswani等[30]提出的縮放點積注意力(Scaled Dot-Product Attention)從整篇文檔中有選擇地篩選出與當前句子相關的信息并聚焦到這些信息上,如式(14)所示。
(14)
其中,dk為hw的維度。
我們利用基于注意力機制的單向LSTM解碼器來讀取文檔表示并逐字生成摘要。在每個時間步驟i,解碼器通過獲得的詞匯表的概率分布生成摘要中的字,直到生成表示句子結尾的標記時結束。具體計算方法如式(15)~式(19)所示。
其中,f(·)為LSTM單元,g(·)是一個非線性、潛在的多層函數,輸出y的概率,st為t時刻RNN的隱藏狀態,a(·)是一個前饋神經網絡。
給定輸入文檔x,我們的模型使用隨機梯度下降進行端到端訓練,通過最小化生成摘要的負對數似然來估計模型參數,形式如式(20)所示。

(20)
其中,θ表示可訓練的模型參數。
在本節中,我們首先介紹實驗設置,包括數據集、評價方法、對照實驗、文本預處理和超參數設置,然后報告我們的實驗結果。
3.1實驗設置3.1.1 數據集
本文使用的實驗數據集為NLPCC2017 Shared Task3: Single Document Summarization評測任務提供的數據集TTNews[31],該評測任務旨在研究自動生成中文新聞短篇摘要的單文檔摘要技術,其提供一個大型數據集,用于評估和比較不同的文本摘要技術。
TTNews數據集是目前最大的中文單文檔摘要語料庫,包含一個訓練集和一個測試集。訓練集包含50 000篇用于頭條應用程序上推送和瀏覽的新聞文章和相應的人工摘要。此外,為了進一步促進半監督自動文摘技術的研究,它還包含50 000篇沒有人工摘要的新聞文章。測試集只包含2 000篇新聞文章,其來源多種多樣,內容也各不相同,包括體育、食品、娛樂、政治、科技、金融等。TTNews 數據集具體統計信息如表1所示。本文僅使用包含相應人工摘要的50 000篇新聞,隨機抽取其中2 000篇作為驗證集,剩余48 000篇作為訓練集。

表1 TTNews數據集統計信息
3.1.2 評價方法
ROUGE[32]是Chin-Yew Lin在2004年提出的一種自動摘要評價方法,被廣泛應用于NIST組織的自動摘要評測任務中。ROUGE基于摘要中n元詞(n-gram)的共現信息來評價摘要,是一種面向n元詞召回率的評價方法。基本思想為由多個專家分別生成人工摘要,構成標準摘要集,將系統生成的自動摘要與人工生成的標準摘要相對比,通過統計二者之間重疊的基本單元(n元語法、詞序列和詞對)的數目,來評價摘要的質量。通過與標準人工摘要的對比,提高評價系統的穩定性和健壯性。該方法現已成為自動評價技術的通用標準之一。
本文采用ROUGE中的ROUGE-2,ROUGE-4和ROUGE-SU4以及NLPCC2017 Shared Task3: Single Document Summarization評測任務給定overall score對生成的摘要進行評價,其中overall score為ROUGE1,ROUGE-2,ROUGE-3,ROUGE-4,ROUGE-L,ROUGE-SU4,ROUGE-W-1.2的平均值。另外,該任務中每個摘要的長度限制為60個中文字符,當生成的摘要長度大于60個中文字符時,我們將其截斷至60個中文字符。
3.1.3 對照實驗
為了評估本文提出的PHS模型在自動摘要任務中的表現,我們將本文提出的模型與NLPCC2017 Shared Task3: Single Document Summarization評測任務中最終提交結果中的模型進行比較。我們直接使用各個模型在該評測任務中最終提交的實驗結果。其中,LEAD為該評測任務給出的基線模型。下面我們簡要介紹一些具有代表性的系統。
LEAD[31]: 抽取式自動文摘基線系統將文檔中的前60個字符作為摘要。由于新聞文本通常是總分總的寫作結構,開篇的句子往往包含文章大意,因此該基線系統具有較好的性能。
ccnuSYS[31]: 生成式自動文摘模型,使用配備注意力機制的基于編碼器—解碼器架構的序列到序列學習模型,它使用文章作為輸入序列,將摘要作為輸出序列。
NLP_ONE[31]: 生成式自動文摘模型,針對傳統基于注意力機制的編碼器—解碼器模型的不足,提出在輸出序列上增加一種新的注意力機制,并采用子字(subword)方法,實驗結果得到改進。
NLP@WUST[33]: 抽取式自動文摘模型,基于特征工程的句子抽取框架來獲得抽取摘要。在抽取出摘要之后,增加了一個句子壓縮算法,壓縮抽取出摘要以得到較短的摘要。
3.1.3 文本預處理
預處理時,我們用正則表達式將原始數據集中的HTML標簽、符號以及非法字符等無效字符去除。另外,由于硬件限制,我們只能將編碼器輸入文本長度上限限制為500個中文字符,對于超出部分進行截斷處理。通過實驗,我們發現較小的文本長度會降低模型的性能,而文本長度過大則導致內存不足錯誤。
3.1.4 超參數設置
我們使用PyTorch深度學習框架編寫代碼并在一塊NVIDIA 1080Ti GPU上進行實驗。由于按詞分割文本導致詞表過大,在生成摘要時出現大量未登錄詞。因此,本文按字分割文本,使用“unk”來表示所有字表外的未登錄字。字嵌入矩陣在模型訓練開始時隨機初始化,并隨模型一同訓練。另外,我們使用默認設定參數的Adam優化器[30]:lr=0.001,betas=(0.9,0.999),eps=1×10-8。其他具體參數設置如表2所示。

表2 實驗參數設置表
所有超參數都使用驗證集進行調整,實驗結果在測試集上報告。
下面,首先將本文提出的基于層次結構的生成式自動文摘模型與上述的對比系統進行比較,然后分析本文模型中不同組件對模型的貢獻。
(1) 與對比系統比較
實驗結果如表3所示,其中PHS為本文提出的基于層次結構的生成式自動文摘模型。

表3 在TTNews數據集上的實驗結果
注: 其中R-2,R-4,R-SU4和Overall分別為ROUGE-1,ROUGE-2,ROUGE-SU4和Overall Score的縮寫。
分析表3中的實驗結果可以看出: 本文提出的基于層次結構的生成式自動文摘模型(PHS)的實驗結果超過了所有對比模型,在ROUGE評價指標上性能得到了顯著提升,達到了最好的實驗效果。并且,與NLPCC2017 Shared Task 3: Single Document Summarization評測任務中排名第一的NLP_ONE模型相比,本文模型在ROUGE-2,ROUGE-4,ROUGE-SU4和Overall Score上分別提高了5.99,4.88,4.92和6.21個百分點。這充分說明了本文提出的模型是有效的,可以生成更高質量的文本摘要。
(2) 模型中不同組件的貢獻
為了分析模型中不同組件對模型的貢獻程度,我們在傳統基于注意力機制的序列到序列(seq2seq)模型的基礎上進行修改,將編碼器分別換為字級編碼器、句級編碼器和層次文檔閱讀器,并進行比較。
實驗結果如表4所示,其中char_encoder模型為使用字級編碼器的模型,具體實現方式為將傳統基于注意力機制的seq2seq的編碼器替換為本文2.1.1節中的字級編碼器;sen_encoder模型為使用句級編碼器的模型,具體實現方式為將傳統基于注意力機制的seq2seq的編碼器替換為本文2.1.2節中的句級編碼器。但是,由于沒有字級編碼器,無法將每個句子的最后一個字符的隱藏層表示作為句嵌入向量。在此,我們簡單地將句子中的每個字的字嵌入向量相加求平均作為該句子的句嵌入向量;hier_encoder模型為使用本文提出的層次文檔閱讀器的模型,具體實現方式為將傳統基于注意力機制的seq2seq的編碼器替換為本文2.1節中的層次文檔閱讀器,但是無語義融合單元。

表4 具有不同組件的各自模型的性能
注: 其中R-2,R-4,R-SU4和Overall分別為ROUGE-1,ROUGE-2,ROUGE-SU4和Overall Score的縮寫。
對比表4中實驗結果可以看出: 模型中不同組件的貢獻有所不同。首先,基于字級編碼器的char_encoder模型的性能大幅優于基于句級編碼器的sen_encoder模型,說明簡單地將句子中的每個字的字嵌入向量相加求平均作為該句子的句嵌入向量存在一定的局限性,無法很好地表示句子的語義信息。另外,基于字級編碼器的char_encoder模型已經優于該評測任務的第一名NLP_ONE模型,通過分析生成的摘要,我們猜測是由于中文文本按字編碼能大量減小詞表大小,有效避免了未登錄詞出現的情況, 提高模型性能。其次,基于層次文檔閱讀器的hier_encoder模型優于基于字級編碼器的char_encoder模型,在ROUGE-2,ROUGE-4,ROUGE-SU4和Overall Score上分別提高了1.58,1.44,1.46和1.48個百分點,說明本文提出的層次文檔閱讀器是有效的,它可以在字級語義信息的基礎上,進一步挖掘出句級語義信息,并利用CNN的共享參數的特點,發現句子之間的關聯。最后,本文提出的基于層次結構的生成式自動文摘模型(PHS)實驗效果與hier_encoder模型相比,在ROUGE-2,ROUGE-4,ROUGE-SU4和Overall Score上又分別提高了1.95,2.22,0.99和1.94個百分點。PHS模型和hier_encoder模型的不同之處在于PHS模型在hier_encoder模型的基礎上增加了本文提出的語義融合單元,這說明本文提出的語義融合單元能有效融合字級語義信息和句級語義信息,并對融合的信息進行進一步篩選,去除冗余信息,挖掘出原文檔的核心內容。
自動文摘是自然語言處理領域的一個重要研究方向,近60年持續性的研究已經在部分自動文摘任務上取得了明顯進展。本文針對當前主流的基于編碼器—解碼器架構的序列到序列學習模型進行了改進: 根據文檔的層次結構對文檔進行層次編碼,獲得文檔不同層次的語義表示,并提出了一種語義融合單元來對輸入文檔不同層次的表示信息進行融合,用于編碼器生成摘要。實驗結果表明: 該方法與對比方法相比,在ROUGE值的評測上有較大的提升,說明該方法是有效的。在接下來的工作中,我們將考慮如何利用篇章的語義結構信息(如篇章修辭結構、話題結構等)來輔助摘要生成。