nlp之文字摘要自動生成
當我們點開某個網站或某個新聞APP的時候,經常能看到這樣的題目:“14億人都不知道的真相,歷史的血淚……”、“刪前速看!XXX視訊流出”等,可是當我們點進去的時候,往往會發現,都是標題黨,文章和內容完全不符合!
如果這時候有一種工具能先替我們閱讀新聞,再提煉出關鍵內容,那麼我們肯定不會再受到標題黨的影響,這對我們的生活無疑會有非常大的便利。而這需要的就是“文字摘要自動生成”技術!
文字摘要充斥著我們生活的方方面面,往小了說,新聞關鍵詞的提煉是文字摘要;往寬泛看,文字摘要也可以應用在像Google、百度等搜尋引擎的結果優化中,真正實現搜尋中的“所見即所得”,“Smarter & Faster”,再也不會翻好幾頁都找不到想要的資訊了。
(Google開源的Textsum人類/機器摘要結果對比)
主流的文字摘要方式
目前主流的文字摘要自動生成有兩種方式,一種是抽取式(extractive),另一種是生成式(abstractive)。
抽取式顧名思義,就是按照一定的權重,從原文中尋找跟中心思想最接近的一條或幾條句子。而生成式則是計算機通讀原文後,在理解整篇文章意思的基礎上,按自己的話生成流暢的翻譯。
抽取式的摘要目前已經比較成熟,但是抽取質量及內容流暢度均差強人意。伴隨著深度學習的研究,生成式摘要的質量和流暢度都有很大的提升,但目前也受到原文字長度過長、抽取內容不佳等的限制。
文字摘要的發展概況
抽取式摘要是一種比較成熟的方案,其中Text rank排序演算法以其簡潔、高效的特點被工業界廣泛運用。大體思想是先去除文章中的一些停用詞,之後對句子的相似度進行度量,計算每一句相對另一句的相似度得分,迭代傳播,直到誤差小於0.0001。再對上述得到的關鍵語句進行排序,便能得到想要的摘要。抽取式摘要主要考慮單詞詞頻,並沒有過多的語義資訊,像“豬八戒”,“孫悟空”這樣的詞彙都會被獨立對待,無法建立文字段落中的完整語義資訊。
(Text rank原理如下圖所示,根據句子的相似性進行排序打分。)
生成式文字摘要主要依靠深度神經網路結構實現,2014年由GoogleBrain團隊提出的Sequence-to-Sequence序列,開啟了NLP中端到端網路的火熱研究。Sequence-to-Sequence又稱為編、解碼器(Encoder、Decoder)架構。其中Encoder、Decoder均由數層RNN/LSTM構成,Encoder負責把原文編碼為一個向量C;Decoder負責從這個向量C中提取資訊,獲取語義,生成文字摘要。
但是由於“長距離依賴”問題的存在,RNN到最後一個時間步輸入單詞的時候,已經丟失了相當一部分的資訊。這時候編碼生成的語義向量C同樣也丟失了大量資訊,就導致生成的摘要不夠準確。
Bahdanau等人在14年發表的論文《Neural Machine Translation by JointlyLearning to Align and Translate》中,第一次將Attention機制應用於NLP中。Attention機制是一種注意力(資源)分配機制,在某個特定時刻,總是重點關注跟它相關的內容,其他內容則進行選擇性忽視。就像下圖,在翻譯“Knowledge”時,只會關注“知識”.這樣的對齊能讓文字翻譯或者摘要生成更具針對性。
RNN/LSTM單元,由於每個詞是按順序輸入網路的,所以會記錄文章的序列資訊。因此,大部分的NLP任務,都是採用的RNN架構。但是這也限制了網路訓練及摘要生成的速度,因為RNN必須一個個輸入,一個個生成,無法平行計算。2016年Facebook AI Research(FAIR)發表了《A Convolutional Encoder Model forNeural Machine Translation》,對Encoder部分採用似乎不擅長處理序列資訊的卷積網路(CNN)來實現,結果在翻譯、摘要任務中,也達到了當年的最高水準。
2017年5月,還是FAIR,釋出了《ConvolutionalSequence to Sequence Learning》,第一次實現了Encoder、Decoder都採用CNN單元,使得網路在訓練階段,可以平行計算,效率進一步提升。同時引入了Multi-step Attention(多跳注意),相比之前只在最後一層生成翻譯時往回看,多跳注意使得Decoder階段生成每一層的語義向量時都往回看,進一步提升了準確度。同時還有一些其他的Trick:引入單詞的位置資訊,殘差網路,計算Attention時候對高層語義資訊和低層細節資訊,兼收並取等。最後在生成翻譯和摘要時,速度相比之前最快的網路,提升了近9倍。同時在WMT-14英德、英法兩項的單模型訓練結果中,BLEU得分達到了25.16、40.46,其中英法翻譯也是迄今為止的最高得分。
時隔一個月,17年6月,Google團隊釋出了名為《Attention Is All You Need》的文章,即不用CNN和RNN單元,只用Self-Attention和Encoder-Decoder Attention,就完全實現了端到端的翻譯任務。並且在WMT-14英德、英法翻譯任務中,BLEU值達到了28.4和41.0的高分。因為同樣可以平行計算,模型的訓練及生成速度也有所提升。Self-Attention相比於之前的模型更加關注句子的內部結構,也就是word-pairs的資訊,附圖是論文中Attention視覺化的結果,可以發現僅在源文端,模型便學習到了“making more difficult”的word-pairs資訊。
同理對目標端,模型也會單獨學習句子的內部結構資訊。之後利用Encoder-Decoder Attention建立源文和目標片語、句子的對應關係。相比於FAIR的卷積模型到很高層才能看到句子的完整資訊,Self-Attention在第一層便巧妙地建立了每個詞和整個句子的聯絡,同時位置編碼採用三角函式的相對位置法表示,理論上可以泛化到訓練中未見過的更長長度句子的翻譯中。目前Self-Attention僅用在了翻譯任務中,但這樣的思想,在文字摘要自動生成的任務中,也是可以參照的。
(Google Transformer模型的拆解)
總結:
從傳統的Textrank抽取式,到深度學習中採用RNN、CNN單元處理,再引入Attention、Self-Attention、機器生成摘要的方式,這些跟人類思維越來越像,都建立在對整段句子的理解之上。與此同時生成摘要的效果,也常常讓我們驚豔。
但文字摘要自動生成依然還有很多難題,比如如果段落太長,那麼機器對段落的理解時間就要很長,而過長的時間會導致機器對段落資訊的記憶的損失。而且深度學習非常依賴有標籤的樣本,標註工作也是一筆非常大的開銷。
總的來說,文字摘要自動生成是個非常具有前景但也非常具有挑戰性的技術。