天天看點

深度學習在文本簡化方面有什麼最新應用進展?

雷鋒網按:本文作者譚繼偉、姚金戈,均為北京大學計算機科學與技術研究所在讀博士生,研究方向主要包括文本資訊推薦與自動摘要。

背景與介紹

近年來,機器翻譯任務依靠深度學習技術取得了重大突破。最先進的神經機器翻譯模型已經能夠在多種語言上超越傳統統計機器翻譯模型的性能。在傳統統計機器翻譯模型上積累深厚的谷歌,也終于開始将最新的神經機器翻譯系統逐漸上線。

目前神經機器翻譯的技術基礎是端到端的編碼器-解碼器架構,以源語言句子作為輸入,目智語言同義句作為輸出。容易想象,隻要具備充足的訓練資料,類似架構完全有可能推廣到其他涉及文本改寫的任務上。例如,輸入一段文字,希望系統輸出一小段核心語義不變、但更為簡潔的表達。這樣的改寫統稱為文本簡化(text simplification)。

近兩年深度學習技術應用相對較多的是其中的一個執行個體,在自然語言生成研究中一般稱為語句壓縮(sentence compression)或語句簡化(sentence simplification),即輸入和輸出均為語句。語句簡化任務要求神經網絡結構能夠編碼輸入句中的核心語義資訊,才能夠提煉出不改變原句主要意義的更簡潔表達。

深度學習技術在語句簡化上的一個典型應用是新聞标題生成(headline generation)。新聞文章通常具有較為規範的寫作形式:文章首句或者首段對新聞内容進行概括介紹,新聞标題則進一步精煉概括出新聞核心事件。目前基于深度學習技術的新聞标題生成研究中,一般以新聞文章的首句作為輸入,生成該新聞文章的标題。現有的基于深度學習的新聞标題生成工作通常采用和神經機器翻譯類似的編碼器-解碼器架構,一般不需要手動提取特征或語句改寫文法。最常見的仍然是序列到序列(sequence-to-sequence, 簡記為seq2seq)模型。典型的序列到序列模型如圖1所示。

深度學習在文本簡化方面有什麼最新應用進展?

圖1 典型的序列到序列生成模型 (sutskever et al., 2014)

在圖1中,以文本序列a-b-c-<eos>輸入給一個編碼器,編碼器用于将輸入文本編碼成一個語義向量表達(圖中對應第四個節點處的隐狀态)。輸入序列的語義向量表達進而交由解碼器用于目标文本序列w-x-y-z-<eos>的生成。這裡的<eos>表示序列結束符号(end of sequence),标志着輸入序列或輸出序列的結束。解碼器接收<eos>符号後,開始解碼的過程,直到生成<eos>符号标志着解碼過程的結束。

序列到序列模型是一個按照字元(或單詞)序列逐個處理的過程,編碼過程中編碼器逐個接收輸入字元,解碼過程中解碼器逐個輸出生成的字元。在最原始的模型訓練過程中,解碼器每次接收答案序列中的一個字元(例:w),預測應該輸出的下一個字元(例:x)。編碼器-解碼器架構的經典訓練目标,是在給定編碼器輸入後,使解碼器輸出的結果能夠最大程度地拟合訓練集中的答案,在機率模型下即最大化資料似然。

在模型預測階段,答案序列未知,解碼器接收<eos>作為解碼開始符,并生成一個輸出字元,然後将模型預測出的輸出字元作為解碼器的下一個輸入,重複這個過程直到解碼器生成<eos>符号為止。預測階段的一般目标是,給定輸入句編碼後,根據目前模型選擇機率最大的解碼器輸出結果。精确搜尋這個最優解一般複雜度極高,是以在實際應用中解碼過程通常應用集束搜尋(beam search,也可譯作柱搜尋)近似求解:在每一步保留k個最高得分的輸出,最後從k個輸出結果中選擇得分最高的作為最終的輸出。

這樣的編碼器-解碼器模型一般可以處理變長的輸入和輸出序列,使得它可以被應用于多種文本改寫任務上。形式上,給定一個包含m個詞的輸入文本序列x={x1,x2,…,xm},在模型中将每個詞xt表示成一個向量。詞的向量表示會在模型中進行學習,可以用無監督訓練得到的一般word embedding向量作為初始化。語句簡化的目标是生成輸入句x的一個簡化y={y1,y2,…,yn},一般要求y的長度比輸入句更短,即n<m。标題生成的目标是尋找y ̂使得給定x的條件下y的條件機率最大化,即:y ̂=arg⁡maxy⁡〖p(y|x;θ)〗 ,其中θ代表需要學習的模型參數。條件機率p(y|x;θ)可以由鍊式法則分解為:

深度學習在文本簡化方面有什麼最新應用進展?

編碼器一般能夠處理長度不确定的輸入文本序列,将每個詞的詞向量表示彙總,編碼成一個定長的輸入文本向量表示。這個編碼過程可以采用不同的編碼器,如卷積神經網絡(cnn),循環神經網絡(rnn)等。而解碼的過程是根據輸入文本序列生成輸出文本序列的過程,在大多數模型中,解碼器使用的是rnn,常用的rnn節點包括标準的rnn單元以及像lstm、gru這樣記憶能力更強的帶門限單元等。

rnn對序列中的每一個單元執行相同的運算過程,進而可以接受任意長的序列作為輸入。具體來說,一個标準的rnn以及其按照輸入序列展開形式如圖2所示。

深度學習在文本簡化方面有什麼最新應用進展?

圖2 标準rnn及其展開形式

在圖2中,xi是第i個輸入詞語,hi是接收xi之後rnn隐單元的狀态。hi+1基于前一個隐狀态hi和目前的輸入xi+1得到,即hi+1=f(uxi+1+whi)。f是非線性函數,如tanh或者sigmoid。标準的rnn單元在每一步輸出yi+1=g(vhi+1),g是非線性函數。

在序列到序列模型中,如果選用rnn作為編碼器,這一部分rnn的輸出(yi)一般被忽略;而rnn作為解碼器時,每一步輸出yi+1對應規模為v的詞表上所有詞語的機率分布(通常選用softmax函數将v維得分向量标準化得到),産生yi+1的過程依賴于前一步狀态hi以及前一步的輸出yi。

解碼過程中,生成單詞yi+1的方法是 :

深度學習在文本簡化方面有什麼最新應用進展?

早期的編碼器-解碼器模型中,要求編碼器結構的最後一個單元能很好地保留輸入文本的資訊編碼。而在實際應用中,這樣的定長文本編碼并不一定能夠捕捉輸入句的所有重要資訊,尤其是在輸入文本較長的情況下。為解決這個問題,有研究工作(bahdanau et al., 2015)在序列到序列神經機器翻譯模型中引入了“注意力”(attention)機制,用于在生成目标文本序列的過程中,為生成每個目标詞确定一個有注意力偏差的輸入文本編碼,使得模型可以學習輸出序列到輸入序列的一個軟對齊(soft alignment)。

注意力機制的主要思想是:在每一步生成不同的yi+1時,側重使用編碼器中對應x的不同部分的隐狀态資訊,即使用編碼器中各隐狀态ht的權重和作為生成時所需要考慮的“上下文 ”:

深度學習在文本簡化方面有什麼最新應用進展?

通過為生成不同的目标單詞學習不同的

深度學習在文本簡化方面有什麼最新應用進展?

分布,使得生成不同單詞時解碼器可以将“注意力”集中在不同的輸入詞語上。注意力權值

深度學習在文本簡化方面有什麼最新應用進展?

可以有多種不同的計算方法,一種常見的實作方法考慮編碼器每個隐狀态ht和解碼器生成詞語yi+1時的隐狀态hyi+1的相近程度(内積),将權值定義為:

深度學習在文本簡化方面有什麼最新應用進展?

初探與進展

基于編碼器-解碼器架構和注意力機制的序列到序列學習模型最初用于神經機器翻譯,但原理上可以直接照搬應用于标題生成(lopyrev, 2015; hu et al., 2015)。甚至不采用注意力機制的多層lstm-rnn編碼器-解碼器也在一般基于詞彙删除的語句壓縮任務上取得了一定效果(filippova et al., 2015)。

而神經網絡方法在語句簡化、标題生成任務上最早的應用中,比較著名的當屬sasha rush組的相關工作(rush et al., 2015)。雖然同樣是一種編碼器-解碼器神經網絡,但在具體的架構設計上和基于rnn的序列到序列學習有一定差異。

這個工作中對p(y│x;θ)應用了c階馬爾科夫假設,即生成一個新的詞語yi+1時隻依賴于之前c個已經生成的詞語yc=y[i-c+1,…,i],同時對p(y│x;θ)求對數将其分解為求和形式:

深度學習在文本簡化方面有什麼最新應用進展?

局部機率p(yi+1|yc,x;θ)定義為一個前饋神經網絡:

深度學習在文本簡化方面有什麼最新應用進展?

其中隐狀态h由上下文yc的嵌入表示y ̃c通過一層變換得到:

深度學習在文本簡化方面有什麼最新應用進展?

而enc是以x作為輸入的編碼器子產品。文中嘗試了三種不同的編碼器,分别為詞袋模型編碼器enc1、卷積編碼器enc2和注意力機制的編碼器enc3。整個模型架構比較簡單,如圖3(a)所示。

深度學習在文本簡化方面有什麼最新應用進展?

圖3 abs模型和注意力機制編碼器 (rush et al., 2015)

詞袋模型編碼器和卷積編碼器不考慮注意力機制。詞袋模型enc1定義為詞向量的簡單平均。記每個輸入詞xi為one-hot表示,左乘詞向量編碼矩陣f可以得到其對應的word embedding,整個詞袋模型編碼器可以寫作:

深度學習在文本簡化方面有什麼最新應用進展?

其中p∈[0,1]m是輸入詞語上的均勻分布,詞袋模型編碼器要學習的參數隻有詞向量編碼矩陣f。這個編碼器忽略輸入詞語序列的順序和相鄰詞之間的關系。

卷積編碼器enc2對詞袋模型編碼器不考慮詞語之間關系的特點進行了改進,采用了一種标準的時延神經網絡(time-delay neural network, tdnn),使得編碼器可以利用詞語之間的局部關系。這個編碼器包含l層,每層主要由1維的卷積過濾器q和max-pooling操作構成:

深度學習在文本簡化方面有什麼最新應用進展?

而enc3将注意力機制引入到詞袋模型編碼器中,使得enc3對x進行編碼的過程中利用到之前c個已經生成的詞語作為上下文yc。用g表示上下文編碼矩陣,模型結構如圖3(b)所示,形式上寫作:

深度學習在文本簡化方面有什麼最新應用進展?

模型訓練使用批量随機梯度法最小化訓練資料

深度學習在文本簡化方面有什麼最新應用進展?

負對數似然:

深度學習在文本簡化方面有什麼最新應用進展?

使用動态規劃(viterbi算法)精确求解這個問題的時間複雜度為o(nvc),而詞彙表大小v一般較大。前文已經提到,實際應用中一般可以采用集束搜尋近似求解,即在生成每一個yi的時候都隻儲存目前最優的k個部分解,之後僅從這k個部分解開始進行下一步生成。這樣時間複雜度被降為o(knv)。

直覺上,人工語句簡化時一般仍會保留一些原句中的詞彙。一個好的語句壓縮模型最好既能夠逐個從詞彙表v生成目标壓縮句中的詞彙,又能夠捕捉從原句中進行詞彙抽取的過程。文中(rush et al., 2015)給出了一個權衡“生成”和“抽取”的初步方案,稱為抽取式調節(extractive tuning)。本質上就是經典統計機器翻譯中的對數線性模型(och and ney, 2002),通過線性權重将多個特征組合起來定義機率:

深度學習在文本簡化方面有什麼最新應用進展?

其中α為5維權向量,對應的5維特征f包括之前模型的機率估計,以及四個和輸入句有關的示性函數特征(和輸入句存在一進制詞、二進制詞、三元詞比對或調序):

深度學習在文本簡化方面有什麼最新應用進展?

這樣的分數定義在形式上仍然根據每一步i來分解,是以不需要修改使用動态規劃或者柱搜尋進行解碼的過程。而調節權向量α的過程也可以像經典統計機器翻譯一樣采用最小錯誤率訓練(minimum error rate training, mert)(och, 2003)來完成。

這個工作完成時間相對較早,并沒有使用最适合對序列資料模組化的rnn結構。同研究組今年的後續工作(chopra et al., 2016)中,将解碼器由前饋神經網絡替換為rnn,并改變了編碼器結構:同時為輸入詞及其所在位置學習embedding,并用卷積計算目前位置上下文表示,作為解碼過程中注意力權重計算的依據。最後得到的架構中不再需要前文所述的“抽取式調節”子產品,成為更純粹的端到端系統;在gigaword資料集上的實驗結果也取得了更優的性能。

基于神經網絡的語句簡化與标題生成後續也在不同方面取得進展。目前生成類任務訓練名額主要為訓練集資料的似然函數,但生成類任務的常用自動評價準則是rouge或bleu,本質上大約相當于系統生成結果和參考答案之間關于n-gram(連續若幹個詞)的比對程度。

近期有工作嘗試利用最小化風險訓練(minimum risk training, mrt)思想(och, 2003; smith and eisner, 2006)改進神經機器翻譯,直接對bleu值進行優化。這一政策在标題生成任務上也同樣适用,隻需用類似的方式去優化訓練集生成結果的rouge值(ayana et al., 2016)。具體而言,用∆(y',y)表示任務相關的實際損失函數,如标題生成任務中将其設為生成結果y'在參考答案y上計算的rouge值(這裡表達為風險最小化問題,是以還需要取負)。訓練目标是最小化期望風險:

深度學習在文本簡化方面有什麼最新應用進展?

最小化期望風險的一個好處在于:即使原本損失函數∆(y',y)是定義在離散結構上的離散函數,訓練目标關于機率模型的參數也還是連續函數,是以仍然可以求導進行反向傳播更新參數。然而,窮舉所有可能産生的結果y’開銷過大,并不可行。是以隻在上面取一個顯著抽樣s(x;θ)來近似整個機率分布,并引入一個較小的超參數ϵ嘗試讓近似分布更為平滑:

深度學習在文本簡化方面有什麼最新應用進展?

實際上,如果固定超參數ϵ為1,這一近似計算最小化期望風險的做法就和強化學習早期工作中的reinforce算法(williams, 1992)不謀而合。近期也有工作從reinforce算法出發,對随機初始化機率模型的做法進行改進,提出首先根據正确答案用交叉熵損失學習若幹輪、得到較好的初始機率模型,然後利用退打火機制逐漸将訓練過程轉向reinforce算法(ranzato et al., 2016)。實驗表明,這些對訓練目标的改進都可以顯著改善自動評價名額所度量的性能。

另一方面,原句中可能存在模型詞彙表中所沒有的詞(out of vocabulary, oov),尤其是很多專有名詞,并不在生成詞彙的範圍v之中。實作上為了降低解碼複雜度,一般都會采用相對較小的詞彙表。如果系統不能輸出原句中的oov詞、僅能用<unk>等占位符代替,顯然有可能會造成關鍵資訊損失。

受指針網(pointer networks,一種輸出序列中每個元素分别指向輸入序列中元素的編碼器-解碼器網絡)(vinyals et al., 2015)啟發,近期已有多個工作都不約而同地考慮了一種解決思路:在解碼的過程中以一部分機率根據目前狀态來生成、一部分機率直接從原句中抽取(gu et al., 2016; gulcehre et al., 2016; nallapati et al., 2016)。

另一方面,如何利用其它任務資料作為輔助性監督資訊也是一個正在被考慮的方向。例如今年有工作在同一個多層雙向rnn網絡中進行語句壓縮、閱讀視線預測(gaze prediction)、組合範疇文法(combinatory category grammar, ccg)超标注(supertagging)的多任務學習,使得語句壓縮任務的性能得到改善(klerke et al., 2016)。這幾個任務在直覺上具有一定相關性,有機會起到互相強化的效果。

上面所介紹的架構都屬于直接對條件機率p(y│x;θ)模組化的判别式模型範疇。近期也有利用深層産生式模型來對語句壓縮任務模組化的工作。常見神經網絡結構中,自編碼器被廣泛應用于表示學習和降維,将類似思想對文本資料模組化自然也可能學習到更緊湊的表示。最近就有嘗試在變分自編碼器(variational auto-encoder, vae)架構下得到語句壓縮模型的工作(miao and blunsom, 2016)。關于一般vae模型的詳細資訊本文不予贅述,感興趣的讀者可參考相關教程 (doersch 2016)。原始的vae可以将輸入資料壓縮到低維表示,而這個工作類比提出将輸入的長句壓縮為更緊湊的短句,得到如圖4所示的自編碼壓縮模型。

深度學習在文本簡化方面有什麼最新應用進展?

圖4 自編碼語句壓縮模型

用s和c分别記原始輸入句和壓縮句,整個模型包含兩部分:

(1) 壓縮模型(圖4左下部分虛線框,由編碼器連接配接壓縮器組成)為以s作輸入、c作輸出的推斷網絡qφ (c│s)

(2) 重構模型(圖4右上部分虛線框,由壓縮器連接配接解碼器組成)為基于壓縮表示c重構原始輸入句s的生成網絡pθ (s│c)。

為了讓壓縮句中僅使用原句中出現過的詞,文中選用了指針網(vinyals et al., 2015)作為壓縮模型qφ (c│s),同時将編碼器設計為雙向lstm-rnn,壓縮器使用帶有注意機制的單向lstm-rnn。而重構模型pθ (s│c)則直接使用經典的序列到序列結構,即帶注意機制的rnn,以壓縮器端的c作輸入,從解碼器端産生原句s。

模型訓練過程中需要對兩組網絡參數φ和θ進行更新。與最原始的vae一樣,隻需要無标記資料作為輸入,使用變分推斷來優化資料對數似然的一個下界l:

深度學習在文本簡化方面有什麼最新應用進展?

其中需要計算變分分布qφ (c│s)和一個先驗語言模型p(c)的kl散度。本文讨論的任務是語句壓縮,需要同時保證壓縮句盡可能流暢和簡潔,是以預訓練了一個偏好短句的語言模型作為p(c)。

由于不易對從變分分布q中随機産生的值進行反向傳播,原始vae推斷過程使用重參數化(reparameterization)技巧,将産生樣本的随機性全部轉移到一個輔助的噪聲随機變量中,保持和參數直接相關的部分相對固定,進而可以通過對這些非随機部分求導進行反向傳播參數更新。但自編碼語句壓縮模型處理對象為離散結構的文本,重參數化技巧不能直接使用。是以文中使用了前面提到的reinforce算法,根據一組随機采樣的誤差進行反向傳播,近似最小化期望損失,并引入偏置項來降低梯度估計的方差。

vae變分推斷進行模型訓練的效率十分依賴推斷網絡q(對應這個工作中的壓縮模型部分)的梯度估計品質。為了在訓練過程初期就能引導壓縮模型産生較好的壓縮結果,文中進一步提出另一個模型,稱為強制注意力語句壓縮(forced-attention sentence compression;圖5),強制讓注意力的學習和額外的有标記語句壓縮資料更吻合。本質上是通過有監督訓練來實作前面提到的一種語句簡化政策:以一部分機率根據指針網直接從原句中抽詞(對應圖5中的α)、一部分機率根據目前狀态來生成整個詞彙表v中可能的詞(對應圖5中的β)。這樣就可以引入語句簡化任務的有标記平行語料,進行半監督學習。

深度學習在文本簡化方面有什麼最新應用進展?

圖5 強制注意力語句壓縮

局限與展望

需要指出的是,對于任何涉及自然語言生成的任務而言,像rouge、bleu那樣基于局部單元比對的自動名額并不能完全取代基于語義了解的人工評價。目前基于神經網絡的相關工作幾乎全部缺少人工對語義完整性、流暢度等關鍵名額的評分(這一點在相關論文的審稿環節理應有人指出;也有可能競标這類論文的審稿人主要來自對神經網絡了解甚于自然語言生成的研究人員)。是以不同方法的實際性能差異究竟有多少,其實尚不明确。

細心的讀者可能已經注意到,雖然本文介紹的相關文獻标題中有些包含“語句摘要(sentence summarization)”甚至“文本摘要(text summarization)”這樣的字眼,但我們在本文的描述中尚未開始使用“摘要”一詞。因為目前提出的方法大多僅能夠應用于将一兩句話作為輸入的情形,實際上隻是語句級别的壓縮或簡化。

語句簡化的最終目标仍然還是對更大範圍内的資訊摘要,比如用幾句話去概況整篇文檔中的主要内容。目前的神經網絡方法大多以短文本(如句子、微網誌)作為輸入,鮮有直接對文檔結構進行編碼的架構,最終解碼也隻能得到标題長度的資訊,尚不足以作為整篇文檔的内容總結。對于自動标題生成而言,是否隻需要去利用每篇文檔最開始一兩句話中的資訊,也仍有待商榷;這個問題在非新聞語料上可能更為明顯。另一方面,對本身已經較短的文本再做進一步簡化的實用價值,可能也無法和文檔資訊摘要相提并論。

關于文檔摘要任務,現有的基于神經網絡的模型仍以抽取式摘要(即從輸入文檔中直接抽取若幹關鍵句作為摘要)居多,此時神經網絡模型起到的作用也僅限于對文檔中每個句子進行估分、排序,這和從文檔到摘要進行端到端訓練、直接逐詞“生成”摘要的理想目标仍有距離。經典序列到序列架構在語句簡化、标題生成任務可以取得不錯的效果,但在文檔摘要任務上還沒有出現較為成功的應用。一個可能的原因在于整篇文檔篇幅過長,不适合直接套用經典序列架構來編碼和解碼。

是以,對句子和詞進行分級階層化編碼(li et al., 2015)可能是一種可以嘗試的路線。今年提出的一種端到端神經摘要模型(cheng and lapata, 2016)中,将文檔視為語句的序列,用各語句的編碼作為編碼器rnn中每個單元的輸入,而語句的編碼由一個cnn通過卷積和池化操作将詞彙級資訊彙總得到(圖6)。

深度學習在文本簡化方面有什麼最新應用進展?

圖6 cnn句子編碼作為序列到序列模型輸入(cheng and lapata, 2016)

這樣可以直接實作句子級抽取,比如文中的做法是用一個多層感覺機根據目前狀态來估計是否抽取該句的機率(pt-1表示前一句應當被抽取的機率):

深度學習在文本簡化方面有什麼最新應用進展?

為了進一步能夠通過原文詞彙重組建構和生成“非抽取式”摘要,文中提出一種階層化注意力架構,利用句子級的注意力權值作為輸入來計算句子中每一個詞的注意力權值。

深度學習在文本簡化方面有什麼最新應用進展?

圖7 詞彙級抽取(cheng and lapata, 2016)

這個工作在句子抽取上能取得一定效果,但詞彙級生成摘要仍有待提高,不論在自動評價和人工評價結果上都還不夠理想。

而另一個側重于标題生成的工作(nallapati et al., 2016)中也提出了一種階層化編碼思想:使用兩級雙向rnn分别刻畫詞和句子的序列結構,解碼過程計算每個詞的注意力權值時,用所在句子的注意力權值予以權重(reweight)。但很遺憾這樣的設計暫時也并沒有使得生成多句摘要的任務得到性能上的提升。

總而言之,目前的編碼器-解碼器架構在短文本簡化任務上取得了一定進展。現在應用于文本簡化的編碼器-解碼器架構設計也比較多樣,可以為各種不同需求下文本簡化的後續研究工作提供多種可能的參考思路。然而,深度學習方法在文檔摘要任務上仍存在巨大的提升空間。如果期望使用完全端到端的方式訓練文檔級摘要模型,可能還需要在編碼器和解碼器的設計上産生一些新的突破,使得模型可以更好地表示和生成結構性更明顯、篇幅更長的内容。

雷鋒網注:本文由深度學習大講堂授權雷鋒網(公衆号:雷鋒網)釋出,如需轉載請注明作者和出處,不得删減内容。

本文作者:深度學習大講堂