本系列博文主要介绍了在文本摘要领域神经网络模型的一些发展,主要基于如下几类模型:
Basic Encoder-Decoder model
Encoder-Decoder + Attention
Deep Reinforced model
Bert based model
GAN based model
Consideration
Sequence-to-Sequence Based Model
这篇文章是首次使用神经网络来做抽象式摘要生成工作,提出的模型也就是后续常见的基准模型TextSum。整个模型的架构如下所示,本质上可以看作是一个条件神经网络语言模型(conditional neural network language model),目标是最大化
p
(
y
i
+
1
∣
x
,
y
c
;
θ
)
p(y_{i+1}|x,y_{c};\theta)
p ( y i + 1 ∣ x , y c ; θ ) 。
其中的
W
,
V
,
U
,
E
W,V,U,E
W , V , U , E 是enc网络的参数。整个流程可以表示为
p
(
y
i
+
1
∣
y
c
,
x
;
θ
)
∝
exp
(
V
h
+
W
enc
(
x
,
y
c
)
)
y
~
c
=
[
E
y
i
−
C
+
1
,
…
,
E
y
i
]
h
=
tanh
(
U
y
~
c
)
\begin{aligned} p\left(\mathbf{y}_{i+1} | \mathbf{y}_{\mathrm{c}}, \mathbf{x} ; \theta\right) & \propto \exp \left(\mathbf{V} \mathbf{h}+\mathbf{W} \operatorname{enc}\left(\mathbf{x}, \mathbf{y}_{\mathrm{c}}\right)\right) \\ \tilde{\mathbf{y}}_{\mathrm{c}} &=\left[\mathbf{E} \mathbf{y}_{i-C+1}, \ldots, \mathbf{E y}_{i}\right] \\ \mathbf{h} &=\tanh \left(\mathbf{U} \tilde{\mathbf{y}}_{\mathrm{c}}\right) \end{aligned}
p ( y i + 1 ∣ y c , x ; θ ) y ~ c h ∝ exp ( V h + W e n c ( x , y c ) ) = [ E y i − C + 1 , … , E y i ] = tanh ( U y ~ c )
其中在Encoder部分作者尝试了三种架构方式,分别是:
Bag-of-Words encoder:直接将
x
x
x 的词向量进行叠加,不考虑和已产生的上下文信息的融合和词序所带来的信息,它可以在一定程度上捕获到词之间的相对重要性,但效果有限
enc
1
(
x
,
y
c
)
=
p
⊤
x
~
p
=
[
1
/
M
,
…
,
1
/
M
]
x
~
=
[
F
x
1
,
…
,
F
x
M
]
\begin{aligned} \operatorname{enc}_{1}\left(\mathrm{x}, \mathrm{y}_{\mathrm{c}}\right) &=\mathrm{p}^{\top} \tilde{\mathrm{x}} \\ \mathrm{p} &=[1 / M, \ldots, 1 / M] \\ \tilde{\mathrm{x}} &=\left[\mathrm{F} \mathrm{x}_{1}, \ldots, \mathrm{F} \mathrm{x}_{M}\right] \end{aligned}
e n c 1 ( x , y c ) p x ~ = p ⊤ x ~ = [ 1 / M , … , 1 / M ] = [ F x 1 , … , F x M ] 其中
F
F
F 表示输入端的词嵌入矩阵。
CNN encoder:采用了标准的卷积和池化操作,它允许词在局部进行信息交互,而且在编码输入时并不需要考虑上下文
y
c
y_{c}
y c
∀
j
,
enc
2
(
x
,
y
c
)
j
=
max
i
x
~
i
,
j
L
∀
i
,
l
∈
{
1
,
…
L
}
,
x
~
j
l
=
tanh
(
max
{
x
‾
2
i
−
1
l
,
x
‾
2
i
l
}
)
∀
i
,
l
∈
{
1
,
…
L
}
,
x
‾
i
l
=
Q
l
x
~
[
i
−
Q
,
…
,
i
+
Q
]
l
−
1
x
~
0
=
[
F
x
1
,
…
,
F
x
M
]
\begin{aligned} \forall j, \operatorname{enc}_{2}\left(\mathbf{x}, \mathbf{y}_{c}\right)_{j} &=\max _{i} \tilde{\mathbf{x}}_{i, j}^{L} \\ \forall i, l \in\{1, \ldots L\}, \tilde{\mathbf{x}}_{j}^{l} &=\tanh \left(\max \left\{\overline{\mathbf{x}}_{2 i-1}^{l}, \overline{\mathbf{x}}_{2 i}^{l}\right\}\right) \end{aligned} \\ \begin{aligned} \forall i, l \in\{1, \ldots L\}, & \overline{\mathbf{x}}_{i}^{l}=\mathbf{Q}^{l} \tilde{\mathbf{x}}_{[i-Q, \ldots, i+Q]}^{l-1} \\ \tilde{\mathbf{x}}^{0} &=\left[\mathbf{F} \mathbf{x}_{1}, \ldots, \mathbf{F} \mathbf{x}_{M}\right] \end{aligned}
∀ j , e n c 2 ( x , y c ) j ∀ i , l ∈ { 1 , … L } , x ~ j l = i max x ~ i , j L = tanh ( max { x 2 i − 1 l , x 2 i l } ) ∀ i , l ∈ { 1 , … L } , x ~ 0 x i l = Q l x ~ [ i − Q , … , i + Q ] l − 1 = [ F x 1 , … , F x M ] 其中
F
F
F 表示输入端的词嵌入矩阵,
Q
l
Q^l
Q l 表示第
l
l
l 层的卷积核。
Attention-Based encoder:使用注意力机制根据上下文信息生成关于完整输入句子的表示
enc
3
(
x
,
y
c
)
=
p
⊤
x
‾
p
∝
exp
(
x
~
P
y
~
c
′
)
x
~
=
[
F
x
1
,
…
,
F
x
M
]
y
~
c
′
=
[
G
y
i
−
C
+
1
,
…
,
G
y
i
]
y
~
c
′
=
∑
q
=
i
−
Q
i
+
Q
x
~
i
/
Q
\begin{aligned} \operatorname{enc}_{3}\left(\mathrm{x}, \mathrm{y}_{\mathrm{c}}\right) &=\mathrm{p}^{\top} \overline{\mathrm{x}} \\ \mathrm{p} & \propto \exp \left(\tilde{\mathrm{x}} \mathrm{P} \tilde{\mathrm{y}}_{\mathrm{c}}^{\prime}\right) \\ \tilde{\mathrm{x}} &=\left[\mathrm{F} \mathrm{x}_{1}, \ldots, \mathrm{F} \mathrm{x}_{M}\right] \\ \tilde{\mathrm{y}}_{\mathrm{c}}^{\prime} &=\left[\mathrm{G} \mathrm{y}_{i-C+1}, \ldots, \mathrm{Gy}_{i}\right] \\ \tilde{\mathrm{y}}_{\mathrm{c}}^{\prime} &=\sum_{q=i-Q}^{i+Q} \tilde{\mathrm{x}}_{i} / Q \end{aligned}
e n c 3 ( x , y c ) p x ~ y ~ c ′ y ~ c ′ = p ⊤ x ∝ exp ( x ~ P y ~ c ′ ) = [ F x 1 , … , F x M ] = [ G y i − C + 1 , … , G y i ] = q = i − Q ∑ i + Q x ~ i / Q
它将Bag-of-Words中的的 uniform distribution 替换成一个输入和和生成的摘要之间的软对齐(soft alignment ),这借鉴了机器翻译的思路。然后用学习到的这个软对齐来给输入的平滑版本进行加权。比如说,如果当前的上下文和位置
i
i
i 能很好的对齐,那么单词
x
i
−
Q
,
…
,
x
i
+
Q
x_{i−Q},…,x_{i+Q}
x i − Q , … , x i + Q 就会被 encoder 赋予更高的权重。
在最后的摘要生成步骤采用了集束搜索(Beam Search),beam-search算法是一种不完全的图搜索算法,通常在图的解空间比较大的情况下使用,同时在深度遍历图的过程中会删除一些质量较差的节点,减少了空间消耗,提高了时间效率。
它的核心思想是在解码的每个时间步,选择K个最可能的词作为下一步的翻译,K这里称为beam size。
假设字典为[a,b,c],beam size = 2:
在生成第1个词的时候,选择概率最大的2个词,那么当前序列就是a或b
生成第2个词的时候,我们将当前序列a或b,分别与字典中的所有词进行组合,得到新的6个序列aa、 ab 、ac、 ba 、bb 、bc,然后从其中选择2个概率最高的作为当前序列,即ab或bb
不断重复这个过程,直到遇到结束符为止。最终输出2个概率最高的序列。
在
y
1
,
.
.
.
,
y
t
y_{1},...,y_{t}
y 1 , . . . , y t 的产生过程中,每个
y
i
y_{i}
y i 都有一个分数,整个序列的得分为
score
(
y
1
,
…
,
y
t
)
=
log
P
L
M
(
y
1
,
…
,
y
t
∣
x
)
=
∑
i
=
1
t
log
P
L
M
(
y
i
∣
y
1
,
…
,
y
i
−
1
,
x
)
\operatorname{score}\left(y_{1}, \ldots, y_{t}\right)=\log P_{\mathrm{LM}}\left(y_{1}, \ldots, y_{t} | x\right)=\sum_{i=1}^{t} \log P_{\mathrm{LM}}\left(y_{i} | y_{1}, \ldots, y_{i-1}, x\right)
s c o r e ( y 1 , … , y t ) = log P L M ( y 1 , … , y t ∣ x ) = i = 1 ∑ t log P L M ( y i ∣ y 1 , … , y i − 1 , x )
其中所有的得分都是非负的,得分越高表示越好。但是集束搜索同样不能保证找到最优的目标序列,但是比穷举搜索更加有效。
基于Encoder-Decode的Seq2Seq模型在文本摘要领域借助注意力机制可以取得不错的效果,但是这种方式的表示能力仍是有限的,它无法捕获到复杂的隐式的结构信息(latent structure information),例如摘要的句法结构和隐含主题等。因此作者希望借助生成模型强大的能力来学习到那些复杂的信息,这里使用的VAE。通过减小真实摘要所满足的分布和生成摘要所满足分布间的KL散度,使模型可以自动的学习到这些信息。
VAE在视觉领域有着很广泛的应用,特别是在图像生成中。但是它无法直接处理序列数据,因此作者这里引入历史潜在变量依赖关系,使其能够对序列数据建模。通过VAE和Seq2Seq模型的结合,作者提出了深度循环生成式解码器 (deep recurrent generative decoder ,DRGD)。整个模型可以分为两个阶段:
推断阶段:变分编码器(variational-encoder)
生成阶段:变分解码器(variational-decoder)
通过这样的方式可以捕获到先前时间的隐结构信息,然后用它指导下一时刻的生成过程,最后可以得到质量更高的摘要。
在推断阶段,变分编码器可以将已生成的
y
<
t
y_{<t}
y < t 和先前的隐结构信息
z
<
t
z_{<t}
z < t 映射到关于隐结构变量的后验概率分布
p
θ
(
z
t
∣
y
<
t
,
z
<
t
)
p_{\theta}(z_{t}|y_{<t},z_{<t})
p θ ( z t ∣ y < t , z < t ) 上。相比于标准的VAE
p
θ
(
z
t
∣
y
t
)
p_{\theta}(z_{t}|y_{t})
p θ ( z t ∣ y t ) 而言,它得到的
z
t
z_{t}
z t 包含了已捕获的复杂且有效的隐式结构信息。
在生成阶段,根据
z
t
z_{t}
z t 计算时间步
t
t
t 输出的目标词
y
t
y_{t}
y t ,即计算条件概率分布
p
θ
(
y
t
∣
z
t
)
p_{\theta}(y_{t}|z_{t})
p θ ( y t ∣ z t ) ,那么完整的生成序列
y
=
{
y
1
,
y
2
,
.
.
.
,
y
T
}
y=\{y_{1},y_{2},...,y_{T}\}
y = { y 1 , y 2 , . . . , y T } 就是最后的摘要。整个生成过程相当于最大化
p
θ
(
y
)
=
∏
t
=
1
T
∫
p
θ
(
y
t
∣
z
t
)
p
θ
(
z
t
)
d
z
t
p_{\theta}(y)=\prod_{t=1}^{T} \int p_{\theta}\left(\mathbf{y}_{t} | \mathbf{z}_{t}\right) p_{\theta}\left(\mathbf{z}_{t}\right) d \mathbf{z}_{t}
p θ ( y ) = ∏ t = 1 T ∫ p θ ( y t ∣ z t ) p θ ( z t ) d z t 。
但是上式的
p
θ
(
y
)
p_{\theta}(y)
p θ ( y ) 通常是难以直接计算的,因此这里引入了一个识别模型 (recognition model)
q
ϕ
(
Z
t
∣
y
<
t
,
Z
<
t
)
q_{\phi}\left(\mathbf{Z}_{t} | \mathbf{y}<t, \mathbf{Z}<t\right)
q ϕ ( Z t ∣ y < t , Z < t ) ,它作为
p
θ
(
z
t
∣
y
<
t
,
z
<
t
)
p_{\theta}(z_{t}|y_{<t},z_{<t})
p θ ( z t ∣ y < t , z < t ) 的一个逼近,其中的
ϕ
\phi
ϕ 和
θ
\theta
θ 可同时学习。根据VAE的原理,目标就是减小两个分布间的KL散度,即最小化下式的值。
D
K
L
[
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
∥
p
θ
(
z
t
∣
y
<
t
,
z
<
t
)
]
=
∫
z
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
log
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
p
θ
(
z
t
∣
y
<
t
,
z
<
t
)
d
z
=
E
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
[
log
q
ϕ
(
z
t
∣
⋅
)
−
log
p
θ
(
z
t
∣
⋅
)
]
\begin{array}{l}{D_{K L}\left[q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}_{<t}, \mathbf{z}_{<t}\right) \| p_{\theta}\left(\mathbf{z}_{t} | \mathbf{y}_{<t}, \mathbf{z}_{<t}\right)\right]} \\ {=\int_{z} q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}_{<t}, \mathbf{z}_{<t}\right) \log \frac{q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}_{<t}, \mathbf{z}_{<t}\right)}{p_{\theta}\left(\mathbf{z}_{t} | \mathbf{y}_{<t}, \mathbf{z}_{<t}\right)} d z} \\ {=\mathbb{E}_{q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}<t, \mathbf{z}_{<t}\right)}\left[\log q_{\phi}\left(\mathbf{z}_{t} | \cdot\right)-\log p_{\theta}\left(\mathbf{z}_{t} | \cdot\right)\right]}\end{array}
D K L [ q ϕ ( z t ∣ y < t , z < t ) ∥ p θ ( z t ∣ y < t , z < t ) ] = ∫ z q ϕ ( z t ∣ y < t , z < t ) log p θ ( z t ∣ y < t , z < t ) q ϕ ( z t ∣ y < t , z < t ) d z = E q ϕ ( z t ∣ y < t , z < t ) [ log q ϕ ( z t ∣ ⋅ ) − log p θ ( z t ∣ ⋅ ) ] 经过变换有
log
p
θ
(
y
<
t
)
=
D
K
L
[
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
∥
p
θ
(
z
t
∣
y
<
t
,
z
<
t
)
]
+
E
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
[
log
p
θ
(
y
<
t
∣
z
t
)
]
−
D
K
L
[
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
∥
p
θ
(
z
t
)
]
\begin{array}{l}{\log p_{\theta}(\mathbf{y}<t)=} \\ {D_{K L}\left[q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}<t, \mathbf{z}_{<t}\right) \| p_{\theta}\left(\mathbf{z}_{t} | \mathbf{y}_{<t}, \mathbf{z}_{<t}\right)\right]} \\ {+\mathbb{E}_{q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}<t, \mathbf{z}_{<t}\right)}\left[\log p_{\theta}\left(\mathbf{y}<t | \mathbf{z}_{t}\right)\right]} \\ {-D_{K L}\left[q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}<t, \mathbf{z}_{<t}\right) \| p_{\theta}\left(\mathbf{z}_{t}\right)\right]}\end{array}
log p θ ( y < t ) = D K L [ q ϕ ( z t ∣ y < t , z < t ) ∥ p θ ( z t ∣ y < t , z < t ) ] + E q ϕ ( z t ∣ y < t , z < t ) [ log p θ ( y < t ∣ z t ) ] − D K L [ q ϕ ( z t ∣ y < t , z < t ) ∥ p θ ( z t ) ] 上式右边的两项可记为
L
(
θ
,
φ
;
y
)
=
E
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
{
∑
t
=
1
T
log
p
θ
(
y
t
∣
z
t
)
−
D
K
L
[
q
ϕ
(
z
t
∣
y
<
t
,
z
<
t
)
∥
p
θ
(
z
t
)
]
}
\begin{array}{l}{\mathcal{L}(\theta, \varphi ; y)=} \\ {\quad \mathbb{E}_{q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}<t, \mathbf{z}_{<t}\right)}\left\{\sum_{t=1}^{T} \log p_{\theta}\left(\mathbf{y}_{t} | \mathbf{z}_{t}\right)\right.} \\ {\quad-D_{K L}\left[q_{\phi}\left(\mathbf{z}_{t} | \mathbf{y}<t, \mathbf{z}_{<t}\right) \| p_{\theta}\left(\mathbf{z}_{t}\right)\right] \}}\end{array}
L ( θ , φ ; y ) = E q ϕ ( z t ∣ y < t , z < t ) { ∑ t = 1 T log p θ ( y t ∣ z t ) − D K L [ q ϕ ( z t ∣ y < t , z < t ) ∥ p θ ( z t ) ] } 它在这里提供了了一个关于
log
p
θ
(
y
<
t
)
\log p_{\theta}(\mathbf{y}<t)
log p θ ( y < t ) 的下界。
在摘要生成的过程中,encoder使用的是双向的GRU,它将时间步
t
t
t 的输入
x
t
x_{t}
x t 和前一时刻的隐状态
h
t
−
1
h_{t-1}
h t − 1 映射到
h
t
h_{t}
h t ,因为这里采用的是双向的方式,
h
t
h_{t}
h t 由两部分表示:
h
→
t
=
G
R
U
(
x
t
,
h
→
t
−
1
)
h
^
t
=
G
R
U
(
x
t
,
h
^
t
−
1
)
\begin{array}{l}{\overrightarrow{\mathbf{h}}_{t}=G R U\left(x_{t}, \overrightarrow{\mathbf{h}}_{t-1}\right)} \\ {\hat{\mathbf{h}}_{t}=G R U\left(x_{t}, \hat{\mathbf{h}}_{t-1}\right)}\end{array}
h
t = G R U ( x t , h
t − 1 ) h ^ t = G R U ( x t , h ^ t − 1 ) 最后使用的
h
t
e
h_{t}^e
h t e 是两个方向隐状态的拼接,enocder部分相比于先前的模型并没有不同。
在decoder部分,除了先前已有的确定性解码过程,这里还增加了关于隐结构的生成建模过程。确定性解码过程中使用了两层GRU,隐状态
h
1
d
h_{1}^d
h 1 d 使用所有输入隐状态的平均值初始化
h
1
d
=
1
T
e
∑
t
=
1
T
e
h
t
e
\mathbf{h}_{1}^{d}=\frac{1}{T^{e}} \sum_{t=1}^{T^{e}} \mathbf{h}_{t}^{e}
h 1 d = T e 1 ∑ t = 1 T e h t e 。
第一层解码得到的隐状态为
h
t
d
1
=
G
R
U
1
(
y
t
−
1
,
h
t
−
1
d
1
)
\mathbf{h}_{t}^{d_{1}}=G R U_{1}\left(\mathbf{y}_{t-1}, \mathbf{h}_{t-1}^{d_{1}}\right)
h t d 1 = G R U 1 ( y t − 1 , h t − 1 d 1 ) ,然后使用
h
t
d
1
h_{t}^{d_{1}}
h t d 1 和输入的隐状态序列
{
h
t
e
}
\{h_{t}^e\}
{ h t e } 来计算时间步
t
t
t 注意力权重,用
a
i
,
j
a_{i,j}
a i , j 表示。
a
i
,
j
=
exp
(
e
i
,
j
)
∑
j
′
=
1
T
e
exp
(
e
i
,
j
′
)
e
i
,
j
=
v
T
tanh
(
W
h
h
d
h
i
d
1
+
W
h
h
e
h
j
e
+
b
a
)
\begin{aligned} a_{i, j} &=\frac{\exp \left(e_{i, j}\right)}{\sum_{j^{\prime}=1}^{T^{e}} \exp \left(e_{i, j^{\prime}}\right)} \\ e_{i, j} &=\mathbf{v}^{T} \tanh \left(\mathbf{W}_{h h}^{d} \mathbf{h}_{i}^{d_{1}}+\mathbf{W}_{h h}^{e} \mathbf{h}_{j}^{e}+\mathbf{b}_{a}\right) \end{aligned}
a i , j e i , j = ∑ j ′ = 1 T e exp ( e i , j ′ ) exp ( e i , j ) = v T tanh ( W h h d h i d 1 + W h h e h j e + b a )
所有输入的隐状态的加权线性组合就是基于注意力的上下文向量
c
t
c_{t}
c t 。
c
t
=
∑
j
′
=
1
T
e
a
t
,
j
′
h
j
′
e
\mathbf{c}_{t}=\sum_{j^{\prime}=1}^{T^{e}} a_{t, j^{\prime}} \mathbf{h}_{j^{\prime}}^{e}
c t = j ′ = 1 ∑ T e a t , j ′ h j ′ e 然后根据
c
t
c_{t}
c t 和已生成的序列
y
t
−
1
y_{t-1}
y t − 1 及前一时刻的隐状态
h
t
−
1
d
2
h_{t-1}^{d_{2}}
h t − 1 d 2 生成第二层GRU在时间步
t
t
t 的隐状态
h
t
d
2
=
G
R
U
2
(
y
t
−
1
,
h
t
−
1
d
2
,
c
t
)
\mathbf{h}_{t}^{d_{2}}=G R U_{2}\left(\mathbf{y}_{t-1}, \mathbf{h}_{t-1}^{d_{2}}, \mathbf{c}_{t}\right)
h t d 2 = G R U 2 ( y t − 1 , h t − 1 d 2 , c t ) 。当目前为止,所有部分的计算都和先前的Encoder-decoder模型一样。
在隐结构的生成建模过程中,假设关于隐变量的先验分布和后验分布都满足高斯分布,当有了
y
t
−
1
、
z
t
−
1
、
h
d
t
−
1
y_{t-1}、z_{t-1}、h_{d}^{t-1}
y t − 1 、 z t − 1 、 h d t − 1 后,首先计算
h
t
e
z
=
g
(
W
y
h
e
z
y
t
−
1
+
W
z
h
e
z
z
t
−
1
+
W
h
h
e
z
h
t
−
1
d
+
b
h
e
z
)
\mathbf{h}_{t}^{e_{z}}=g\left(\mathbf{W}_{y h}^{e z} \mathbf{y}_{t-1}+\mathbf{W}_{z h}^{e_{z}} \mathbf{z}_{t-1}+\mathbf{W}_{h h}^{e_{z}} \mathbf{h}_{t-1}^{d}+\mathbf{b}_{h}^{e_{z}}\right)
h t e z = g ( W y h e z y t − 1 + W z h e z z t − 1 + W h h e z h t − 1 d + b h e z ) 再将其映射到一个新的隐式空间中,然后计算高斯分布的参数
μ
t
=
W
h
μ
e
z
h
t
e
z
+
b
μ
e
z
log
(
σ
t
2
)
=
W
h
σ
h
t
e
z
+
b
σ
e
z
\begin{aligned} \boldsymbol{\mu}_{t} &=\mathbf{W}_{h \mu}^{e_{z}} \mathbf{h}_{t}^{e_{z}}+\mathbf{b}_{\mu}^{e_{z}} \\ \log \left(\boldsymbol{\sigma}_{t}^{2}\right) &=\mathbf{W}_{h \sigma} \mathbf{h}_{t}^{e_{z}}+\mathbf{b}_{\sigma}^{e_{z}} \end{aligned}
μ t log ( σ t 2 ) = W h μ e z h t e z + b μ e z = W h σ h t e z + b σ e z 那么
z
t
z_{t}
z t 就可以表示为
z
t
=
μ
t
+
σ
t
⊗
ε
\mathbf{z}_{t}=\boldsymbol{\mu}_{t}+\boldsymbol{\sigma}_{t} \otimes \varepsilon
z t = μ t + σ t ⊗ ε ,其中
ϵ
\epsilon
ϵ 满足标准高斯分布。最后根据
z
t
z_{t}
z t 和
h
t
d
2
h_{t}^{d_{2}}
h t d 2 计算
h
t
d
y
=
tanh
(
W
z
h
d
y
z
t
+
W
h
h
d
z
h
t
d
2
+
b
h
d
y
)
\mathbf{h}_{t}^{d_{y}}=\tanh \left(\mathbf{W}_{z h}^{d_{y}} \mathbf{z}_{t}+\mathbf{W}_{h h}^{d_{z}} \mathbf{h}_{t}^{d_{2}}+\mathbf{b}_{h}^{d_{y}}\right)
h t d y = tanh ( W z h d y z t + W h h d z h t d 2 + b h d y ) ,那么输入
y
t
y_{t}
y t 可由
y
t
=
ζ
(
W
h
y
d
h
t
d
y
+
b
h
y
d
)
\mathbf{y}_{t}=\zeta\left(\mathbf{W}_{h y}^{d} \mathbf{h}_{t}^{d_{y}}+\mathbf{b}_{h y}^{d}\right)
y t = ζ ( W h y d h t d y + b h y d ) 计算而得。为了得到最优的摘要结果,这里同样使用了beam search。那么两阶段的训练目标可以表示为:
J
=
1
N
∑
n
=
1
N
∑
t
=
1
T
{
−
log
[
p
(
y
t
(
n
)
∣
y
<
t
(
n
)
,
X
(
n
)
)
]
+
D
K
L
[
q
ϕ
(
z
t
(
n
)
∣
y
<
t
(
n
)
,
z
<
t
(
n
)
)
∥
p
θ
(
z
t
(
n
)
)
]
}
\begin{aligned} \mathcal{J}=& \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T}\left\{-\log \left[p\left(y_{t}^{(n)} | y_{<t}^{(n)}, X^{(n)}\right)\right]\right.\\ &+D_{K L}\left[q_{\phi}\left(\mathbf{z}_{t}^{(n)} | \mathbf{y}_{<t}^{(n)}, \mathbf{z}_{<t}^{(n)}\right) \| p_{\theta}\left(\mathbf{z}_{t}^{(n)}\right)\right] \} \end{aligned}
J = N 1 n = 1 ∑ N t = 1 ∑ T { − log [ p ( y t ( n ) ∣ y < t ( n ) , X ( n ) ) ] + D K L [ q ϕ ( z t ( n ) ∣ y < t ( n ) , z < t ( n ) ) ∥ p θ ( z t ( n ) ) ] } 等式右边的第一项就是似然函数的计算,第二项为引入VAE的计算部分。
基于Seq2Seq的模型虽然在文本摘要领域取得了不错的效果,但是它仍有如下的不足:
无法准确表述原文的细节信息
易生成重复的部分
无法解决out-of-vocabulary(OOV)问题
为了解决上述的问题,作者提出了一种增强的Seq2Seq框架。首先使用混合的pointer-generator 网络通过pointing机制准确的从原文中复制信息,同时又不损坏generator生成新词的能力;另外使用coverage机制降低生成部分的重复率。
模型的整体架构如下所示
Pointer-generator 网络是一种指针网络(pointer network)和基于注意力机制的Seq2Seq网络的混合模型,它既保证了既从原文中直接复制词又可以从词汇表中生成新词,从而在一定程度上解决了上述的问题。
它除了需要计算注意力分布
a
t
a^t
a t 和上下文向量
h
t
∗
h_{t}^*
h t ∗ 外,还需根据
t
t
t 时刻的
h
t
∗
h_{t}^*
h t ∗ 、decoder的隐状态
s
t
s_{t}
s t 和decoder的输入
x
t
x_{t}
x t 计算生成概率
p
g
e
n
=
σ
(
w
h
∗
T
h
t
∗
+
w
s
T
s
t
+
w
x
T
x
t
+
b
p
t
r
)
p_{\mathrm{gen}}=\sigma\left(w_{h^{*}}^{T} h_{t}^{*}+w_{s}^{T} s_{t}+w_{x}^{T} x_{t}+b_{\mathrm{ptr}}\right)
p g e n = σ ( w h ∗ T h t ∗ + w s T s t + w x T x t + b p t r ) 且
p
g
e
n
∈
[
0
,
1
]
p_{gen} \in [0,1]
p g e n ∈ [ 0 , 1 ] 。
p
g
e
n
p_{gen}
p g e n 这里作为一种软开关机制,用于控制是从注意力分布中进行采样还是从词汇表中生成新词。
另外对于每一个处理的文档都会生成一个扩展的词汇表(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_{\mathrm{gen}} P_{\mathrm{vocab}}(w)+\left(1-p_{\mathrm{gen}}\right) \sum_{i : w_{i}=w} a_{i}^{t}
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 其中如果
w
w
w 是OOV词,那么
p
v
o
c
a
b
(
w
)
p_{vocab}(w)
p v o c a b ( w ) 值为零;同理如果
w
w
w 并没有出现在源文档中,那么
∑
i
:
w
i
=
w
a
i
t
\sum_{i:w_{i}=w}a_{i}^t
∑ i : w i = w a i t 也为零。
除了模型的混合外,Pointer-generator网络的另一个强大的机制就是覆盖 (coverage),它的提出只要是为了解决Seq2Seq模型中存在的重复率高的问题。通过所有时间步上注意力分布的和计算覆盖向量
c
t
=
∑
t
′
=
0
t
−
1
a
t
′
c^t = \sum_{t'=0}^{t-1}a^{t'}
c t = ∑ t ′ = 0 t − 1 a t ′ ,它表示了当前时刻这些词从注意力机制获得的覆盖程度。然后将其做为注意力机制计算的一个输入项,计算
P
v
o
c
a
b
=
softmax
(
V
′
(
V
[
s
t
,
h
t
∗
]
+
b
)
+
b
′
)
P_{\mathrm{vocab}}=\operatorname{softmax}\left(V^{\prime}\left(V\left[s_{t}, h_{t}^{*}\right]+b\right)+b^{\prime}\right)
P v o c a b = s o f t m a x ( V ′ ( V [ s t , h t ∗ ] + b ) + b ′ ) 这样将使注意力机制更注意避免重复注意相同位置的信息,从而避免生成重复的文本。
coverage loss表示为
c
o
v
l
o
s
s
t
=
∑
i
min
(
a
i
t
,
c
i
t
)
covloss_{t}=\sum_{i} \min(a_{i}^t,c_{i}^t)
c o v l o s s t = i ∑ min ( a i t , c i t ) 它提供了一个下界,满足
covloss
t
≤
∑
i
a
i
t
=
1
\text{covloss}_{t} \leq \sum_{i} a_{i}^t = 1
covloss t ≤ ∑ i a i t = 1 。模型完整的损失函数为
l
o
s
s
t
=
−
log
P
(
w
t
∗
)
+
λ
∑
i
min
(
a
i
t
,
c
i
t
)
loss_{t}=-\log P(w_{t}^*)+\lambda \sum_{i} \min(a_{i}^t,c_{i}^t)
l o s s t = − log P ( w t ∗ ) + λ i ∑ min ( a i t , c i t ) 示例
abstractive summarization仍存在的问题:
生成摘要仍很接近源文档,难以生成高级别压缩释义的摘要
模型有时并不会关注于文档中的关键信息
网络有时会错误的组合源文档中的片段
难以很好的将多句话用一个有意义的句子表述
…
实验结果实例
补充
pointer network
指针网络 (Pointer Network)是Seq2seq模型的一个变种。它不是把一个序列转换成另一个序列, 而是产生一系列指向输入序列元素的指针,常用的应用包括凸包问题、旅行商问题等。
Seq2Seq模型很大的一个问题是输出严重依赖输入 ,如何理解这个问题呢?下面通过论文中的例子说明,假设在二维空间
[
0
,
1
]
×
[
0
,
1
]
[0,1] \times [0,1]
[ 0 , 1 ] × [ 0 , 1 ] 中存在一些点,如何求这些点的凸包?简单来说就是如何找到几个点能把所有的这些点包起来。例如模型的输入为
{
P
1
,
P
2
,
.
.
.
,
P
10
}
\{P_{1},P_{2},...,P_{10}\}
{ P 1 , P 2 , . . . , P 1 0 } ,输出是凸包
{
P
2
,
P
4
,
P
3
,
P
5
P
6
,
P
7
,
P
2
}
\{P_{2},P_{4},P_{3},P_{5}P_{6},P_{7},P_{2}\}
{ P 2 , P 4 , P 3 , P 5 P 6 , P 7 , P 2 } 。从中可以看出输出中的元素是从输入序列中提取出来的。
凸包的求解可看作是从输入序列中提取点的过程,而选点的方法就称为pointer,它并不像注意力机制那样将输入通过encoder得到上下文向量,而是将注意力转化为一个pointer来选择输入序列中的元素,即在计算完注意力权重后选择概率最大的encoder状态作为输出。指针网络和Seq2Seq网络的模型对比如下
它是《A Neural Attention Model for Abstractive Sentence Summarization》的进阶版,作者提出了一种条件循环神经网络 。模型同样是基于Encoder-Decoder的结构,但不同的是在Encoder部分采用的是基于注意力机制的卷积网络。这样的架构使得Decoder可以在每一时刻的生成过程只关注在适当的输入词上,模型只依赖学到的特征,并且可以在大规模数据集上进行端到端的训练。
ConvS2S模型由FAIR在2017年提出,它主要应用于机器翻译任务,并在当时的英-德、英-法两个任务上都达到了state-of-the-art。在本文中,作者将其应用了文本摘要中也取得了不错的效果。
采用CNN做Seq2Seq任务的优势在于:
通过卷积运算可以精确的控制上下文的长度
卷积可以并行运算
对于每一个输入的词而言,在CNN中经过的卷积核和非线性计算数量都是固定的
模型的架构如下
在Embedding部分除了常规的词嵌入或语义嵌入
w
=
{
w
1
,
.
.
.
,
w
m
}
w=\{w_{1},...,w_{m}\}
w = { w 1 , . . . , w m } 外,这个还增加了position embedding ,将词序表示为分布式向量
p
=
{
p
1
,
.
.
,
p
m
}
p=\{p_{1},..,p_{m}\}
p = { p 1 , . . , p m } ,使模型获得词序和位置信息,最后的embedding是语义嵌入和词序嵌入的求和。
e
=
(
w
1
+
p
1
,
.
.
.
,
w
m
+
p
m
)
e=(w_{1}+p_{1},...,w_{m}+p_{m})
e = ( w 1 + p 1 , . . . , w m + p m ) 然后将词嵌入输入到卷积模块中,文中所采用的卷积模块可看作经典的卷积加上非线性转换。其中非线性转换被称为Gated Linear Unit (GLU),它将卷积后的结果分为两部分,其中一部分做Sigmoid转换,另一部分向量进行element-wise乘积。
v
(
[
A
,
B
]
=
(
X
∗
W
+
b
)
⨂
σ
(
X
∗
V
+
b
)
)
v([A,B] = (X * W+b) \bigotimes \sigma(X * V+b))
v ( [ A , B ] = ( X ∗ W + b ) ⨂ σ ( X ∗ V + b ) ) 作者还使用了残差连接 (residual connection),用于缓解深层网络中的梯度消失问题。
除了加强的卷积网络外,模型欢迎入了带多跳结构的注意力机制 (multi-step attention),它不仅要求decoder的最后一层卷积块关注输入和输出信息,而且要求每一层的卷积块都执行同样的注意力机制,这样可以使模型获得更多的历史信息。
经过实验证明CNN同样可用于文本领域,通过层级表征长程依赖。同时由于CNN并行化的优点,它的训练要比RNN快;不足之处在于CNN有更多的参数要调。
在整个过程中参考了很多网上的资料,由于忘记保存链接,这里就给出参考资料地址了,衷心感谢他人的付出~