seq2seq模型目前还有很多缺点,本文所做实验表明:
(1)生成的文本过短,3%的摘要不超过3个词
(2)随着生成序列的增加,生成性能急剧恶化
(3)重复生成某个词
(4)侧重于复制原文
也就是说基于原文自由式生成的摘要的seq2seq模型目前效果还不甚满意,所以本文想要结合摘要模板做生成,又由于传统的基于模板的文本摘要也有如下缺陷:
(1)构建模板非常耗时
(2)需要有专业的领域知识
(3)开发各个领域的所有摘要模板不现实
受基于检索的对话系统的启发,作者认为相似文本的摘要作为软模板,用于指导当前文本生成摘要有指导,所以本文的做法是:seq2seq+soft template
本文的方法有三个模块,分别是Retrieve, Rerank以及Rewrite, 我们分别介绍
Retrieve: soft template
特别注意一点的是:论文中出现的 the input sentence x,就是指的源文本,也就是需要压缩进行摘要的内容,我在这儿摔了个大跟头,我以为源文本有很多句话,这是指其中的一个句子而已,导致我始终不明白Retrieve是怎么做的。
训练集有n个训练实例,具体表示是 X = { (
x
1
x_1
x1,
r
1
r_1
r1), (
x
2
x_2
x2,
r
2
r_2
r2), …, (
x
i
x_i
xi,
r
i
r_i
ri), …, (
x
n
x_n
xn,
r
n
r_n
rn)},假设目前正在训练第二个实例 (
x
2
x_2
x2,
r
2
r_2
r2), 需要做的就是针对
x
2
x_2
x2 用检索系统Lucene在(
x
1
x_1
x1,
x
3
x_3
x3, …,
x
i
x_i
xi, …,
x
n
x_n
xn) 中相似文本,这里假设
x
7
x_7
x7,
x
8
x_8
x8 是Lucene挑选出的结果,则我们将其对应的
r
7
r_7
r7,
r
8
r_8
r8 作为候选 soft template, 由于数据集很大(超过3M),我们默认选择30个候选. 对于验证集和测试集我们只挑选最相似的一个文本对应的摘要作为soft template即可。
Rerank:
注意公式(2)中
h
←
1
x
\overleftarrow{h}^x_1
h1x 是从右到左的LSTM最后一个输出,左侧第一个单词的 LSTM 输出
h
→
−
1
x
\overrightarrow{h}^x_{-1}
h−1x是从左向右的LSTM最后一个词的输出,右侧第一个单词的 LSTM 输出
同理
h
r
h_r
hr 也一样
用 Bilinear network 预测输入 x 和软模板 r 的相似度:
在Retrieve阶段保留了30个候选软模板,所以30个不同的软模板 r 分别与 x 计算相似度, 所以需要对30个软模板进行排序
S
∗
(
r
,
y
∗
)
S^*(r, y^*)
S∗(r,y∗) 中
y
∗
y^*
y∗ 是输入句子 x 的 真实摘要(标注)
ReWrite
通过上一步的Rerank步骤后,我们从30个候选软模板中挑选出了最和输入句子 x 相似度最高的软模板 r, 由于软模板 r 是其他训练输入句子的摘要,并且 r 中包含的命名实体可能在句子 x 中可能从未出现过,所以 r 不能粗鲁的认为是 x 的 摘要,但是可以依据模板 r 指导句子 x 的 摘要生成。基于此,本文引入了可以具有重写能力的seq2seq model.
首先,将句子的隐状态信息和模板的隐状态信息进行拼接,如公式(5):
然后送入一个标准的attention seq2seq 框架去生成一个输出序列的隐状态
s
t
s_t
st,如公式(6),然后经过一个softmax layer预测摘要中的词(注意一次只生成一个词,类似于机器翻译)
Learning
本文将Rerank和Rewrite两个联合训练,所以损失函数由两部分组成,分别是
J
R
(
θ
)
J_R(\theta)
JR(θ) 和
J
G
(
θ
)
J_G(\theta)
JG(θ)
在Rerank中,我们希望
s
(
r
,
x
)
s(r, x)
s(r,x) 的相似性度量与
s
∗
(
r
,
y
∗
)
s^*(r, y^*)
s∗(r,y∗) 越接近越好,这部分的损失函数
J
R
(
θ
)
J_R(\theta)
JR(θ) 如下:
对于Rewrite模块,期望得到输入句子 x 真实摘要
y
∗
y^*
y∗的期望概率最大化,这部分的损失函数
J
G
(
θ
)
J_G(\theta)
JG(θ)如下