,,,*
(1.南京信息職業(yè)技術(shù)學(xué)院計(jì)算機(jī)與軟件學(xué)院,江蘇南京210023;2.南京郵電大學(xué)計(jì)算機(jī)學(xué)院,江蘇南京210023)
互聯(lián)網(wǎng)中日益增長(zhǎng)的文本數(shù)據(jù)導(dǎo)致人們需要花費(fèi)更多時(shí)間用于篩選和甄別文本中的關(guān)鍵信息。自動(dòng)摘要技術(shù)作為一種從長(zhǎng)文本中獲取關(guān)鍵信息的方法,能夠降低信息爆炸時(shí)代人們信息獲取的時(shí)間成本,引起越來(lái)越多研究者的關(guān)注。
自Luhn在文獻(xiàn)[1]中提出自動(dòng)摘要至今,文本摘要領(lǐng)域有了很大的進(jìn)步,并且開(kāi)發(fā)了大量的技術(shù)和方法,這些方法主要分為兩類:基于統(tǒng)計(jì)的抽取式摘要方法[2]和基于知識(shí)的抽象式摘要方法[3]?;诮y(tǒng)計(jì)的方法[4]主要處理統(tǒng)計(jì)特征,有助于從源文本中提取重要的單詞和句子。這種技術(shù)和語(yǔ)言種類無(wú)關(guān),它可以對(duì)任何語(yǔ)言文本進(jìn)行摘要。而基于抽象的方法是在理解整段文本的語(yǔ)義后,機(jī)器做出概括性總結(jié)。2014年Google和Cho等[5]提出Seq2Seq框架,該框架實(shí)現(xiàn)了生成可變長(zhǎng)度序列的功能,將深度學(xué)習(xí)的應(yīng)用范圍從傳統(tǒng)的分類回歸任務(wù)擴(kuò)展到文本生成領(lǐng)域,是深度學(xué)習(xí)發(fā)展歷史上的里程碑。2015年Lopyrev[3]將Seq2Seq框架應(yīng)用在新聞標(biāo)題生成的任務(wù)上,并加入了Attention機(jī)制,提出了Complex Attention和Simple Attention[6]兩種方法。
中文信息處理作為專門(mén)以中文為研究對(duì)象的自然語(yǔ)言處理技術(shù)已經(jīng)在世界范圍內(nèi)得到廣泛的重視,并且取得了快速發(fā)展?!爸形男畔⑻幚怼笨梢詣澐譃椤皾h字信息的處理”和“漢語(yǔ)信息的處理”兩個(gè)分支,漢字信息處理主要指以漢字為處理對(duì)象的相關(guān)技術(shù),包括漢字字符集的確定、編碼、輸入、輸出、編輯、排版以及漢字頻率統(tǒng)計(jì)和漢字的屬性庫(kù)[7]。一般而言,漢字信息處理關(guān)注的是文字(特殊圖形)本身,而不是其承載的語(yǔ)義信息或者相互之間的語(yǔ)言學(xué)關(guān)系。自然語(yǔ)言處理(natural language processing, NLP)中“漢語(yǔ)信息”處理包括對(duì)傳遞信息、表達(dá)概念的詞、短語(yǔ)、句子、短文以及語(yǔ)料庫(kù)和網(wǎng)頁(yè)等各種語(yǔ)言表達(dá)載體及其不同表達(dá)形式的處理技術(shù)。
2015年,Hu等[8]公開(kāi)了中文自動(dòng)摘要數(shù)據(jù)集LCSTS,并在詞語(yǔ)和漢字兩個(gè)粒度上使用融合Attention機(jī)制的 Seq2Seq 生成式摘要模型。而Rush等[9]也將此框架應(yīng)用于文檔摘要生成任務(wù)中,提出了ABS-System(attention-based summarization),在編碼端使用Attention機(jī)制,在解碼端使用了NNLM(neural network language model)[10]模型,改善了模型生成效果,提出了ABS+模型。對(duì)抗神經(jīng)網(wǎng)絡(luò)GAN(generative adversarial networks)[11]在自然語(yǔ)言處理的文本生成中被用來(lái)判斷生成文本與真實(shí)文本的差異,增強(qiáng)語(yǔ)言模型的健壯性。
本文針對(duì)中文的特點(diǎn),以漢字筆畫(huà)作為最小粒度,參考Fasttext[12]方法,對(duì)中文做筆畫(huà)粒度的文本編碼,獲取漢字筆畫(huà)中的n-gram信息,通過(guò)Skip-Gram方法得到對(duì)應(yīng)的中文詞向量。然后基于機(jī)器翻譯中的Seq2Seq[13]模型,在編碼器部分使用雙向長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)(long short-term memory,LSTM)以利用從后向前的信息,在通過(guò)編碼器生成句子語(yǔ)義向量時(shí)加入注意力機(jī)制(attention mechanism)[14],以計(jì)算不同輸入詞對(duì)解碼端的影響權(quán)重。最后,在測(cè)試階段的解碼端加入Beam Search算法,優(yōu)化生成序列的流暢度,并選擇Rouge-N[15]對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行評(píng)價(jià)和分析。
基于Sequence-to-Sequence框架中常用的自編碼結(jié)構(gòu),結(jié)合自動(dòng)摘要任務(wù)的特點(diǎn),設(shè)計(jì)任務(wù)流程如圖1所示。
圖1 自動(dòng)摘要任務(wù)流程Fig.1 Flow chart of automatic abstract task processing
任務(wù)流程的具體步驟:
a) 文本預(yù)處理:通過(guò)將原文信息分詞后,進(jìn)行詞的向量化處理,并構(gòu)建對(duì)應(yīng)的詞匯表,形成的詞向量序列作為下一個(gè)階段的輸入。
b) 語(yǔ)義理解:循環(huán)神經(jīng)網(wǎng)絡(luò)的記憶功能,將第一階段的詞向量序列輸入編碼器(使用Bi-LSTM),編碼器生成每一段文本的語(yǔ)義向量并傳給下一個(gè)階段。
c) 信息重組:Attention機(jī)制根據(jù)解碼器反饋的隱藏狀態(tài)以重組出最適合當(dāng)前時(shí)刻的全文語(yǔ)義信息,并將重組后的中間語(yǔ)義信息送至解碼器,用于當(dāng)前時(shí)間步的詞語(yǔ)預(yù)測(cè)。
d) 摘要生成:解碼器(使用RNN)根據(jù)前一時(shí)刻預(yù)測(cè)的詞和概括全文語(yǔ)義的中間語(yǔ)義向量來(lái)推斷下一時(shí)刻詞的分布,最終生成一個(gè)詞序列即摘要句。
在上述的4個(gè)流程中,針對(duì)中文的特點(diǎn)引入筆畫(huà)向量編碼和訓(xùn)練自動(dòng)文摘的語(yǔ)言模型。為了更加清晰地體現(xiàn)本文模型的結(jié)構(gòu),在圖2中將模型區(qū)分為訓(xùn)練階段和測(cè)試階段兩個(gè)部分。
圖2 訓(xùn)練階段及測(cè)試階段模塊細(xì)節(jié)Fig.2 Module details in training and testing phases
圖2左邊為本文模型的訓(xùn)練階段,箭頭表示數(shù)據(jù)的傳輸方向以及參數(shù)的反向傳播,加下劃線部分為本文使用的針對(duì)中文的筆畫(huà)編碼方式。其余部分包括由Bi-LSTM組成的編碼器、RNN組成的解碼器以及Attention機(jī)制的優(yōu)化。右邊為模型的測(cè)試階段,主要是對(duì)訓(xùn)練好的解碼器進(jìn)行測(cè)試,輸入一段測(cè)試文本,通過(guò)基于筆畫(huà)的中文編碼后使用訓(xùn)練好的解碼器得到生成的自動(dòng)摘要。在這一階段,為了最大化生成句子的概率,引入Beam Search增加生成句子的選擇范圍。
自動(dòng)摘要是基于機(jī)器學(xué)習(xí)方法來(lái)完成對(duì)短文本的分析與生成,而機(jī)器學(xué)習(xí)方法輸入的只能是向量。Fasttext將英文單詞拆分到字母粒度來(lái)完成向量初始化,在英文中具有不錯(cuò)的效果。單個(gè)英文字符是沒(méi)有語(yǔ)義信息的,而中文字符包含偏旁部首、字符組件、筆畫(huà)信息等語(yǔ)義信息特征,中文每個(gè)字符都有很強(qiáng)的語(yǔ)義信息?;谄圆渴缀蜐h字組件特征的中文詞向量模型JWE(joint learning word embedding model)[16]已經(jīng)取得不錯(cuò)的效果,但是也有不足之處。例如,中文字符“智”,它的偏旁部首是“日”,但這個(gè)部首語(yǔ)義上和“智”沒(méi)有什么關(guān)聯(lián);而按照字符組件可以分為“矢”“口”“日”,這些和原字符也沒(méi)有什么語(yǔ)義關(guān)聯(lián)。
本文使用和Fasttext類似的方法,將每個(gè)詞拆分成筆畫(huà)序列,使用基于筆畫(huà)的n-gram信息來(lái)捕獲類似“智”中的“知”這種只有從更小的筆畫(huà)粒度才能捕獲到并且和原字符語(yǔ)義接近的部分,其在中文的詞向量表示上帶來(lái)明顯的效果提升。
在詞向量編碼的方法上,本文使用傳統(tǒng)的Word2vec的Skip-Gram訓(xùn)練方法,通過(guò)中心詞預(yù)測(cè)上下文。Word2vec中,對(duì)于每個(gè)字符使用簡(jiǎn)單的獨(dú)熱(one-hot)編碼初始化,并借鑒Fasttext的思想,將每個(gè)詞語(yǔ)轉(zhuǎn)化成對(duì)應(yīng)的筆畫(huà)序列,例如:“大學(xué)”則會(huì)變成“一ノ丶丶丶ノ丶フフ丨一”,對(duì)于這樣的序列做n-gram切分,切分后的筆畫(huà)初始化作為輸入,這樣就可以捕獲到漢字之間存在的深層關(guān)聯(lián)。
該方法的意義在于,把漢字拆成筆畫(huà)或者部首,主要通過(guò)筆畫(huà)或者部首之間的語(yǔ)義信息,豐富文字本身的特征,從而捕獲相似字之間的部件結(jié)構(gòu)相似性,增加短語(yǔ)理解所需的特征。從語(yǔ)言學(xué)的方面來(lái)說(shuō),漢字造字上會(huì)讓相似含義的字詞具有類似的結(jié)構(gòu),這是本文漢字編碼方法的理論基礎(chǔ)。
漢字筆畫(huà)細(xì)分有30多種,這里將筆畫(huà)分為5個(gè)大類:橫、豎、撇、捺,折。如表1所示,將這5個(gè)筆畫(huà)分別使用數(shù)字編號(hào),這樣方便對(duì)應(yīng)其在字典中的向量。
表1 漢字筆畫(huà)編碼
圖3主要介紹了詞語(yǔ)拆分成筆畫(huà)并獲取n-gram值的過(guò)程,主要分為4個(gè)步驟:
a) 將詞語(yǔ)拆分成字符;
b) 找到每個(gè)字符對(duì)應(yīng)的筆畫(huà)序列;
c) 對(duì)上一步驟得到的筆畫(huà)序列ID化;
d) 對(duì)ID化的筆畫(huà)序列n-gram求和,每個(gè)筆畫(huà)的n-gram代表一個(gè)向量,筆畫(huà)向量的緯度和上下文單詞的詞向量緯度一致,在實(shí)驗(yàn)中全文出現(xiàn)在不同地方的相同單詞和筆畫(huà)共享相同的向量。
圖3 詞語(yǔ)拆分成n-gram筆畫(huà)Fig.3 Words split into n-gram strokes
一個(gè)單詞和他的上下文單詞具有較高的相似性,當(dāng)前詞w和其上下文單詞c的相似性使用它們的向量?jī)?nèi)積來(lái)表示f′sim(w,c)=w·c,其中w和c分別代表w和c的向量表示。給每個(gè)筆畫(huà)的n-gram和每個(gè)上下文單詞分配一個(gè)向量,并且根據(jù)組成當(dāng)前詞w的所有筆畫(huà)n-gram向量和上下文詞的詞向量?jī)?nèi)積和來(lái)計(jì)算相似性。將語(yǔ)料庫(kù)中所有單詞的筆畫(huà)n-gram向量保存在字典S中,其中S(w)表示單詞w的筆畫(huà)n-gram集合,相似性函數(shù)即為:
(1)
其中q為S(w)的元素,q為q的嵌入向量。
語(yǔ)言模型旨在預(yù)測(cè)一句話出現(xiàn)的概率,Skip-Gram模型使用中心詞w預(yù)測(cè)上下文c,即為計(jì)算概率p(c|w),這里使用Softmax函數(shù)來(lái)計(jì)算這個(gè)概率:
(2)
c′屬于語(yǔ)料庫(kù)字典V中的一個(gè)單詞,可以發(fā)現(xiàn)分母的計(jì)算量為|V|,對(duì)于以上分母的計(jì)算使用負(fù)采樣方法來(lái)加速,負(fù)采樣的思想在于降低負(fù)樣本的個(gè)數(shù)以降低模型需要更新的權(quán)重個(gè)數(shù)。例如輸入“大學(xué)”,使用one-hot編碼時(shí),在輸出層希望對(duì)應(yīng)“全國(guó)”和“排名”詞語(yǔ)的神經(jīng)元節(jié)點(diǎn)輸出1,如果|V|的大小為10 000,那么剩下9 999個(gè)節(jié)點(diǎn)希望輸出為0,這9 999個(gè)樣本在這里就是負(fù)樣本,負(fù)采樣就是從9 999個(gè)負(fù)樣本中抽取5~20個(gè)來(lái)更新其權(quán)重,其余權(quán)重不更新,以達(dá)到降低計(jì)算量的效果?;谪?fù)采樣的損失函數(shù)為:
(3)
其中:D為語(yǔ)料庫(kù)中所有單詞訓(xùn)練的集合;T(w)為窗口內(nèi)當(dāng)前詞的上下文單詞;σ為sigmoid激活函數(shù),σ(x)=(1+exp (-x))-1;λ為負(fù)采樣樣本個(gè)數(shù);Ec′~p為期望,使得負(fù)采樣的樣本符合p分布。筆畫(huà)編碼的詳細(xì)算法見(jiàn)算法1。
算法1Stroke Embedding。
參數(shù):最大輸入長(zhǎng)度max_size;起始索引index;新的n-gram字符Char_new;更新中的字典vocabulary。
輸入:某個(gè)中文詞。
輸出:其預(yù)測(cè)上下文詞。
1.對(duì)詞中每個(gè)漢字在對(duì)應(yīng)筆畫(huà)表中找到筆畫(huà)序列并合并;
2.對(duì)筆畫(huà)序列ID化為序列 stroke;
3. if index>max_size:break
For 3 Char_new=標(biāo)記+ -strok[起始索引,起始索引+n_gram]; if Char_new不在vocabulary:add in; 4.在建立好新的筆畫(huà)加詞語(yǔ)字典后,送入Skip-Gram訓(xùn)練; 5.獲得對(duì)應(yīng)的詞向量權(quán)重; 6.End。 Stroke Embedding算法的一個(gè)重要參數(shù)是n_gram,考慮到漢字的部件筆畫(huà)數(shù)的大小,這里對(duì)它的取值為3、4和5,以捕獲漢字中包含的大部分部件信息。 LSTM是一種時(shí)間循環(huán)神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測(cè)時(shí)間序列中間隔和延遲相對(duì)較長(zhǎng)的重要事件。LSTM的主要思想是門(mén)控單元以及線性連接的引入。其中門(mén)控單元的作用在于有選擇性地保存和輸出歷史信息,而線性連接可以看作是LSTM的“主干道”。通過(guò)加法,LSTM設(shè)計(jì)了每個(gè)時(shí)刻長(zhǎng)時(shí)記憶單元Ct,存儲(chǔ)每個(gè)時(shí)刻的重要信息,可以無(wú)障礙地在這條主干道上傳遞,因此LSTM可以更好地捕捉時(shí)序數(shù)據(jù)中間隔較大的依賴關(guān)系。 在LSTM中,長(zhǎng)時(shí)記憶單元通過(guò)乘性操作和加性操作來(lái)保存信息。簡(jiǎn)單來(lái)講,加法可以對(duì)信息做簡(jiǎn)單的疊加,而乘法因?yàn)槌说?就會(huì)變成0,更多是用來(lái)控制和縮放。在LSTM中,每個(gè)時(shí)刻到來(lái)的時(shí)候,通過(guò)“遺忘門(mén)”來(lái)忘掉一些信息再考慮要不要接受這個(gè)時(shí)刻的新信息。 但是LSTM對(duì)一個(gè)句子建模存在的問(wèn)題是:無(wú)法編碼從后向前的信息。在情感分類中,如果進(jìn)行更加細(xì)致的分類,例如強(qiáng)褒義、弱褒義、中性、強(qiáng)貶義、弱貶義,需要對(duì)一些情感詞、否定詞的程度進(jìn)行交互,LSTM僅僅通過(guò)單向?qū)渥泳幋a就會(huì)削弱長(zhǎng)距離詞之間的情感程度。例如“這家電影院音效差得不行”,其中“不行”是對(duì)“差”的程度加以修飾,加強(qiáng)這句話作為貶義的程度。因此在長(zhǎng)文本序列中,能夠更加完整捕獲文本的語(yǔ)義至關(guān)重要。本文通過(guò)雙向長(zhǎng)時(shí)記憶網(wǎng)絡(luò)(Bi-LSTM)可以捕捉雙向語(yǔ)義依賴。圖4為Bi-LSTM網(wǎng)絡(luò)結(jié)構(gòu)示意圖。 圖4 Bi-LSTM網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Diagram of Bi-LSTM 在作為Seq2Seq模型的編碼或者解碼器時(shí),雖然不需要完成如情感分析的分類任務(wù),但Bi-LSTM對(duì)語(yǔ)義向量更精準(zhǔn)的定位也可以為文本摘要帶來(lái)效果上的提升。Bi-LSTM對(duì)應(yīng)的是編碼部分,它將輸入的句子序列分別正向和反向輸入LSTM組成的神經(jīng)網(wǎng)絡(luò)中,得到兩種順序下每個(gè)單詞對(duì)應(yīng)的兩個(gè)隱藏狀態(tài)ht和h′t,然后將兩種順序下隱藏狀態(tài)拼接: hnew=fconcatenate(ht,h′t), (4) 即首尾相接,這樣就可以在編碼部分獲得較為完整的語(yǔ)義向量。整個(gè)模型的結(jié)構(gòu)示意圖如圖5。 圖5 Seq2Seq模型Fig.5 Seq2Seq model Bi-LSTM作為本文模型圖中編碼器部分的主要結(jié)構(gòu),在獲得語(yǔ)義向量C后,將其送至右邊解碼器來(lái)逐步生成序列中每個(gè)時(shí)間點(diǎn)的詞語(yǔ),訓(xùn)練階段解碼器由RNN單元組成。直觀上來(lái)講,該模型將左邊輸入的一段長(zhǎng)度為n的文本輸入雙向循環(huán)神經(jīng)網(wǎng)絡(luò),其中x0,x1,…,xt,…,xn分別表示文本中每個(gè)單詞對(duì)應(yīng)的詞向量,得到語(yǔ)義向量C后,解碼過(guò)程則是將其作為每個(gè)時(shí)刻的輸入,然后在對(duì)應(yīng)時(shí)刻輸出一個(gè)單詞y1,y2,…,ym,這樣就可以解碼出一段長(zhǎng)度為m的文本,其中n和m沒(méi)有嚴(yán)格的大小關(guān)系。由于本文的任務(wù)是文本摘要,輸入文本長(zhǎng)度大于輸出文本,因此n>m。以上就是模型的訓(xùn)練過(guò)程,在測(cè)試過(guò)程中,主要使用訓(xùn)練好的解碼器模型,通過(guò)優(yōu)化序列生成的方式,最終在測(cè)試集上完成實(shí)驗(yàn)。 在Seq2Seq模型訓(xùn)練完成后,需要使用該模型生成新的摘要句,而句子的生成是由每個(gè)單詞逐漸生成后組成的序列問(wèn)題。本節(jié)探討集束搜索(Beam Search)方法在文本生成上的可行性。 貪心搜索(Greedy Search)方法在生成句子中第一個(gè)單詞y1的分布后,根據(jù)條件語(yǔ)言模型挑選出最大概率的第一個(gè)詞y1,然后生成第二個(gè)詞y2的分布挑選出第二個(gè)詞,以此類推,這種搜索方法就是貪心搜索。顯然,貪心算法挑選的是每個(gè)時(shí)刻最大概率的單詞,容易陷入局部最優(yōu),而真正需要的是一次性挑選整個(gè)序列y1,y2,…,yn,使得整體條件概率最高,而這種貪心搜索的效果并不管用。 相比貪心搜索只考慮每個(gè)時(shí)刻當(dāng)前最大概率的一個(gè)單詞,集束搜索則是根據(jù)概率獲取最大的前K個(gè)單詞,K的大小即為集束寬。圖6為Beam Search選取一個(gè)最佳文本序列的示意圖。 圖6 Beam Search示例Fig.6 Beam Search example 假設(shè)字典大小為6,詳細(xì)的步驟如下: a)生成第一個(gè)詞y1的概率分布[0.1,0.1,0.4,0.2,0.1,0.1]后,選取其中最大概率的2個(gè)詞,如圖6所示“我”、“在”,作為第一個(gè)單詞的最可能的選擇; b)針對(duì)這兩個(gè)單詞計(jì)算第二個(gè)單詞與之搭配的概率,將“我”和“在”作為解碼器的輸入,然后再選擇概率最大的2個(gè)序列,即為“我在”和“在看”,以此類推,最終在遇到結(jié)束符〈〗s〉終止。 c)最后可以得到兩個(gè)序列,“我在看電影”和“在看電影我”,很明顯前者概率和最大,所以選擇前者作為最終結(jié)果。 BeamSearch的算法過(guò)程見(jiàn)算法2。 算法2:BeamSearch。 輸入:參數(shù)θ,beam大?。篕, 輸入:x。 輸出:估計(jì)K個(gè)最佳摘要。 1. π[0]←{ε}初始化beam; 2. π[1]←{ti|i∈N}將開(kāi)始時(shí)刻概率最大的K個(gè)詞放入beam中; 3. fori= 2 toN: 4. Sort({ti|ti-1∈π[i-1]})計(jì)算beam中每個(gè)分支輸入到解碼器后的輸出概率,并對(duì)此分支排序, 5. π[i]←K-argmax({ti|ti-1∈π[i-1]}), 6.O=O∪{ti|ti∈π[i] andti=END},π[i]=π[i]-O, 7. 選出最高概率的K個(gè)路徑,將分支中符合輸出的加入O,不符合的加入Beam, 8. End for; 9. 返回O。 在Beam Search的算法中,參數(shù)K的大小對(duì)測(cè)試階段解碼器的解碼速度影響較大,一般取值3到7個(gè)詞之間。 語(yǔ)義向量C作為輸入序列的語(yǔ)義壓縮以及解碼器的輸入,因其長(zhǎng)度的限制導(dǎo)致無(wú)法包含足夠多的有用信息,尤其是在自動(dòng)文摘任務(wù)中,編碼器輸入的序列往往是一段長(zhǎng)文本,一個(gè)C就無(wú)法概括所有的信息,導(dǎo)致模型精度下降,本節(jié)基于Attention機(jī)制來(lái)使得語(yǔ)義向量C保持更多的語(yǔ)義信息。 Attention機(jī)制的設(shè)計(jì)理念來(lái)源于人眼對(duì)于圖片的關(guān)注往往集中在某一些重點(diǎn)區(qū)域。在Seq2Seq模型中,這種Attention被分配在一些重點(diǎn)單詞上,本文的自動(dòng)文摘任務(wù)無(wú)法直觀地體現(xiàn)這一優(yōu)點(diǎn),因此本文使用機(jī)器翻譯來(lái)介紹Attention機(jī)制,這兩種任務(wù)本質(zhì)是一樣的。在機(jī)器翻譯中,解碼器輸出的譯文中每個(gè)單詞所受輸入單詞的影響力各不相同,因此,Attention機(jī)制根據(jù)不同時(shí)刻輸入不同的語(yǔ)義向量Ci來(lái)解決這個(gè)問(wèn)題,Ci來(lái)自編碼器隱藏層向量hj與分配的權(quán)重aij的乘積和。本文3.1節(jié)介紹了LSTM序列里,每個(gè)時(shí)刻輸出的隱藏層向量hi是由當(dāng)前輸出門(mén)和當(dāng)前時(shí)刻記憶單元決定的,語(yǔ)義向量是在編碼器最后一個(gè)單元輸出,而使用Attention機(jī)制加權(quán)求和了每個(gè)時(shí)刻的隱藏層向量。圖7展示了Attention機(jī)制的計(jì)算方法。 圖7 Attention機(jī)制Fig.7 Attention mechanism 當(dāng)計(jì)算單詞“I”的語(yǔ)義向量C1時(shí),輸入序列中“我”的語(yǔ)義信息對(duì)其影響應(yīng)當(dāng)最大,因此分配給它的權(quán)重就應(yīng)該最大。同理C2和“看”最相關(guān),因此對(duì)應(yīng)a22最大,那么如何計(jì)算aij就變成了一個(gè)重點(diǎn)問(wèn)題。 事實(shí)上,aij的大小是從模型中學(xué)來(lái)的,它與編碼器的第j-1階段的隱狀態(tài)和解碼器第i階段的隱狀態(tài)有關(guān)。例如當(dāng)計(jì)算單詞“watch”對(duì)應(yīng)的語(yǔ)義向量C2時(shí),首先通過(guò)計(jì)算上一個(gè)單詞“I”與編碼器的3個(gè)隱藏向量h1、h2、h3的相似度,這也利用了相鄰單詞語(yǔ)義接近的語(yǔ)言規(guī)則。為了更好地說(shuō)明如何計(jì)算aij,將編碼器的隱藏狀態(tài)定義為hj,解碼器隱藏層狀態(tài)定義為hi,Ci的計(jì)算公式為: (5) 公式(5)中V表示輸入序列的總長(zhǎng)度,hj也是已知的,aij的計(jì)算公式如下: (6) eij=a(hi-1,hj)。 (7) 公式(6)的aij是一個(gè)Softmax的概率歸一化輸出,eij表示一個(gè)對(duì)齊模型,用于衡量編碼器端的位置j個(gè)詞對(duì)于解碼器端的位置i個(gè)詞的對(duì)齊程度(影響程度)。換句話說(shuō),解碼器端生成位置i的詞時(shí),有多少程度受編碼器端的位置j的詞影響。對(duì)齊模型eij的計(jì)算方式有很多種,不同的計(jì)算方式,代表不同的Attention模型。最簡(jiǎn)單且最常用的對(duì)齊模型是dot product乘積矩陣,即把解碼器端的輸出隱狀態(tài)ht與編碼器端的輸出隱狀態(tài)hs進(jìn)行矩陣乘,在計(jì)算時(shí)是通過(guò)計(jì)算將要預(yù)測(cè)的單詞的上一時(shí)刻與輸入序列隱藏狀態(tài)矩陣的相似性來(lái)完成的,常見(jiàn)的對(duì)齊計(jì)算方式如下: (8) score(ht,hs)=eij表示源端與目標(biāo)單詞的對(duì)齊方式,常見(jiàn)有點(diǎn)乘、權(quán)值網(wǎng)絡(luò)映射、concat映射幾種方法。 不同的單詞對(duì)齊方式對(duì)應(yīng)著不同的Attention機(jī)制。例如,Hard Attention選擇編碼器隱藏層個(gè)數(shù)是隨機(jī)的,按照一定概率選擇輸入端一部分的隱狀態(tài),而不是整個(gè)編碼器的輸入序列,為了實(shí)現(xiàn)梯度的反向傳播,需要采用蒙特卡洛采樣的方法來(lái)估計(jì)模塊的梯度。Local Attention[17]則是在對(duì)解碼端當(dāng)前單詞預(yù)測(cè)一個(gè)相對(duì)在編碼器中的位置P,然后基于位置P給定一個(gè)窗口,只計(jì)算這個(gè)窗口中的對(duì)應(yīng)單詞的權(quán)重大小,最終得到語(yǔ)義向量C。但該方法中預(yù)測(cè)位置P的準(zhǔn)確性是個(gè)挑戰(zhàn),且在并非很長(zhǎng)的輸入序列中,對(duì)計(jì)算量的降低并不顯著。 從公式(8)可知,在計(jì)算對(duì)齊方式時(shí),解碼端輸出的每個(gè)單詞都需要計(jì)算與輸入序列的對(duì)齊方式,編碼器的所有隱藏層都要被用來(lái)計(jì)算相似性,即得到的權(quán)重向量aij的長(zhǎng)度等于輸入序列的長(zhǎng)度。Soft Attention就是通過(guò)點(diǎn)乘計(jì)算單詞之間對(duì)應(yīng)方式以確定詞之間關(guān)聯(lián)性強(qiáng)弱的方法。 Attention機(jī)制都是基于編碼端和解碼端的隱變量來(lái)計(jì)算的,得到的是輸入序列與輸出序列的依賴關(guān)系。與以上諸多Attention機(jī)制不同,Self Attention 分別在編碼端和解碼端進(jìn)行,僅與輸入序列或者輸出序列自身相關(guān),捕捉編碼端或解碼端自身的詞與詞之間的依賴關(guān)系,然后把編碼端得到的Attention加入到解碼端得到的Attention中,捕捉兩端詞與詞之間的依賴關(guān)系。Self Attention比傳統(tǒng)的Attention機(jī)制效果要好,主要原因之一是,傳統(tǒng)的Attention機(jī)制忽略了輸入端或輸出端句子中詞與詞之間的依賴關(guān)系。Self Attention的優(yōu)點(diǎn)在于不僅可以得到輸入端與輸出端詞與詞之間的依賴關(guān)系,還可以有效獲取兩端自身詞與詞之間的依賴關(guān)系以及捕獲一些代詞的意義。其缺點(diǎn)在于計(jì)算較為復(fù)雜,并且在文本摘要任務(wù)中,重點(diǎn)在于捕獲文本核心語(yǔ)義而不是詞與詞之間的語(yǔ)義關(guān)聯(lián),所以本文使用效率較高的Soft Attention。 實(shí)驗(yàn)使用哈爾濱工業(yè)大學(xué)取自于新浪微博的大規(guī)模中文短文本摘要數(shù)據(jù)集LCSTS,數(shù)據(jù)集中包含了200萬(wàn)真實(shí)的中文短文本數(shù)據(jù)和每個(gè)文本作者給出的摘要,這個(gè)數(shù)據(jù)集也是目前最大的中文段文本摘要數(shù)據(jù)集,提供了數(shù)據(jù)集分割的標(biāo)準(zhǔn)方法,表2展示了3個(gè)部分?jǐn)?shù)據(jù)集的個(gè)數(shù)。 表2 LCSTS數(shù)據(jù)組成 數(shù)據(jù)集包括3個(gè)部分: a)第一部分是本數(shù)據(jù)集的主要部分,包含了2 400 591個(gè)(短文本,摘要)數(shù)據(jù)對(duì),這部分?jǐn)?shù)據(jù)用來(lái)訓(xùn)練生成摘要的模型。 b)第二部分包括了10 666個(gè)人工標(biāo)注的(短文本,摘要)數(shù)據(jù)對(duì),每個(gè)樣本都打了1~5分,分?jǐn)?shù)是用來(lái)評(píng)判短文本與摘要的相關(guān)程度,1代表最不相關(guān),5代表最相關(guān)。這部分?jǐn)?shù)據(jù)是從第一部分?jǐn)?shù)據(jù)中隨機(jī)采樣出來(lái)的,用來(lái)分析第一部分?jǐn)?shù)據(jù)的分布情況。其中,標(biāo)注為3、4、5分的樣本原文與摘要相關(guān)性更好一些,從中也可以看出很多摘要中會(huì)包含一些沒(méi)有出現(xiàn)在原文中的詞,這也說(shuō)明與句子壓縮任務(wù)不同。標(biāo)注為1、2分的相關(guān)性差一些,更像是標(biāo)題或者是評(píng)論而不是摘要。統(tǒng)計(jì)表明,1、2分的數(shù)據(jù)少于兩成,可以用監(jiān)督學(xué)習(xí)的方法過(guò)濾掉。 c)第三部分包括了1 106個(gè)(短文本,摘要)數(shù)據(jù)對(duì),3個(gè)人對(duì)總共2 000對(duì)摘要進(jìn)行了評(píng)判,這里的數(shù)據(jù)獨(dú)立于第一部分和第二部分。本文選擇3分以上的數(shù)據(jù)作為短文本摘要任務(wù)的測(cè)試數(shù)據(jù)集。 數(shù)據(jù)的預(yù)處理階段極為重要,因?yàn)榫幋a器部分?jǐn)?shù)據(jù)的格式和標(biāo)準(zhǔn)化對(duì)整個(gè)實(shí)驗(yàn)的影響很大。上述LCSTS的PART 1部分為訓(xùn)練數(shù)據(jù),在把訓(xùn)練數(shù)據(jù)的短文本輸入和總結(jié)性摘要抽取出來(lái)后,需要對(duì)其中的一些信息進(jìn)行替換和處理: ①去除特殊字符,主要包括標(biāo)點(diǎn)符號(hào)以及常用停用語(yǔ)氣詞和轉(zhuǎn)折詞等,如:“「、」、¥、…、啊、阿、哎、而且”; ②括號(hào)里的內(nèi)容,如【開(kāi)心】,因?yàn)閿?shù)據(jù)來(lái)源于微博,會(huì)有很多動(dòng)畫(huà)表情以這種形式存在; ③將所有日期替換為T(mén)AG_DATE; ④超鏈接URL替換為標(biāo)簽TAG_URL; ⑤數(shù)字替換為T(mén)AG_NUMBER; ⑥英文單詞替換為標(biāo)簽TAG_NAME_EN。 在文本摘要任務(wù)中最常用的自動(dòng)評(píng)價(jià)方法是Rouge(automatic evaluation of summaries usingn-gram co-occurrence statistic)和人工評(píng)價(jià)。人工評(píng)價(jià)具有很大的主觀性,并且時(shí)間成本太高,效率太低。 Rouge基于摘要中n元詞(n-gram)的共現(xiàn)信息來(lái)評(píng)價(jià)摘要,是一種面向n元詞召回率的評(píng)價(jià)方法。Rouge準(zhǔn)則由一系列的評(píng)價(jià)方法組成,包括Rouge-N(N=1、2、3、4,分別代表基于1元詞到4元詞的模型),Rouge-L、Rouge-S、Rouge-W、Rouge-SU等。本文使用的評(píng)價(jià)方法包括Rouge-1、Rouge-2和Rouge-L等3種,其中Rouge-L中的L即是LCS(longest common subsequence,最長(zhǎng)公共子序列)的首字母。 Rouge-N的計(jì)算公式如下: (9) 其中:n-gram表示n元詞;{Ref Summaries}表示參考摘要,即事先獲得的標(biāo)準(zhǔn)摘要;Cmatch(n-gram)表示系統(tǒng)摘要和參考摘要中同時(shí)出現(xiàn)n-gram的個(gè)數(shù);C(n-gram)則表示參考摘要中出現(xiàn)n-gram的個(gè)數(shù)。 Rouge-L的計(jì)算公式如下: (10) 其中:LCS(X,Y)為X和Y的最長(zhǎng)公共子序列長(zhǎng)度;m、n分別表示參考摘要和自動(dòng)摘要的長(zhǎng)度(一般就是詞的個(gè)數(shù));RLCS、PLCS分別表示召回率和準(zhǔn)確率;FLCS是Rouge-L分?jǐn)?shù)。 首先使用jieba分詞包對(duì)LCSTS數(shù)據(jù)集的第一部分分詞后,選取50 000個(gè)高頻詞作為編碼器詞匯表,在詞匯表中出現(xiàn)的詞使用“UNK”表示。在設(shè)置解碼器時(shí),一個(gè)重要的參數(shù)是解碼器字典大小,在實(shí)驗(yàn)中對(duì)解碼器字典的參數(shù)做了對(duì)比試驗(yàn),分別設(shè)置2 000、5 000、80 000、11 000、14 000等5種規(guī)格的大小,通過(guò)實(shí)驗(yàn)選取最佳字典的大小。在編碼器中使用4層雙向LSTM,每一層節(jié)點(diǎn)為256,batch_size為64,定義了Bucket桶機(jī)制:buckets = [(120, 30), …],把輸入序列的句子按照長(zhǎng)度的相似程度分到不同的固定長(zhǎng)度的Bucket里面,長(zhǎng)度不夠的都添加PAD字符,標(biāo)題長(zhǎng)度限制30個(gè)詞。 用于對(duì)比的幾種方法為(后兩種為本文方法): a)Tf-idf[18]:抽取式摘要的基線方法。 b) ABS system[9]:生成式摘要的基線方法。 c) Our + att:本文普通詞向量輸入+Attention機(jī)制。 d) Our(S) + att:本文筆畫(huà)編碼詞向量+ Attention機(jī)制。 表3和表4包括了4組實(shí)驗(yàn)數(shù)據(jù)在解碼器字典大小為8 000下的實(shí)驗(yàn)結(jié)果和Rouge評(píng)分(后2組為本文的實(shí)驗(yàn)結(jié)果)。 表3 不同方法摘要對(duì)比 表4 Rouge評(píng)分結(jié)果 在表3中將本文的方法樣例分別對(duì)比了抽取式基線方法Tf-idf和生成式基線方法ABS system,在這個(gè)樣例中抽取了測(cè)試集中最具有代表性的例子,對(duì)比目標(biāo)句可以發(fā)現(xiàn),4個(gè)模型都對(duì)這段文本的摘要有不錯(cuò)的效果。本文的模型輸出的句子效果比Tf-idf和ABS system效果更好,語(yǔ)義相對(duì)來(lái)說(shuō)更加完整,且生成“華北”這個(gè)在原文中沒(méi)有出現(xiàn)的新詞,這一點(diǎn)使得它在總結(jié)地區(qū)“內(nèi)蒙古 東北部 山西 中 北部 、 河北 中部 和 東北部 京津 地區(qū) 遼寧 西南部 吉林 中部 黑龍江 中部 偏南 等 地”時(shí)達(dá)到了高度概括的效果。相比于其他兩種方法,本文模型在描述上顯得更加完整。 在表4中,通過(guò)對(duì)比4種方法的Rouge-1、Rouge-2、Rouge-L分?jǐn)?shù)發(fā)現(xiàn),生成式方法在Rouge評(píng)分是弱于抽取式方法的。主要的原因在于Rouge評(píng)分的評(píng)價(jià)標(biāo)準(zhǔn)是基于詞的相似程度,生成式方法在實(shí)際效果較好的情況下,很有可能是有一個(gè)比較差的Rouge評(píng)分。因此,本文實(shí)驗(yàn)部分,使用樣例展示和Rouge評(píng)分兩種方法直觀地表示模型效果。 在表5中,通過(guò)實(shí)驗(yàn)對(duì)比了解碼器字典大小對(duì)本文模型的影響。 表5中Ours(S)表示本文的Seq2Seq模型在使用筆畫(huà)編碼后訓(xùn)練得到的模型。當(dāng)解碼器字典大小為2 000時(shí),使用基于筆畫(huà)的編碼來(lái)訓(xùn)練模型和使用普通詞向量來(lái)訓(xùn)練對(duì)于模型效果的提升是巨大的,而且在字典大小上升的過(guò)程中,Rouge評(píng)分只上升了平均4~5分。這一點(diǎn)說(shuō)明在字典并不完整的情況下,基于筆畫(huà)的編碼通過(guò)對(duì)漢字最小單元筆畫(huà)的n-gram信息編碼,組合出了較多字典中不存在的“生僻詞”,模型在加入筆畫(huà)編碼后對(duì)字典的要求依賴降低,并且在效果上有了不錯(cuò)的提升。 表5 不同解碼器字典大小的Rouge評(píng)分 本文通過(guò)一系列自然語(yǔ)言處理技術(shù),實(shí)現(xiàn)了一個(gè)更加簡(jiǎn)明、準(zhǔn)確的中文摘要生成方法。首先,針對(duì)中文的結(jié)構(gòu)特點(diǎn)提出基于筆畫(huà)的文本向量編碼,構(gòu)造筆畫(huà)字典,通過(guò)Skip-Gram模型,構(gòu)成文本向量,完成對(duì)漢字部件信息更細(xì)致的表示任務(wù)。其次,在對(duì)文本生成上使用Seq2Seq模型加以優(yōu)化,包括在編碼器中使用Bi-LSTM,在一定程度上解決了長(zhǎng)序列文本信息丟失以及從后往前信息的補(bǔ)充問(wèn)題,使用Attention機(jī)制捕獲輸入與輸出詞之間的關(guān)聯(lián)強(qiáng)弱性,并在測(cè)試階段的解碼器中使用Beam Search優(yōu)化序列的生成效果。最后基于LCSTS數(shù)據(jù)集訓(xùn)練模型,通過(guò)Rouge評(píng)分和人工判斷兩個(gè)方面證實(shí)本文的編碼方法和模型在文本摘要可讀性上效果提升明顯。3 Seq2Seq模型的文本生成
3.1 基于Bi-LSTM的編碼器設(shè)計(jì)
3.2 基于Beam Search的文本序列生成
3.3 模型優(yōu)化
4 實(shí)驗(yàn)分析
4.1 數(shù)據(jù)集與預(yù)處理
4.2 測(cè)評(píng)方法
4.3 實(shí)驗(yàn)設(shè)計(jì)與結(jié)果分析
5 結(jié)束語(yǔ)