如何用NLP技術和標題黨說拜拜-文本摘要

點這裏排版好

拖延症 拖了一個星期 ?‍♀️
然後在查文獻的時候 發現中文的資料比較少 於是

文本摘要 算是NLP領域一個還實用的細分領域吧

其實按我的理解 文本摘要 是一個披着NLP外衣的CV領域內容(至於爲什麼 請dalao往下面看)

想想一下 每每看見震驚 公交車上? 有男子做出如此不堪的事這樣的標題

可能不自覺的就腦補 一些 你以爲會發生的事

結果 點開 鏈接 發現 這根本就不是你想想的那會事

然後 你會痛罵一身標題黨 小gg 然後默默的關閉了網頁

如果在你點開鏈接之前 已經有一個整理好的概述 這個時候 是不是標題黨 就一目瞭然了

文本摘要 解決的 就是 在大數據環境下 如何利用NLP技術 對文章進行概括

feature era

早在上世紀五十年代 就有學者開始研究Text Summarization問題 提出利用諸如詞頻 首段 首句 標題等等一些特徵值 對文章進行自動化概括

本質上來說 這些 都是屬於特徵工程範疇的工作 利用一些人類認知上的明顯的特徵關係 找到文章與生成的摘要之間的匹配關係

當然可以想象到 純人力挖掘 特徵 能達到的效果有限

但限於 算力的制約 一直到近年 隨着深度學習在ImageNet上嶄露頭角 才稍有起色

[外鏈圖片轉存失敗(img-MDHFcY2t-1566641443683)(https://cdn.nlark.com/yuque/0/2018/png/104214/1545572810420-c4c705a5-0298-43cc-bc13-2170720f9236.png "")]

Extractive Vs Abstractive

因爲我們已經對NLP領域問題分析的套路 已經有一些 認識

以上的 思路 主要是從 文本中原有信息 根據人類普遍意識上的認識 提取出對應於文章的一段文字 這是一種Extractive方法

很容易想到 除了 抽取之外 還可以通過對NN Output的參數 進行 decoder操作 進行Abstractive操作

生成式的思維 其實 更 符合人類習慣 但 相對於 現有的技術而言 效果 會比較差

之前 我們 在多輪檢索式對話中 分析的 也是抽取式的模型

我們對 檢索式的大致套路 已經 有所 瞭解

先對 原有的文本做一個表示 可以是word 粒度的 也可以是上下文粒度的

在QA問題上 從基於表示的思路變換到基於交互的思路

但 QA問題和摘要問題 側重點 不太一樣

QA 更 能反映NLP問題的時序性 對話中 上一句 接着 下一句

在對話過程中 Topic很重要 非停用詞很重要 語言風格也很重要 但Topic可能變化 語言風格也可能變化 停用詞 也許會變成至關重要的

對話系統側重 抓取時序上的信息

而Text summarization這個問題中 側重於Topic的挖掘 時序上的信息 變得沒那麼重要

直觀上感受 文本挖掘 只要從一篇已有的文章中 從排好隊的詞陣列 中 抽取這篇文章最重要的詞 組成它的摘要

這一點 就和 圖像識別 很類似-從一張已有的圖片中 根據像素分佈 抽取出 能代表周圍一塊區域的特徵

所以 目前 Text Summarization 領域中 效果比較好的還是CNN與seq2seq結合的模型

(當然QA也一樣 會用到CNN 那裏的CNN做的 也同樣是抽象的功能)

Extractive

抽取特徵的思路 可以分爲 抽取主題 和 抽取指示符

  • 抽取主題 方法, 比如說 淺語義LSA、LDA 詞頻 主題詞 貝葉斯 et al.
    • 這種方法 側重於 試圖 尋找語義上的 主題
  • 指示符(你可以粗暴的理解爲特徵):
    • 比如說: 句子長的可能是更重要的 在文檔中位置靠前的可能更重要 具有Title中某些詞的句子可能更重要

Extrative 然後 根據 這些 方法 對每個句子進行 一個評分的操作

然後一樣的套路根據這個評分 召回可能重要的k個句子

再對這k個句子 做加工 比如說貪心的認爲@1的是這個文章的摘要 也有模型針對最大化整體一致性最小化冗餘進行優化

除了 抽取特徵的思路之外 還有基於知識庫(對vertical domain 進行分析)

Topic Words

在Toipic word是的思路下 有諸如

  • 詞頻閾值: 詞頻超過一個閾值的情況下 它就是主題詞
  • 主題簽名詞: 有些時候 主題 可以通過多種多樣的詞語表示 每個主題簽名詞的詞頻並不一定高
    • 通過建立對數似然估計檢驗 來 識別 這些 主題簽名詞
    • 可以是計算主題簽名詞數量的頻次 (偏向長句子)
    • 也可以是計算主題簽名詞的佔比句子中總詞數的比例 (偏向高主題詞密度句)

Frequent-driven

詞頻方法 較爲簡單 主要是直接算詞頻 或者 利用Tf-Idf計算詞頻

Latent Semantic Analysis

淺語義 主要 就是 做矩陣分解 計算SVD 那麼得到的中間矩陣就可以看作爲原矩陣的Topic

當然 LSA之後 還有基於Dirichlet分佈的LDA

Graph Method

基於PageRank的思想 把文章 抽象爲graph 其中句子 代表graph中的節點 邊權值則爲句子和句子之間的相似度

最簡單的相似度的做法 就是 Tf-idf

要想獲得更好的效果可以 嘗試 用一下QA中使用的基於基於交互、雙向GRU、Transform等等辦法

計算出 各邊值之後 就按照PageRank的思路 計算 重要節點 這些重要節點 就是我們需要的摘要句子

講到這裏 我們不難想到 如何 把之前多輪檢索式對話系統 中 用到的計算context-reply之間關聯度的方法 用在這裏

可能會有不錯的效果 但 老年人 不能安逸與現狀 對吧 檢索式 我們做過了 生成式 還沒有實踐過 so ?

Graph方法 比較有名的 比如說LexRank, TextRank

Mechanical Learning

本質上 抽取式文本摘要 也是 一個分類問題 把所有文本 分類爲 是文本摘要 和 不是文本摘要的

分類問題 就有很多操作的空間 比如說 用樸素貝葉斯 決策樹 SVM HMM

但 樣本集標註信息 較難取得 故有學者提出半監督的模型

通過同時訓練兩個分類器 每次迭代時 把具有最高分的未標記訓練集扔到標記訓練集中 以此迭代

Abstractive

隨着NN及seq2seq對機器翻譯上表現出的顯著提升

相應的技術也逐漸應用在Text Summarization領域上

實際上 在文本摘要這個領域中 很多技術是借鑑與機器翻譯的

比如說受到NMT(Neural Machine Translation)中Attention和NN的應用的啓發,有學者提出NNLM(Neural Network Language Model)結構

之後 有人用RNN代替NNLM 比如說ABS什麼的

在這樣的模型中會出現幾個問題

  • 不能像抽取式一樣獲取到文本的重要消息
  • 無法處理OOV(out-of-vocabulary)問題
    • 當然我覺得OOV是預處理不好產生的問題
    • OOV就是test dataset中存在train model建立的詞表中沒有的詞
    • 像這個問題 可以簡單粗暴的把OOV用零向量或者<UNK>代替 丟到NN中訓練
    • 也可以用char-level粒度的模型
    • 要麼優化你的分詞器
    • 再有就是用FastText
  • 然後還有一個比較關鍵的是詞句重複
  • Seq2seq模型還會出現exposure bias訓練與預測結果不一致
    • Exposure bias指的是訓練時,輸出是有真實的輸入決定的; 而預測時,輸出由前一個生成的輸出決定的,這就導致因爲生成的誤差累計造成最後一層輸出較大的偏差
    • 訓練和預測評價不一致是因爲我們在評價這類問題使用的是不可微分的指標比如說ROUGH,而Loss函數用的是對數似然估計不一致。這個可以通過強化學習(RL)來緩解
    • 有很多學者基於RL做了一些工作 有不錯的結果

我們知道在NLP中 處理語句時序信息的分析 常見的套路就是RNN系 什麼LSTM Bi-LSTM GRU Bi-GRU

但在數據量比較的大的時候 比如說海量文本摘要分析這個問題上

RNN因爲要前後迭代 複雜度 較大 會出現梯度消失 梯度爆炸?的問題 (其中有學者提出梯度範數裁剪解決這個問題)

因爲Text Summarization 這個問題 沒有 QA那麼強的時序性要求 實驗發現利用CNN也有較好的效果

在這種CNN-seq2seq模型中 先用一個encoder的CNN把原文映射到Hidden層上去 然後根據這個Hidden層輸出的值 再用一個decoder的CNN輸出生成的摘要

[外鏈圖片轉存失敗(img-ANMJzYPL-1566641443684)(https://cdn.nlark.com/yuque/0/2018/png/104214/1545614892194-3d023a02-8a9f-4ac7-997e-080cecb10cb0.png "")]

ConvS2S

[Jonas Gehring et.al. ICML 17]

ConvS2S = Convolutional Sequence to Sequence Learning

這篇論文是Facebook工作很久的產物 去年發出來 和 現在Bert差不多的效果

CNN相較於RNN而言 可以並行 而且不會出現梯度消失 可以更好的選取長距離的信息(這 太像Transform了吧)

[外鏈圖片轉存失敗(img-27bdfFlX-1566641443685)( https://cdn.nlark.com/yuque/0/2018/png/104214/1545617656324-d32ba8b1-94b9-4a4c-8cdb-11c793abe0b4.png "")]

ConvS2S 採用的是帶Attention的Encoder-decoder結構 其中encoder和decoder用的是相同的卷積結構

(在ConvS2S上面 我看到了Bert的影子)

首先 ConvS2S 採用了Transform 或者說Bert 中使用的Position Embedding 然後 也是和Bert一樣 簡單粗暴的把Position Embedding 和 word Embedding加和在一起

我們再來複習一下Bert 可以發現Bert的word Embedding比他好一丟丟(類似完形填空的深度雙向Encoding) 除了上述兩個Embedding之外 還加了一個句粒度的負採樣Segment Embedding

只不過 在這裏 處理好的Embedding是丟到CNN中訓練 而不是丟到Attention中訓練

在ConvS2S中 除了 傳統的CNN之外 還有一層 Multi-step Attention

這裏的 Attention 權重 是由當前層decoder輸出 和 所有層 encoder加權決定的

這樣使得模型 在考慮下一個decoder的時候 之前已經Attention過的詞 也能佔到不少的權重

ConvS2S使用GLU做gate mechanism

然後 ConvS2S還進行了梯度裁剪 權重初始值等優化 使得模型很快 很work

最後將decoder輸出與encoder的輸出做dot 構造 對齊矩陣

Topic-ConvS2S

[Shashi Narayan et.al. EMNLP 18]

這篇文章是愛丁堡大學的dalao在今年EMNLP上發表的成果

之前我們做的Text Summarization多少都用到點抽取到的信息即使是生成式的任務

這篇文章想完成一個極端概括的任務 把大段的文章用一句話概括

這個任務 就和 文章的Title 不一樣 Title目的是讓讀者有興趣 去閱讀這篇文章

而概括這是需要考慮到散佈在文章各個區域的信息

Topic-ConvS2S主要的工作 一個是建立XSum DataSet 然後就是把Topic 和ConvS2S結合在一起

模型利用LDA獲取一層Topic Sensitive Embedding

ei=[(xi+pi);(tie_i=[(x_i+p_i);(t_i&#x27;tD)]Rf+ft_D)]\in R^{f+f&#x27;}

其中xix_i爲word Embedding, pip_i爲Position Embedding, tit_i爲文檔中單詞的分佈, tDt_D爲文檔中主題的分佈

通過構造eie_i來獲取關於Topic的Embedding信息

其他的和ConvS2S基本一致 同樣用到兩個相同的encoder-decoder卷積結構 同樣是Mult-step Attention 連圖都很像是吧

[外鏈圖片轉存失敗(img-nsJuzPMY-1566641443685)(https://cdn.nlark.com/yuque/0/2018/png/104214/1545621752061-3112c470-8406-40fc-a215-2c912a25ed10.png "")]

RLSeq2seq

[Yaser Keneshloo et.al. sCCL 18]

前面我們seq2seq的使用時 會出現 Exposure Bias訓練與預測評價不一致的問題

強化學習就是來解決這個問題的一種方式

強化學習 就是 通過一些獎懲使得 向某一目標 學習 以期習得針對任意給定狀態的最佳行動

在本模型的獎懲 就是 當生成完整個句子之後 通過ROUGE等評估方法得到的反饋

這樣 原來因爲 交叉熵計算出的Loss 與 評價體系 Rough 不一致的問題 就能夠 得到解決

[外鏈圖片轉存失敗(img-IgTitF9C-1566641443685)(https://cdn.nlark.com/yuque/0/2018/png/104214/1545614892194-3d023a02-8a9f-4ac7-997e-080cecb10cb0.png "")]

Reinforced Topic-ConvS2S

[Li Wang et.al. IJCAL 18]

這篇是騰訊聯合哥倫比亞、蘇黎世聯邦理工發佈的基於Topic-ConvS2S的 Text Summarization論文

實際上 你可以發現 論文 基本和前面的Topic-Convs2S 一致 只是增加了RL的內容

目測應該是同期論文 否則根本發佈出去

雖然在Topic上面用的也是LDA 一樣是在預處理階段對Topic進行劃分

但前面的Topic-ConvS2S是把原來的word Embedding和Topic獲得的信息 直接相加

在本文 利用一個Joint Attention 再加上Bias Probability來實現與word Embedding的結合

之後 在Loss函數的地方 利用強化學習中self-critical sequence training (SCST)

使得不可微分的ROUGH指標最大化

在訓練過程中 根據輸入序列X生成兩個輸出序列

我們先貪心地選擇能使得輸出概率分佈最大的單詞作爲第一序列y1

再加上從分佈中採樣中生成的另一個輸出序列y2

於是這兩個序列獲得的ROUGE分數則是強化學習的Bonus

CAS

[Angela Fan et.al., ACL 18]

CAS = Controllable Abstractive Summarization

這篇論文 是之前facebook發ConvS2S 那個團隊的後續 工作

字面意思 就是 可控的生成式摘要

目前的文本摘要 對於所有人 顯示的摘要 一樣

但其實這是很不友好的 比如說一個吳亦凡 和 黃子韜 兩個人的新聞 結果你只是吳亦凡的粉絲 不想看到濤濤相關的內容

這個時候 就需要 能夠控制Text Summarization長度 內容的摘取

文章從下面幾個角度 對個性化進行研究

  • Length-Constrained
  • Entity-Centric
  • Source-Specific
  • Remainder

Evaluation

實際上 文本摘要 問題在模型效果判斷上面 較爲難處理

目前來說 Rough 效果一般 但總不能用人工評價吧

Rough是一個模型評價集合,其中

  • Rough-n 基於召回率的評估,預測結果與參考摘要之間的公共n-gram數/參考摘要內的n-gram數
  • Rough-L 基於最長公共子序列LCS 公共子序列越長 evaluation越高
  • Rough-SU 可不連續的bi-gram 和 uni-gram 相較於Rough-n 不要求gram連續

Reference

  1. Text Summarization Techniques: A Brief Survey [Mehdi Allahyari et al. Eccv 2017]
  2. Neural Abstractive Text Summarization with Sequence-to-Sequence Models [Tian Shi et al. 2018]
  3. Convolutional Sequence to Sequence Learning [Jonas Gehring et.al. ICML 17]
  4. Don’t Give Me the Details, Just the Summary! Topic-Aware Convolutional Neural Networks for Extreme Summarization [Shashi Narayan et.al. EMNLP 18]
  5. Deep Reinforcement Learning for Sequence-to-Sequence Models [Yaser Keneshloo et.al. sCCL 18]
  6. A Reinforced Topic-Aware Convolutional Sequence-to-Sequence Model for Abstractive Text Summarization [Li Wang et.al. IJCAL 18]
  7. Controllable Abstractive Summarization [Angela Fan et.al., ACL 18]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章