多模態文本摘要及其應用實踐

點擊上方「藍字」關注咱們算法


做者 | 鄭江、聶砂、於航
微信

編輯 | 張嬋網絡


概述架構


隨着深度學習技術的發展,NLP 領域各項任務指標、應用效果近年來都有了顯著提高,好比文本分類、命名實體識別、關係抽取、文本摘要、閱讀理解等。其中,文本摘要做爲 NLP 領域一項基礎任務,在產生參考的有意義信息方面起着愈來愈重要的做用,如新聞標題自動生成、文獻報告自動生成、電商營銷介紹內容生成、知識內容推理、搜索結果概述等多個應用領域。app


在智慧政務應用場景中,對於一些地方的扶貧產品推薦,須要爲這些產品生成相應的宣傳海報,在生成海報圖片的過程當中,對於產品標題、副標題等文案信息,也但願是自動化生成,根據實際狀況,這些產品信息每每會由商家提供一個比較詳細的文本信息說明,有可能還會配以圖片,所以是但願從這些較細緻、長篇幅的描述文本信息、結合圖片等信息,自動化的生成摘要信息。框架


目前,雖然文本摘要在 NLP 技術領域已經有了很多方法,但在實際應用上也還存在着一些挑戰,主要體如今產生摘要過程當中,但願可以準確表述原文內容的同時,也能在必定程度上提高靈活性和可讀性。less


咱們對現有主流的文本摘要方法進行了分析整理,重點分析了基於深度學習的文本摘要方法,以及結合多模態信息的摘要提取方法,並在前述場景嘗試進行應用實踐,這裏對相關工做進行簡要介紹。機器學習


自動文本摘要方法分類函數




圖1. 文本摘要方法分類

如上圖所示,文本摘要方法能夠分爲下述幾種方法:
  1. 抽取、壓縮式摘要:直接從原文中抽取已有的句子,並簡化原文中的重要句子組成摘要單元測試

  2. 理解生成式摘要:改寫或從新組織原文內容造成摘要

1
抽取壓縮式摘要

抽取、壓縮式摘要從原文種獲得摘要,主要是先經過對原文的句子進行重要性評估,在此基礎上再對信息冗餘句子進行去重,並結合摘要長度等約束條件,獲得文本摘要。 其中關鍵是對原文中句子重要性評估,目前有多種方法能夠選擇,好比經過啓發式規則、經過機器學習聚類方法、圖模型等方法(如 TextRank、PageRank 無向圖)。

好比基於機器學習的聚類方法,它會把整篇文章看作聚類中心,先計算聚類中心的向量表示,再把文章拆分紅多條完整的句子,計算全部句子向量與聚類中心向量的距離或類似度,並進行排序,取類似度得分最高的 topk 個句子做爲摘要句。

再好比基於圖的方法,以經常使用的 TextRank 算法爲例,它首先把文章分割成完整的單句,其次再計算全部句子的句向量表示,第三再計算全部句向量類似度,獲得轉移機率矩陣,第四再將轉移機率矩陣轉換成圖結構(句子爲節點、類似度得分爲邊),計算句子的 TextRank 值,最後按 TextRank 值對句子進行排序,取 topk 句子做爲文本摘要。
 
2
基於深度學習的抽取式文本摘要

抽取式摘要提取是有監督學習,是經過轉化爲序列標註任務或句子排序任務實現的。

好比 轉化爲序列標註任務,就是爲原文中的每個句子打一個二分類標籤(0 或 1),0 表明該句不屬於摘要,1 表明該句屬於摘要,並基於此訓練模型。 最終將全部標註爲 1 的句子做爲摘要。

而若是建模成句子排序任務,則是經過模型預測每一個句子做爲摘要的機率,選擇機率最大的 topk 個句子做爲摘要。 基於深度學習的抽取式摘要方法比較典型的目前是 Bert-Sum 算法,雖然 BERT 模型僅僅經過 Transformer 的 Encoder 編碼器結構進行訓練,並不擅長於天然語言生成任務,Bert-Sum 算法對 BERT 的輸入層和 Fine-Tuning 層進行了修改,使其適用於抽取式文本摘要任務。



圖2. Bert-Sum 模型結構

上圖是 Bert-Sum 算法模型結構圖,該模型在原有 BERT 模型基礎上作了改進,在輸入層將文本原文按句子分開,句子與句子中間插入 [SEP] 和 [CLS] 輸入,在 Interval Segment Embeddings 中將句子分別依次設置成 EA 和 EB,最終訓練整個模型,在  output 層拿到 [CLS] 標籤的狀態表徵,在其後再接入一層全鏈接層、RNN 或者一層 Transformer。

經過這樣的改進最終實現了一個分類任務,其做用是若是一個句子是最終文本摘要的結果,那麼這個句子輸出標籤爲 1,不是摘要則輸出爲 0,從而實現抽取式文本摘要提取。

3
基於深度學習的生成式文本摘要

   

除了抽取式摘要外,深度學習應用於文本摘要最突出的優點仍是經過其較強的語義表徵能力,建模文本中的複雜語義信息。 在這方面,採用深度學習創建生成式摘要抽取模型每每更 具優點。


圖3.深度學習生成式摘要模型架構

從 2014 年 Google Brain 團隊提出 Sequence-to-Sequence 序列模型,經過編碼器+解碼器結構能夠更好的建模複雜文本信息序列到序列的映射能力。再後來,仍是 Google 的科學家又將注意力機制引入了 NLP 領域,使得從原文編碼再解碼生成摘要時,可以更好的刻畫文本序列間的相關性,從而實現更有針對性的解碼,獲得更合理的摘要生成結果。典型的 seq2seq+attention 摘要生成架構以下圖所示:



圖4.Seq2Seq+attention 的生成式摘要抽取模型架構

再後來,Google 發佈 Transformer 模型(在《Attention Is All You Need》這邊文章),即只用 Self-Attention 和 Encoder-Decoder,實現端到端的翻譯任務。從生成式文本摘要原理看,它是把原文編碼爲向量,經過解碼這個向量來提取信息、獲取語義、造成摘要。這種模式按理和前述基於注意力的 encoder-decoder 架構是比較匹配的,但在實際套用過程當中,仍舊出現了一些須要克服的問題,主要包括:


  1. OOV 問題 :源文檔語料中詞的數量級一般會很大,但其中常用的詞數量通常相對比較固定,爲了控制詞彙表大小,在執行實際生成任務前通常會根據詞的頻率過濾掉一些詞作成詞表,這樣的作法會致使生成摘要時會遇到 UNK 的詞,即沒法解決詞表中未出現詞的 OOV 問題。
  2. 可讀性 :摘要生成最後的解碼處理一般使用貪心算法或者集束搜索方法來作,這些方法生成的句子有時候會存在不通順的問題,可能致使沒法準確再現原始文本的事實細節信息。
  3. 重複性 :因爲一些解碼方法的自身缺陷,致使模型會在某一段連續 timesteps 生成重複的詞。
  4. 長文本摘要生成 。對於機器翻譯類生成任務,輸入和輸出的內容長度大體都在一個量級上,所以生成式模型執行效果通常比較理想。但對於文本摘要,部分場景下會是對多文本、超長文本進行摘要,形成源文本長度與目標文本長度相差很大,若是採用生成方式,就須要 encoder 可以較好的對源文檔信息進行提取,而 decoder 須要可以較好的捕捉 encoder 輸出的語義,並生成摘要句子,而這一般是一個很難的任務。
  5. 在這裏咱們主要整理了基於 seq2seq+ 注意力機制的改進策略類方法和基於自注意力機制的序列生成兩類生成式文本摘要方法,前者較好的解決了前述的前三個問題,然後者對第四個問題給出了一些可行的解決方案。
 
基於 seq2seq+ 注意力機制的改進模型

基於 seq2seq+ 注意力機制的改進模型,目前效果最顯著的就是指針網絡,它是由 google 在 2018 年提出的,結合了抽取式和生成式兩方的有點,經過從原文中複製詞語,能夠再現原文的重要細節,並保留了生成文本的能力,能夠生成原文中沒有的詞語;此外,經過運用 Coverage 機制,對已經出如今摘要中的詞語,下降其注意力權重,從而下降其再次被生成的機率,在必定程度上也解決了重複生成的問題。典型的指針網絡架構以下圖所示:

圖5. 改進的 Seq2Seq+attention 的生成式摘要抽取模型架構

在原有 seq2seq 摘要抽取的模型架構基礎上,增長了指針網絡(Pointer Network)和 Coverage 機制。總體模型結構簡述以下。
 
1. 編碼器和解碼器架構 | 注意力計算 | 損失函數設計

編碼器是把文本序列輸入到 Encoder(一個雙向 LSTM)中,獲得每一個 token 對應的隱狀態(Hidden State)hi(i=1,..,n)。

解碼器是在 Decoder 中輸入一個 <START> 標記,用於預測第一個詞,從第二個詞開始,用前一個詞來預測下一個詞。在訓練階段這也稱爲 Teacher Forcing。有了編碼階段輸入序列的隱狀態序列,以及解碼階段第n步的隱狀態,能夠計算注意力權重。

在論文中,使用了 BahdanauAttention 機制計算注意力分佈,並經過注意力分佈告訴解碼器,在預測下一個詞語時,編碼器輸入的詞語哪一個更重要。並以注意力分佈爲權重,對編碼器的隱狀態序列進行加權求和,獲得上下文向量。在解碼器中是把其輸入和上下文向量拼接,再通過兩個線性層,來計算輸出單詞的機率分佈。這種處理機制也體現了注意力的本質:在解碼的每一步,會關注原文中不一樣的單詞。

解碼器逐步進行預測,每預測一個輸出詞,會進行 loss 計算,最終再把每一步預測的 loss 求和,做爲總 loss。一般的策略是對於參考樣本預測機率大的詞,loss 計算值小,而參考樣本預測機率小的詞,loss 計算值大。

2. 引入指針網絡

指針網絡的改進點主要包括;首先增長了對原詞表中未出現詞的處理,不而不是採用詞表是事先構建好的,不包含輸入文本中的 OOV 詞,每一個訓練樣本構建的詞表除了原始的詞表外,會增長訓練樣本輸入文本的詞表,也就是說每一個訓練樣本數據的詞表都是不同的,包含 global 詞表+local 詞表,其中 global 詞表爲整個語料使用傳統方法將低頻詞使用 UNK 表示,其它詞添加到詞表中,而 local 詞表是每一個訓練樣本數據輸入文本的詞表,與 global 詞表用不一樣的 id_set 表示。

所以,指針網絡須要在解碼的每一步,都計算一個機率,它由上下文向量、解碼器隱狀態和解碼器的輸入,通過一個 sigmoid 函數計算獲得。經過這個機率,來決定解碼是按原詞表的單詞機率分佈生成單詞,仍是按照原文單詞的注意力分佈複製單詞,這樣就解決了 OOV 問題。

3. 引入 Coverage 機制

Coverage 機制的引入,減小了摘要語句內容的重複問題,這主要是經過對 Attention 和 loss 計算進行改進。首先,在 attention 計算上,會在解碼過程當中,經過前一步的注意力分佈求和計算獲得一個 coverage 向量,來表示到上一步爲止,原文中每一個單詞所受到的關注程度。通常若是某個單詞以前受到的關注多,那麼在當前步,注意力機制就會給予其它單詞更多關注。其次,在 loss 計算上,論文中增長了 coverage loss,實現對以前給予太多關注的單詞進行懲罰。

基於自注意力的序列到序列生成模

雖然注意力機制、seq2seq 模型,能夠在必定程度上實現捕捉文本內容中的長程依賴, 可是對於超長文本的摘要,仍是一個比較難的問題。 結合了自注意力機制的 Trans former 模型近來在預訓練模型領域獲得了普遍應用,對於生成式文本摘要類任務,若是但願引入預訓練模型,通常是基於自迴歸語言模型,如GPT、XLNET(TransormerXL),這主要是由於生成類任務通常是從左向右預測模式,這和自迴歸語言模型自然匹配,而 Bert 等 DAE 模式匹配的不太好。 這裏對 GPT2 和 TransformerXL 的摘要抽取工做也梳理了一下。
 
1. GPT2 摘要抽取

OPENAI 的 GPT2 模型是一個基於 Transformer 結構的語言模型,源自論文《GPT:Improving Language Understanding by Generative Pre-Training》,它是「Transformer + 預訓練 + 微調」這種模式的先驅者,經過語言模型來預訓練自身,而後在下游任務微調,提升下游任務的表現。目前,一個叫 GPT2_ML 的項目開源了中文版的 GPT2 模型,幷包含了最大的 15 億參數級別的模型。


圖 6. GPT2 模型架構

上圖所示是 GPT 模型架構,它只使用瞭解碼器部分(Masked Self-Attention)。國內在中文版 GPT2 基礎上實現了摘要抽取。其主要思路是基於多輪會話模型的訓練過程進行改造,將多輪會話訓練語料中的問題|答案對改成原文|摘要對訓練語料。GPT2 模型的一個特色是針對每一個下游任務微調的模型並不通用,換一個領域進行處理,仍舊須要進行單獨的微調,這對於生成式文本摘要任務也同樣,並且因爲 GPT2 LARGE 模型 15 億參數的體積,這個對算力要求是比較大的。
 

2. 引入TransformerXL(XLNet)


Transformer 雖然對長距離文本中的語義特徵具備較好的表示能力,但對於長文本,爲了理解其語義,可能會出現須要參考先前不少詞的基礎上,才能捕獲超長距離語義特徵的狀況,這是傳統 transformer 很難處理的狀況,由於資源有限,傳統的 Transformer 一般會將語料分割爲幾百個字符的固定長度的片斷,每一個片斷(segment)之間相互獨立,單獨處理。Google 和卡梅後來在原有 Vanilla Transformer model 基礎上,提出了transformer-XL,Transformer-XL 架構在 vanilla Transformer 的基礎上引入了兩點創新:

  1. 循環機制(Recurrence Mechanism)

  2. 相對位置編碼(Relative Positional Encoding)


其中,循環機制是指 Transformer-XL 仍然使用分段的方式進行建模,但其引入了段與段之間的循環機制,使得當前段在建模的時候可以利用以前段的信息來實現長期依賴性。而相對位置編碼的引入有助於克服傳統 Transformer 中序列位置信息僅考慮段內位置編碼的狀況。TransformerXL 的這些特性使其更適合長文本語義的建模,有可能對超長文本摘要、多文本摘要類任務取得更好的效果。


多模態機制文本摘要及應用



如開始介紹的,在智慧政務應用中,對於一些地方的扶貧產品推薦,須要爲這些產品生成相應的宣傳海報,在生成海報圖片的過程當中,對於產品標題、副標題等文案信息,也但願是自動化生成,根據實際狀況,這些產品信息每每會由商家提供一個比較詳細的文本信息說明,有可能還會配以圖片,所以是但願從這些較細緻、長篇幅的描述文本信息、結合圖片等信息,自動化的生成摘要信息。

所以從效果上看,這些組成摘要的信息要素,會來源於文本、圖片等多個方面,那麼如何將視覺特性信息結合到摘要生成中,應該是以下的處理過程:
  1. 獲取必定量的商品描性文本信息、商品的圖片信息

  2. 獲取商品的摘要信息

  3. 設計擴展的商品摘要提取模型(多模態信息處理)


1
擴展摘要模型融合視覺特徵信息

基於多模態的特徵表示學習目前已經在多種類型的應用場景獲得了普遍應用,最典型的領域就是電商廣告領域,好比電商領域的基於多模態信息的商品檢索、商品推薦召回、多模態信息的智能客服交互等等。 在內容摘要領域,引入多模態信息也已有實踐,那麼對於商品的摘要信息生成,若是要引入多模態的處理,主要是要考慮多模態信息如何表示,這可能會涉及到多模態序列到序列模型中的注意力機制、多模態詞表示、多模態預訓練模型等內容。


圖7.多模態特徵序列學習的注意力機制

Libovický 等人在 ACL17 的論文中,提出瞭如何在序列到序列框架的模型下,對多模態信息進行注意力計算,如上圖所示。假設不一樣模態數據經過不通的編碼器得到向量序列隱層表示,通常能夠有三種注意力機制用於對不一樣模態特徵進行融合:

  1. 方式1—flat 模式,即平滑全部編碼器端隱層表示,使用解碼器隱層狀態對平滑後的編碼器隱層表示計算注意力得分,獲得最終注意力向量。

  2. 方式2—concat 模式,利用解碼器隱層狀態分別對不一樣模態數據序列計算得分,獲得各自的注意力向量,再將多個注意力向量進行拼接並轉換到統一維度。

  3. 方式3—hierarchical 模式,首先獲得不一樣模態對應的注意力向量,而後再利用解碼器隱層表示對不一樣注意力向量計算權重分佈,最後根據權重融合多個注意力向量。

該論文做者在多模態機器翻譯任務上的實驗發現 hierarchical 模式效果最顯著,所以以後進行多模態信息融合序列學習的各種工做通常是採用 hierarchical 模式 的注意力機制。

咱們在這裏採用基於 seq2seq+ 注意力機制的改進模型做爲 baseline,參照方式 3,引入扶貧商品的圖片信息參與摘要抽取模型的訓練。對圖片信息經過 RESNET101 網絡做爲視覺特徵編碼器,並採用 Pooling5 層輸出信息做爲視覺特徵,並使用視覺特徵參與到模型解碼器的參數初始化處理過程,原來也考慮過使用多模態的預訓練模型做爲特徵提取器,但考慮到技術棧不熟悉以及遷移學習資源開銷可能比較大,因此暫未採用。

模型的處理架構以下圖所示:


圖8. 政務扶貧產品摘要抽取模型架構
 
2
文本摘要訓練數據生成
 

對於模型的訓練數據,首先是下載業界公開的部分商品說明文本信息和摘要信息,做爲基礎數據。在此基礎上,經過爬蟲技術,參考商品摘要信息中的部分關鍵詞要素,從外部網站上爬取和相關關鍵詞匹配的網頁,獲取商品圖片信息,對獲得的商品信息,會進行一我的工的粗篩選,刪除明顯不合適的圖片信息。


此外,爲了進一步擴充訓練數據語料,經過單詞替換、回譯、半監督學習等方式,進行文本語料擴充,對於圖片信息,因爲擴充文本語料不影響圖片信息的複用,所以圖片信息沒有進行專門的數據加強處理。

3
訓練和預測
在訓練階段,使用的是標註數據,在每一步 decode 階段,會根據當前步的輸入 X,和以前步的輸出,預測當前時刻的輸出,這是一個條件機率分佈的計算決策過程。而在模型預測階段,沒有了樣本數據,實現上是但願獲得最大機率的是輸出序列,目前是經過集束搜索實現。


展望



截止到投稿,咱們這項工做還在進行中,目前實踐的方法也比較粗淺,後續還須要從模型優化、提高訓練數據質量等方面進一步提高。


 


猜你喜歡  

Python 語言中 asterisk 符號用法小結
大數據,小故事
國內外金融科技應用現狀分析及發展路徑探索
如何使用 JMockit 進行單元測試


以爲不錯,點個在看

本文分享自微信公衆號 - 金科優源匯(jkyyh2020)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索