Get To The Point: Summarization with Pointer-Generator Networks
文章目录
一 摘要🐶
传统的Seq2Seq+Attention模型存在三个缺陷:
-
难以准确复述原文细节。
-
无法处理原文中的未登录词(OOV)。
-
在生成的摘要中存在一些重复的部分
此文提出一种以两种正交的方式增强了增强标准的Seq2Seq+Attention模型
- 使用指针生成器网络(pointer-generator network) ,通过指针从源文件中拷贝词,同时保留通过生成器生成新单词的能力。
- 使用覆盖率(coverage) 机制,追踪哪些信息已经在摘要中,避免生成具有重复片段的摘要。
二 模型🐱
- baseline:sequence-to-sequence 模型
- 指针生成器网络(pointer-generation network)
- 覆盖率机制(coverage mechanism),可以被加在上述两种模型架构上
2.1 seq2seq + Attention模型
encoder采用单层双向LSTM,训练数据中的文档被一个一个地喂入encoder中,产生encoder的隐藏层状态 h i h_i hi的序列。
decoder部分采用一个单层单向LSTM,每一步的输入是前一步预测的词的词向量,同时输出一个解码的状态序列 s t s_t st,用于当前步的预测。
attention是针对原文的概率分布,告诉模型哪些词更重要。具体计算公式为
e
i
t
=
v
t
tanh
(
W
h
h
i
+
W
s
s
t
+
b
a
t
t
n
)
a
t
=
s
o
f
t
m
a
x
(
e
t
)
e_i^t=v^t\tanh(W_hh_i+W_ss_t+b_{attn}) \\ a^t=softmax(e^t)
eit=vttanh(Whhi+Wsst+battn)at=softmax(et)
计算出当前步的attention分布后,对encoder输出的隐层做加权平均,获得原文的动态表示,称为语境向量
h
t
∗
=
Σ
i
a
i
t
h
i
h_t^*= \Sigma_ia_i^th_i
ht∗=Σiaithi
依靠语境向量和decoder输出的隐层向量,共同决定当前步预测在词表上的概率分布
P
v
o
c
a
b
=
s
o
f
t
m
a
x
(
V
’
(
V
[
s
t
,
h
t
∗
]
+
b
)
+
b
′
)
P_{vocab}=softmax(V’(V[s_t,h_t^*]+b)+b')
Pvocab=softmax(V’(V[st,ht∗]+b)+b′)
损失函数采用交叉熵
l
o
s
s
=
1
T
Σ
t
=
0
T
−
l
o
g
P
(
w
t
∗
)
loss=\frac{1}{T}\Sigma_{t=0}^T-logP(w_t^*)
loss=T1Σt=0T−logP(wt∗)
2.2 Pointer-generator network
pointer-generator network是seq2seq模型和pointer network的混合模型,一方面通过seq2seq模型保持生成的能力,另一方面通过pointer network直接从原文中取词,提高摘要的准确度和缓解OOV问题。在预测的每一步,通过动态计算一个生成概率
P
g
e
n
P_{gen}
Pgen作为一个软开关,用于选择是通过
P
v
o
c
a
b
P{vocab}
Pvocab从词汇表中生成一个词,或者从输入序列的注意力分布
a
t
a_t
at中复制一个词。
P
g
e
n
=
σ
(
w
h
∗
T
h
t
∗
+
w
s
T
s
t
+
w
x
T
x
t
+
b
p
t
r
)
P_{gen}=\sigma(w_{h^*}^Th_t^*+w_s^Ts_t+w_x^Tx_t+b_{ptr})
Pgen=σ(wh∗Tht∗+wsTst+wxTxt+bptr)
对于每一篇文档,用扩展后的词表(extended vocabulary) 来表示整个词汇表和原文档中的词的并集,得到在扩展词表上建立的概率分布:
P
(
w
)
=
p
g
e
n
P
v
o
c
a
b
(
w
)
+
(
1
−
p
g
e
n
)
∑
i
:
w
i
=
w
a
i
t
P(w)=p_{gen}P_{vocab}(w)+(1-p_{gen})\sum_{i:w_i=w}a_i^t
P(w)=pgenPvocab(w)+(1−pgen)i:wi=w∑ait
如果w是一个OOV单词,
P
v
o
c
a
b
(
w
)
P_{vocab}(w)
Pvocab(w)为0;如果w没有出现在源文档中,但在词表中出现,那么
∑
i
:
w
i
=
w
a
i
t
\sum_{i:w_i=w}a_i^t
∑i:wi=wait就为0。
生成OOV单词的能力是pointer-generator网络的一个主要优势。
2.3 覆盖机制(coverage mechanism)
重复问题是seq2seq模型的常见问题,此文采用覆盖模型来解决重复问题,在此覆盖模型中,保留了一个覆盖率向量(coverage vector)
e
t
e^t
et,它是过去所有decoder步骤计算的attention分布的累加和,记录模型已经关注过原文的哪些词。
e
t
=
∑
t
′
=
0
t
−
1
a
t
′
e^t=\sum_{t'=0}^{t-1}a^{t'}
et=t′=0∑t−1at′
覆盖率向量也被用来作为注意力机制的额外输入,
c
0
c^0
c0是一个0向量,表示在第一个时间步上,源文档还没有被覆盖。
e
i
t
=
v
t
tanh
(
W
h
h
i
+
W
s
s
t
+
w
c
c
i
t
+
b
a
t
t
n
)
e_i^t=v^t\tanh(W_hh_i+W_ss_t+w_cc_i^t+b_{attn})
eit=vttanh(Whhi+Wsst+wccit+battn)
定义了一个覆盖率损失(coverage loss) 来惩罚attention重复放在同一区域的行为。
c
o
v
l
o
s
s
t
=
∑
i
m
i
n
(
a
i
t
,
c
i
t
)
covloss_t=\sum_imin(a_i^t,c_i^t)
covlosst=i∑min(ait,cit)
最终的模型整体损失函数为:
l
o
s
s
t
=
−
l
o
g
P
(
w
t
∗
)
+
λ
∑
i
m
i
n
(
a
i
t
,
c
i
t
)
c
i
t
)
loss_t=-logP(w_t^*)+\lambda\sum_imin(a_i^t,c_i^t) c_i^t)
losst=−logP(wt∗)+λi∑min(ait,cit)cit)
最终的模型整体损失函数为:
l
o
s
s
t
=
−
l
o
g
P
(
w
t
∗
)
+
λ
∑
i
m
i
n
(
a
i
t
,
c
i
t
)
loss_t=-logP(w_t^*)+\lambda\sum_imin(a_i^t,c_i^t)
losst=−logP(wt∗)+λi∑min(ait,cit)