转载请注明本文出处
1 摘要
这个模型达到2017年的state-of-art
两大优势:
- 提出了一套简洁明了的公式,很好地解释了从一些抽象特征: 信息内容(information content),显著度(salience),新颖度(novelty) 到预测结果的过程
- 提出了一种新的训练机制,可以使用生成式训练机制来训练这个抽取式模型
2 介绍
自动文档摘要方法主要分为抽取式(extractive)和生成式(abstractive)
抽取式方法旨在从文档中选择显著的片段,句子或段落,而生成式方法旨在简明地解释文档中的信息内容。
2.1 传统的抽取式技术
1.贪心算法:《The use of mmr, diversity-based reranking for reordering documents and producing summaries》
2.基于图的算法:《Graph-based lexical centrality as salience in text summarization》
3.基于约束优化的方法:《A study of global inference algorithms in multi-document summarization》
2.2 目前以神经网络为主的抽取式技术
1.递归自编码器: 《Extractive summarization using continuous vector space models》
2.用卷积神经网络进行多文档摘要:《Optimizing sentence modeling and selection for document summarization》
3.另一种使用CNN进行多文档摘要的方法:《Attsum: Joint learning of focusing and summarization with neural attention》
2.3 最近几年的用于生成式技术的神经网络模型
1.出现:《Neural machine translation by jointly learning to align and translate》
2.使用带注意力的前馈神经网络进行标题生成:《A neural attention model for abstractive sentence summarization》
3.seq2seq架构:《Sequence-to-sequence rnns for text summarization》
本文是建立在3.(2), 3.(3)基础上, 改进后的一种抽取式模型
2.4 主要贡献
1.提出了SummaRuNNer, 一个简单的RNN抽取式模型但是达到了2017年的state-of-art
2.几个简单公式形象地阐明了模型的决策过程
3.提出一种新的训练机制,可以从人类生成的摘要数据中去训练抽取式模型
3 SummaRuNNer原理
本质上是一个深层双向RNN(2层, 双向, 以GRU为单元)

其中的GRU公式:

自己的一点理解:
u
j
u_j
uj与
r
j
r_j
rj 因为加了
σ
\sigma
σ ,所以算门控信号。
r
j
r_j
rj参与了
h
j
′
h_j{'}
hj′,即
j
j
j时刻的候选隐藏状态向量的创建过程,这里
r
j
r_j
rj起到了控制记忆上一时刻状态
h
j
−
1
h_{j-1}
hj−1的作用
当前时刻的隐藏状态
h
j
h_j
hj由
u
j
u_j
uj控制,这里
u
j
u_j
uj起到记忆上一时刻状态作用,
1
−
u
j
1-u_j
1−uj起到遗忘现在的候选状态作用。
用一个变量
u
j
u_j
uj控制了最终的保留记忆和选择性遗忘两个事情,不得不说这是个巧妙的设计
两层中, 第一层是词级(word-level)的, 即
x
j
x_j
xj是句子中第
j
j
j个词embedding后的向量
第二层是句子级(sentence-level)的, 即
x
j
x_j
xj是文档中第
j
j
j个句子所属的在第一层中的各个词的隐藏状态,经过average-pool, concatenate操作得到的一个新的向量
怎么表示整篇文档呢?用下面的公式:

N d N_d Nd代表句子数, h j f \bold{h}_j^f hjf代表第 j j j句前馈层的隐藏状态向量, h j b \bold{h}_j^b hjb代表第 j j j句反馈层的隐藏状态向量, 中括号代表向量连接操作, 相当于用一个关于句子层的隐藏状态变量的非线性变换,来表示某篇文档
那么,决策过程又是如何的呢? 这篇文章用二分类来判定某个句子是否应该在摘要中出现,这个判定过程是怎么用公式来描述呢?

这是本文的另一个核心,这个公式具有特别好的解释性!
这里面,
s
j
\bold{s_j}
sj比较难理解:

作者的说法:
sj is the dynamic representation of the summary at the jth sentence position
这是文章作者创建出的一种概念,作者说它是句子的动态表示,个人理解为是一种句子的前文关系, 数学上看就是之前的隐藏状态的加权和,这里权重是 P ( y i = 1 ∣ h i , s i , d ) P(y_i=1 | \bold{h_i}, \bold{s_i}, \bold{d}) P(yi=1∣hi,si,d), 即第 i i i句话能被纳入摘要的概率
回到公式(6),
W
c
h
j
W_c\bold{h_j}
Wchj代表第
j
j
j句话的信息,
h
j
T
W
s
d
\bold{h_j}^TW_s\bold{d}
hjTWsd拿第
j
j
j句话的状态信息与文档信息做乘积来代表这句话在整篇文章中的显著度信息(salience),
h
j
T
W
r
tanh
(
s
j
)
\bold{h_j}^TW_r\tanh(\bold{s_j})
hjTWrtanh(sj)拿第
j
j
j句话的状态信息与前
j
−
1
j-1
j−1句话的信息做乘积,反应的是第
j
j
j句话的冗余度信息(redundancy), 公式(6)中对这项取了个负号,变成了新颖度信息(novelty)
p
j
a
\bold{p_j^a}
pja代表第
j
j
j句话在文档中的绝对位置(absolute position), 其实就是
j
j
j, 代表第多少句话
p
j
r
\bold{p_j^r}
pjr代表第
j
j
j句话在文档中的相对位置(relative position), 这个是说如果把文章分为固定数量的段,比如10段,依次给每一段分配段号,计算出第
j
j
j句话的段号
W
a
p
p
j
a
W_{ap}\bold{p_j^a}
Wappja代表第
j
j
j句话的绝对位置重要程度
W
r
p
p
j
r
W_{rp}\bold{p_j^r}
Wrppjr代表第
j
j
j句话的相对位置重要程度
知道了每一句话的判定过程,那么训练时的损失函数呢?

嘛,无非就是交叉熵(感觉二分类问题常用这个),再把N篇文档的计算结果加起来
4 训练方式
这篇文章有利用抽取式数据和生成式数据两种训练方式:
4.1 抽取式训练(Extractive Training)
理想的情况: 每句话都有标注(0或1)
不过如果是生成式摘要用的数据集(gold summaries), 就需要转化一下,作者使用了一种无监督的方法:从文档中选择能使匹配的gold summaries中的Rouge-Score最大的句子, 因为达到全局最优很难,所以作者采用了一种贪心策略: 每次选择让Rouge-Score最快地上升的一个句子加入最后的摘要, 当加入句子不能提升Rouge度量时结束。
本文采用了3种Rouge度量: Rouge-1、Rouge-2、Rouge-L
这篇文章详细讲解了这几种度量: 自动文摘评测方法
4.2 生成式训练(Abstractive Trainning)
生成式训练不需要对每个句子生成0-1标签,而是对模型第二层(sentence-level)增加一个RNN解码器
(此解码器与SummaRunner的信息交互只有
s
−
1
\bold{s_{-1}}
s−1)

这里对GRU的公式做了一定修改, 主要是加了
s
−
1
\bold{s_{-1}}
s−1这一项。
将
s
−
1
\bold{s_{-1}}
s−1作为输入的一部分,再将
x
k
\bold{x_k}
xk即隐藏状态连接,每一层隐藏状态都被装了一层softmax层, 这个能够得出每个词的概率,通过这个概率可以产生一个新的词
x
k
+
1
\bold{x_{k+1}}
xk+1,再把它和
s
−
1
\bold{s_{-1}}
s−1一起作为下一连接单元的输入

上面两个公式,第一个拿来计算第
k
k
k步时的输出值,第二个softmax用来计算每个词的概率。
这种训练方式的损失函数有变化(毕竟不是做成0-1分类问题,不能继续用交叉熵):

使这个函数最小就行
N
s
N_s
Ns是参考摘要的词数。最小化这个函数无非是让其“最容易产生参考摘要"
5 相关工作
- 用序列分类器的思路来做(抽取式)文档自动摘要很早就有了,不过他们用的是CRF模型,牵涉到手动设计的各种特征: 《Document summarization using conditional random fields》
- 将人工提取的摘要用作抽取式模型的思路,本文采取一种贪心策略,和以前某篇文章特别相似: 《Enhancing single document summarization by combining ranknet and third party sources》,后面又有人提出了优化的思路来做(基于ILP的方法): 《Tgsum: Build tweet guided multidocument summarization dataset》
- 绝大部分用作单文档摘要的可用数据集,大小都达不到训练深度学习模型的要求,最近两篇论文提出了新的语料库解决了这个问题: 《Abstractive text summarization using sequence-to-sequence rnns and beyond》、《Neural summarization by extracting sentences and words》,语料库基于CNN/Daily Mail,包括280000条文档以及对应的人工生成摘要。《Neural summarization by extracting sentences and words》这篇论文提出的抽取式模型最接近此文的效果,不过他们使用seq2seq架构,此文在训练抽取式模型时没有用decoder,或许能减少一些需要训练的参数。而且此文的训练方式新颖,中途还是无监督的。
6 实验与结果
6.1 语料
使用《Teaching machines to read and comprehend》构建的CNN/Daily Mail语料库
此文效果需要与《Neural summarization by extracting sentences and words》对比抽取式模型的效果,还要与《Abstractive text summarization using sequence-to-sequence rnns and beyond》对比生成式模型的效果,使用数据集为CNN/Daily Mail的结合:
训练数据: 196,557 条
验证数据: 12,147 条
测试数据: 10,396 条
平均每个文档有28句话,每个参考摘要有3-4个句子,训练集中每个文档的平均词数是802
格外,使用DUC 2002语料库作为测试集的补充
6.2 验证
为了与上述提到的两篇论文作对比,一共提出了Rouge-1, Rouge-2, Rouge-L三种度量
6.3 基准(baseline)
- 在所有数据集上,使用Lead-3模型作为基准(简单地提取文档的前3句话作为摘要)
- 在Daily Mail以及DUC 2002数据集上也采用了一种叫LReg的模型,一个逻辑回归分类器(《Neural summarization by extracting sentences and words》中的baseline)
- 在DUC2002 语料库上,使用了基于ILP(整数线性规划) 的模型(《Automatic generation of story highlights》), 还使用了基于图的模型: TGRAPH (《Topical coherence for graph-based extractive summarization》), URANK (《Towards a unified approach to simultaneous single-document and multidocument summarizations》), 当然还有主要对比那两篇论文(达到2016的state-of-the-art)
6.4 SummaRuNNer参数设置
word2vec: 100维,初始embdding是在CNN/Daily Mail训练的
词汇表大小: 150K
每个文档的最大句子数: 100
每个句子的最大词汇数: 50
模型隐藏状态向量大小: 200维
训练batch: 64
训练优化器: adadelta
正则化手段: gradient clipping与early stopping
同时使用抽取式与生成式来训练SummaRuNNer(生成式的时候用SummaRuNNer-abs来表示)。因为数据非常imbalance,所以不是粗暴的直接将 P ( y ) ≥ 0.5 P(y) \geq 0.5 P(y)≥0.5的作为摘要,而是将句子的输出概率进行逆排序进行选择。
6.5 在Daily Mail语料库上的结果
6.6 在CNN/Daily Mail语料库上的结果
6.7 在DUC 2002语料库上的结果
7 定性分析(Qualitative Analysis)
除了达到state-of-the-art, SummaRuNNer还有个格外的优势就是它可解释性强。
得益于公式(6), 可以将模型得出的概率中考量的特征进行呈现:
8 结论
此文提出了一个可解释性很强的神经网络模型用于抽取式生成自动摘要,并且达到了state-of-the-art, 也提出了一个新颖的生成式训练机制,可以不需要在训练阶段引入抽取式标签。
计划下一步探索方向:
组合抽取式与生成式,一个简单的办法是使用生成式模型预训练抽取式模型。此外还计划构建一个抽取式-生成式连接的模型, 将抽取式模型的预测形成中间运算单元拿给生成式模型用。(个人觉得是个good idea)