拖延症 拖了一個星期 ?♀️
然後在查文獻的時候 發現中文的資料比較少 於是
文本摘要
算是NLP領域一個還實用的細分領域吧
其實按我的理解 文本摘要
是一個披着NLP外衣的CV領域內容
(至於爲什麼 請dalao往下面看)
想想一下 每每看見震驚 公交車上? 有男子做出如此不堪的事
這樣的標題
可能不自覺的就腦補 一些 你以爲會發生的事
結果 點開 鏈接 發現 這根本就不是你想想的那會事
然後 你會痛罵一身標題黨 小gg
然後默默的關閉了網頁
如果在你點開鏈接之前 已經有一個整理好的概述 這個時候 是不是標題黨 就一目瞭然了
文本摘要 解決的 就是 在大數據環境下 如何利用NLP技術 對文章進行概括
feature
era
早在上世紀五十年代 就有學者開始研究Text Summarization
問題 提出利用諸如詞頻 首段 首句 標題等等一些特徵值 對文章進行自動化概括
本質上來說 這些 都是屬於特徵工程
範疇的工作 利用一些人類認知上的明顯的特徵關係 找到文章與生成的摘要之間的匹配關係
當然可以想象到 純人力挖掘 特徵 能達到的效果有限
但限於 算力的制約 一直到近年 隨着深度學習在ImageNet上嶄露頭角 才稍有起色
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輸出生成的摘要
ConvS2S
[Jonas Gehring et.al. ICML 17]
ConvS2S = Convolutional Sequence to Sequence Learning
這篇論文是Facebook工作很久的產物 去年發出來 和 現在Bert差不多的效果
CNN相較於RNN而言 可以並行 而且不會出現梯度消失
可以更好的選取長距離的信息(這 太像Transform
了吧)
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
⊗
其中爲word Embedding, 爲Position Embedding, 爲文檔中單詞的分佈, 爲文檔中主題的分佈
通過構造來獲取關於Topic的Embedding信息
其他的和ConvS2S基本一致 同樣用到兩個相同的encoder-decoder
卷積結構 同樣是Mult-step Attention
連圖都很像是吧
RLSeq2seq
[Yaser Keneshloo et.al. sCCL 18]
前面我們seq2seq的使用時 會出現 Exposure Bias
和訓練與預測評價不一致
的問題
強化學習就是來解決這個問題的一種方式
強化學習 就是 通過一些獎懲使得 向某一目標 學習 以期習得針對任意給定狀態的最佳行動
在本模型的獎懲 就是 當生成完整個句子之後 通過ROUGE等評估方法得到的反饋
這樣 原來因爲 交叉熵計算出的Loss 與 評價體系 Rough 不一致的問題 就能夠 得到解決
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
- Text Summarization Techniques: A Brief Survey [
Mehdi Allahyari et al. Eccv 2017
] - Neural Abstractive Text Summarization with Sequence-to-Sequence Models [
Tian Shi et al. 2018
] - Convolutional Sequence to Sequence Learning [
Jonas Gehring et.al. ICML 17
] - Don’t Give Me the Details, Just the Summary! Topic-Aware Convolutional Neural Networks for Extreme Summarization [
Shashi Narayan et.al. EMNLP 18
] - Deep Reinforcement Learning for Sequence-to-Sequence Models [
Yaser Keneshloo et.al. sCCL 18
] - A Reinforced Topic-Aware Convolutional Sequence-to-Sequence Model for Abstractive Text Summarization [
Li Wang et.al. IJCAL 18
] - Controllable Abstractive Summarization [
Angela Fan et.al., ACL 18
]