DISCODVT: Generating Long Text with Discourse-Aware Discrete Variational Transformer翻译
摘要
尽管近期应用预训练语言模型来生成高质量文本带来了显著的进步,但是生成具有高连贯性的长段落仍然具有挑战性。在本文中,我们提出了DISCODVT,这是一个基于语句的离散变分Transformer,用于解决不连贯问题。DISCODVT能学习一个离散的变量序列,用以总结了文本的全局结构,然后将其应用于在每个解码步骤中以指导生成过程。为了进一步将基于语句的信息纳入离散潜在表示,我们引入辅助目标来建模文本内的语句关系。我们在两个开放的故事生成数据集上进行了广泛的实验,并证明了潜在codes能够学习有意义的语句结构,并用于指导模型生成具有更长范围连贯性的长文本。
1.介绍
生成具有长范围连贯性的段落是自然语言生成(NLG)的一个长期问题。尽管最近在各种NLG任务中使用了大型预训练的语言生成模型,例如摘要和对话生成,但是这些都是针对相对较短的局部相关文本的生成,生成跨越数十个句子的全局连贯段落对于预训练模型仍然具有挑战性。
人类编写文本的全局连贯性由主题一致和观点之间的自然转换来表示。如图1所示,诸如因果,时间之类的连续文本段之间的语句关系通常通过突出显示语句标记来表示,该表示将文本段绑定到全局结构中。虽然预训练的语言模型能在关联主题相关的概念方面合理地执行,但它们几乎不能用结构良好的语句来安排内容。
在这项工作中,我们利用变分自编码器(VAE)的全局表示能力,以解决使用预训练语言模型生成长文本时不连贯的问题。为了表示具有高级结构的文本,我们提出去学习一个潜在变量序列,然后用每个潜在code去抽象一个局部文本跨度。与使用连续潜在变量不同,我们学习对应于自然语言中可解释类别的离散潜在code。为了利用潜在code捕获文本的隐式语句结构,如图1所示,我们进一步设计了针对潜在表示的辅助目标,以建模语句关系。
我们将提出的模型称为DISCODVT,即Discourse-aware Discrete Variational Transformer。其主要思想是学习一个离散潜在变量序列,通过抽象长文本来引导解码过程去重建原始文本。学习框架如图2(a)所示。在编码阶段,为了捕获文本的高级结构,我们首先使用双向编码器来获取字符的上下文表示,然后应用1-D卷积神经网络(1D CNNS)应用于时间尺度去抽象文本段(§ 3.2.1)。为了将连续表示转换成分类特征,我们将它们映射到具有固定潜在词汇大小上的one-hot分类分布上,来获得离散变量序列(第3.2.2节)。在解码阶段,为了应用全局离散潜在code来指导局部文本的生成,首先使用1-D反卷积将潜在嵌入重新缩放到文本长度,然后添加到解码器的嵌入层以进行逐步控制( §3.2.3)。为了抽象文本的语句结构,我们使用Penn Discourse TreeBank 2.0(PDTB)从文本中提取相邻的元素语句单元(EDU),如图1所示,并引入辅助目标,以将关系融入潜在表示。一旦学习了离散潜在code,我们采用自回归Transformer以将先验分布建模为序列转换任务(§3.4)。
我们总结了三个主要的贡献:
(1)我们提出了一种新的潜在变量模型,可以从长文本中学习离散潜在变量序列,并将其应用于生成过程以保证长期相干性。
(2)为了进一步获取语句关系信息,我们为离散潜在code引入一个辅助目标,以抽象文本的语句结构。
(3)我们在具有自动和人类评估的两个公开故事生成数据集中进行广泛的实验。结果表明,我们的模型显著优于基线。
2.相关工作
2.1 Long Text Generation
先前的工作试图去解决长文本生成中的不连贯问题,主要可分为模型结构的修改,生成机制的修改和先验知识的引入。
为了建模人类文本的分层性质,Li et al. (2015) 提出了一个分层RNN解码器,用于学习段落内的句子级表示。Shen et al. (2019) 使用多级潜在变量增强分层模型,而且Shao et al. (2019) 还融入了规划机制来预先安排输入关键词的顺序和组。
另一个工作路线提出将长文本生成解耦为多个阶段。模型首先生成粗略的草图,例如关键短语或摘要,然后用精细的细节将其扩展到完整的长文本中。然而,已知多步生成方法具有阶段级别的曝光偏差,即训练期间中间输出和推理的差异,这会导致阶段误差累积并损害最终的质量。
最后一个方向是将先验外部知识引入预训练的语言模型,例如常识故事生成。然而,这些方法可能无法涉及到所有的数据类型,例如虚构的故事,并且在文本生成期间不提供长距离引导。
2.2 Discrete Latent Variable Models
在文本生成中,连续高斯VAE已被探索用来建模响应的多样性和高级结构,例如模板和顺序。除了连续空间中的高斯潜在变量之外,最近的共还探讨了离散空间中的VAE,其具有可解释性的优点,同时能表示潜在code和分类特征之间的对应关系,例如对话行为和POS标签。最近,van den Oord et al. (2017) 提出了一种矢量量化的变分自编码器(VQ-VAE),其通过学习量化的one-hot后验来避免后验崩塌问题,这可以适用于强大的自回归解码器。在图像和语音生成中,Razavi et al. (2019); Dieleman et al. (2018) 将VQ-VAE扩展为具有分层的潜在变量,以捕获输入数据的不同分辨率,并生成高保真视频和具有高级结构音频数据。句我们所知,在文本生成的领域中,我们的工作是第一次探讨将离散潜在变量模型缩放到大型预训练语言模型的尺寸,以解决长文本生成中的不连贯问题。
3.方法
3.1 Task Definition and Model Overview
我们将长文本生成任务定义为条件生成问题,即,给定输入提示
x
=
(
x
1
,
⋅
⋅
⋅
,
x
N
)
\textbf x=(x_1,···,x_N)
x=(x1,⋅⋅⋅,xN)来生成包含多个句子的文本
y
=
(
y
1
,
⋅
⋅
⋅
⋅
,
y
M
)
y=(y_1,····,y_M)
y=(y1,⋅⋅⋅⋅,yM)。然后使用预训练的生成模型,例如,BART,来双向编码
x
\textbf x
x并最大化在解码器端预测
y
\textbf y
y的对似然
L
L
M
\mathcal L_{LM}
LLM。
然而,当生成横跨数百个单词的长文本时,现有模型几乎不会保持远距离的连贯性。我们提出学习一个离散潜在变量序列
z
=
(
z
1
,
⋅
⋅
⋅
⋅
,
z
L
)
\textbf z=(z_1,····,z_L)
z=(z1,⋅⋅⋅⋅,zL),以抽象出文本在时间尺度(
L
L
L比
M
M
M短)和类别(每个
z
l
z_l
zl需要从大小为
K
K
K的潜在词表中获取值,并且值数目要比文本词表小得多)的高级结构。
我们的模型最大化生成模型对数似然的置信下界(ELBO):
p
(
y
,
z
∣
x
)
=
p
θ
(
y
∣
z
,
x
)
p
ψ
(
z
∣
x
)
p(\textbf y,\textbf z|\textbf x)=p_θ(\textbf y|\textbf z,\textbf x)p_ψ(\textbf z|\textbf x)
p(y,z∣x)=pθ(y∣z,x)pψ(z∣x),其中生成器和先验网络分别参数化为
θ
θ
θ和
ψ
ψ
ψ。由于我们希望
z
\textbf z
z捕获文本的内部结构而不是特定主题信息,因此我们将其与输入提示
x
x
x分开,并单独定义一个后验网络
q
ϕ
(
z
∣
y
)
q_{\phi}(\textbf z|\textbf y)
qϕ(z∣y)。Zhao et al. (2018) 也采用了相同的形式以学习可解释的潜在变量。我们在下面给出ELBO:
L
E
L
B
O
=
E
z
∼
q
ϕ
l
o
g
p
θ
(
y
∣
z
,
x
)
−
D
K
L
(
q
ϕ
(
z
∣
y
)
∣
∣
p
ψ
(
z
∣
x
)
)
.
(1)
\mathcal L_{ELBO}=\mathbb E_{\textbf z\sim q_{\phi}}log~p_{\theta}(\textbf y|\textbf z,\textbf x)-D_{KL}(q_{\phi}(\textbf z|\textbf y)||p_{ψ}(\textbf z|\textbf x)).\tag{1}
LELBO=Ez∼qϕlog pθ(y∣z,x)−DKL(qϕ(z∣y)∣∣pψ(z∣x)).(1)
由于
z
\textbf z
z的离散性,
q
ϕ
(
z
∣
y
)
q_{\phi}(\textbf z|\textbf y)
qϕ(z∣y)在每个位置定义一系列离散词表
K
K
K上的one-hot分布。因此,ELBO的第二项可以被解释为序列转换目标,给定后验目标序列
z
\textbf z
z,先验模型进行自回归拟合:
p
ψ
(
z
∣
x
)
=
∏
l
p
ψ
(
z
l
∣
z
<
l
,
x
)
p_ψ(\textbf z|\textbf x)=\prod_lp_ψ(z_l|\textbf z_{<l},\textbf x)
pψ(z∣x)=∏lpψ(zl∣z<l,x)。
与van den Oord et al. (2017) 类似,我们将学习过程分为两个阶段。在第一个训练阶段,我们训练后验网络和生成器,以优化ELBO的第一项,以学习文本的离散潜在code(§3.2)。我们进一步提出了对潜在表示的语句目标,以建模文本的高级语句关系(§3.3)。在第二训练阶段,我们采用另一个先验 Transformer模型来预测给定输入提示的离散code(§3.4)。在推理阶段,我们首先从先验的网络上获取给定输入提示的一系列潜在变量,然后将其带入生成器,并通过随机采样文本字符来指导文本生成。
3.2 Learning Discrete Latent Codes
在本节中,我们介绍了从长文本学习离散潜在code的过程。给定文本 y \textbf y y,然后将其编码为潜在的变量序列 z \textbf z z,该 z \textbf z z能保留高级结构,以使用输入 x \textbf x x和 z \textbf z z引导文本重建。 y \textbf y y首先使用双向Transformer编码器编码到上下文化表示中,然后用1D CNN和离散变分bottleneck来抽象 z \textbf z z。为了引导文本生成,我们首先将Z嵌入到嵌入矩阵中,然后通过反1D CNN将其重新缩放到序列 y \textbf y y的原始长度,最后将其注入解码器的嵌入层以进行逐步控制。
3.2.1 Temporal Abstraction with CNNs
为了抽象与文本的全局结构相对应的高级特征,我们采用
c
c
c层的1D CNNS将文本长度减小
2
c
2^c
2c倍,其中每一层将输入长度减半。在非自回归机器翻译中也探讨了类似的架构,但那是为了并行解码提出的。
形式上,给定输入文本表示
H
e
^
=
[
h
1
e
,
⋅
⋅
⋅
⋅
,
h
M
e
]
\textbf H^{\hat e}=[\textbf h^e_1,····,\textbf h^e_M]
He^=[h1e,⋅⋅⋅⋅,hMe],CNN的输出表示为
O
e
^
=
[
o
1
e
,
⋅
⋅
⋅
,
o
L
e
]
\textbf O^{\hat e}=[\textbf o^e_1,···,\textbf o^e_L]
Oe^=[o1e,⋅⋅⋅,oLe]。直观上,堆叠的CNNS从文本序列提取连续的n-gram特征,每个code都抽象了具有灵活边界的连续文本跨度。
在解码阶段,为了使高级表示在时间级连续平滑地指导局部文本生成,我们采用反CNN这一对称结构重新缩放code嵌入矩阵
O
z
^
=
[
o
1
z
,
⋅
⋅
⋅
⋅
,
o
L
z
]
\textbf O^{\hat z}=[\textbf o^z_1,····,\textbf o^z_L]
Oz^=[o1z,⋅⋅⋅⋅,oLz]到低级特征
H
z
^
=
[
h
1
z
,
⋅
⋅
⋅
,
h
M
z
]
\textbf H^{\hat z}=[\textbf h^z_1,···,\textbf h^z_M]
Hz^=[h1z,⋅⋅⋅,hMz]。
3.2.2 Discrete Variational Bottleneck
为了强制
z
\textbf z
z通过可解释的类别保留文本重建的显着信息,我们引入了离散的变分bottleneck,使CNN的输出
O
e
\textbf O^e
Oe离散化为类别特征。直观地,bottleneck通过将连续表示映射到离散空间来控制
z
z
z的信息容量。
我们给出了离散化的正式描述。 图2(b)显示了第
l
l
l个位置的一个例子(后面将忽略下标
l
l
l)。首先通过线性变换将
o
e
o^e
oe映射到logits
t
=
W
z
o
e
∈
R
K
\textbf t=\textbf W^zo^e∈\mathbb R^K
t=Wzoe∈RK。此位置处的离散code
z
z
z被定义为:
z
=
a
r
g
m
a
x
k
∈
K
t
k
.
(2)
z=\mathop{argmax}\limits_{k\in K}~t_k.\tag{2}
z=k∈Kargmax tk.(2)
在训练期间,为了能使用反向传播进行梯度更新,我们应用Gumbel-Softmax技巧,以提供argmax操作的可微分松弛。
w
k
=
e
x
p
(
(
t
k
+
g
k
)
/
τ
)
∑
k
=
1
K
e
x
p
(
(
t
k
+
g
k
)
/
τ
)
,
(3)
w_k=\frac{exp((t_k+g_k)/\tau)}{\sum^K_{k=1}exp((t_k+g_k)/\tau)},\tag{3}
wk=∑k=1Kexp((tk+gk)/τ)exp((tk+gk)/τ),(3)
其中
g
1
,
⋅
⋅
⋅
⋅
,
g
k
g_1,····,g_k
g1,⋅⋅⋅⋅,gk是来自Gumbel分布的独立同分步样本,并且
τ
\tau
τ是控制松弛的温度。训练期间,随着
τ
\tau
τ从
τ
m
a
x
\tau_{max}
τmax退火到接近
0
0
0,软的类别分布
w
k
w_k
wk变成one-hot分布。
然后将该类别分布映射到可学习的code嵌入
E
z
\textbf E^z
Ez以获得code嵌入矩阵
o
z
=
E
z
w
\textbf o^z=\textbf E^z\textbf w
oz=Ezw。
3.2.3 Generation with Step-Wise Control
为了得到能够显式指导局部文本生成的高级code,首先将code嵌入矩阵
O
z
\textbf O^z
Oz重新缩放到
H
z
\textbf H^z
Hz中。然后,在每个解码位置将添加到具有字符嵌入
{
e
m
}
m
=
1
M
\{\textbf e_m\}^M_{m=1}
{em}m=1M和位置编码
{
p
m
}
m
=
1
M
\{\textbf p_m\}^M_{m=1}
{pm}m=1M的嵌入层。新的输入嵌入则变成
{
h
m
z
+
e
m
+
p
m
}
m
=
1
M
\{\textbf h^z_m+\textbf e_m+\textbf p_m\}^M_{m=1}
{hmz+em+pm}m=1M。由于Transformer中的残差结构,
h
m
z
\textbf h^z_m
hmz的信息可以有效地传递给较高层。
直观地,每个潜在code控制局部文本跨度的详细生成,而不同的code抽象了文本中不同部分的高级模式。
因此,重构目标是最大限度地提高对数似然的期望:
L
r
e
c
o
n
=
E
z
∼
q
ϕ
(
z
∣
y
)
l
o
g
p
θ
(
y
∣
z
,
x
)
.
(4)
\mathcal L_{recon}=\mathbb E_{z\sim q_{\phi}(\textbf z|\textbf y)}log~p_{\theta}(\textbf y|\textbf z,\textbf x).\tag{4}
Lrecon=Ez∼qϕ(z∣y)log pθ(y∣z,x).(4)
3.3 Discourse Relation Modeling
为了将文本的语句结构抽象到潜在表示,我们设计了一个辅助的语句目标,以将语句关系信息嵌入离散潜在code。我们专注于显示的语句关系而不是隐式的语句信号,例如句子的顺序,因为它们不能表达相邻句子的连接方式。我们从PDTB中选择一组明确的语句标记集合
D
\mathcal D
D,该集合能表明高级话语连贯性。正如Prasad et al. (2008) 所建议的那样,大约90%的明确语句关系出现在同一个句子或相邻句子之间。因此,对于句子内关系,我们采用与 Nie et al. (2019) 相同的基于appropriate dependency patterns 的连接句子标记器,来解析句子并抽取相连EDU。处理细节和标注示例在附录A.3.2中提供。
单个段落的语句标注结果形式化如下所示:
A
=
{
(
s
i
,
e
i
)
,
d
i
,
i
+
1
}
i
=
1
S
\mathcal A=\{(s_i,e_i),d_{i,i+1}\}^S_{i=1}
A={(si,ei),di,i+1}i=1S
其中
S
S
S是
y
\textbf y
y中的EDU的总数,
s
i
,
e
i
s_i,e_i
si,ei是第
i
i
i个EDU的开始/结束位置,
d
i
,
i
+
1
d_{i,i+1}
di,i+1是第
i
i
i个和
i
+
1
i+1
i+1之间的语句标签。
接下来,我们正式建模语句关系目标。我们首先通过mean-pooling来获取第
i
i
i个EDU
h
i
ˉ
\bar {\textbf h_i}
hiˉ对应潜在嵌入
[
h
s
i
z
,
.
.
.
,
h
e
i
z
]
[\textbf h^z_{s_i},...,\textbf h^z_{e_i}]
[hsiz,...,heiz]的平均潜在表示。然后我们使用双仿射转换来建模两个相邻表示之间的关系,并最大化标签
d
i
,
i
+
1
d_{i,i+1}
di,i+1的对数概率,如下所示:
p
(
d
i
,
i
+
1
∣
z
)
=
s
o
f
t
m
a
x
(
h
ˉ
i
T
W
d
h
ˉ
i
+
1
+
b
d
)
,
(6)
p(d_{i,i+1}|\textbf z)=softmax(\bar{\textbf h}^T_i\textbf W_d\bar{\textbf h}_{i+1}+\textbf b_d),\tag{6}
p(di,i+1∣z)=softmax(hˉiTWdhˉi+1+bd),(6)
L
d
i
s
c
=
E
z
∼
q
ϕ
(
z
∣
y
)
∑
i
=
1
∣
A
∣
−
1
l
o
g
p
(
d
i
,
i
+
1
∣
z
)
.
(7)
\mathcal L_{disc}=\mathbb E_{z\sim q_{\phi}(\textbf z|\textbf y)}\sum^{|\mathcal A|-1}_{i=1}log~p(d_{i,i+1}|\textbf z).\tag{7}
Ldisc=Ez∼qϕ(z∣y)i=1∑∣A∣−1log p(di,i+1∣z).(7)
3.4 Autoregressive Prior Modeling
在第二阶段,我们提出使用Transformer编码器 - 解码器
ψ
ψ
ψ,通过等式(1)中的第二项来学习离散潜在code的先验分布。为了促进训练,我们利用预训练的文本编码器的参数来初始化先验模型的编码器并从头开始训练解码器。优化目标相当于最大化下式的对数似然。
L
p
r
i
o
r
=
E
z
∼
q
ϕ
(
z
∣
y
)
∑
l
=
1
L
l
o
g
p
(
z
l
∣
z
<
l
,
x
)
.
(8)
\mathcal L_{prior}=\mathbb E_{z\sim q_{\phi}(\textbf z|\textbf y)}\sum^L_{l=1}log~p(z_l|\textbf z_{\lt l},\textbf x).\tag{8}
Lprior=Ez∼qϕ(z∣y)l=1∑Llog p(zl∣z<l,x).(8)
在实践中,我们通过从
q
ϕ
q_{\phi}
qϕ获取argmax来估计期望。与抽样相比,这种方法降低了学习方差。
3.5 Additional Learning Techniques
在初步实验中,我们发现了两种额外的技术,能够辅助模型学习文本的有意义的潜在抽象,如下所述。
Entropy Regularization。我们发现预训练的解码器倾向于利用整个code词表中少量的离散code,这破坏了discrete bottleneck的表现力。为了确保模型使用离散词表中的所有code,我们添加了基于熵的正则化项,能够鼓励跨时间步骤的多样化的离散潜在code的选择。具体地,我们计算跨时间步骤的平均类别分布
p
ˉ
=
1
L
∑
l
=
1
L
s
o
f
t
m
a
x
(
t
l
)
\bar{\textbf p}=\frac{1}{L}\sum^L_{l=1}softmax(\textbf t_l)
pˉ=L1∑l=1Lsoftmax(tl),其中
t
l
\textbf t_l
tl是位置
l
l
l处的code分布。然后,我们最大化平均分布的熵:
L
e
n
t
r
=
−
∑
k
=
1
K
p
ˉ
l
l
o
g
p
ˉ
k
.
(9)
\mathcal L_{entr}=-\sum^K_{k=1}\bar p_llog~\bar p_k.\tag{9}
Lentr=−k=1∑Kpˉllog pˉk.(9)
在第一阶段中的整体目标是上述目标的加权和:
L
r
e
c
o
n
+
λ
1
L
e
n
t
r
+
λ
2
L
d
i
s
c
\mathcal L_{recon}+λ_1\mathcal L_{entr}+λ_2\mathcal L_{disc}
Lrecon+λ1Lentr+λ2Ldisc。
Warm-Start Training。在训练开始时,如果discrete bottleneck不会产生有意义的潜在嵌入,则预训练的生成器会将它们视为噪声,这降低了下游任务上的生成性能。为了缓解这个问题,我们将Gumbel
τ
\tau
τ固定到
τ
m
a
x
\tau_{max}
τmax并使用从BookCorpus 收集的连续文本采用目标
L
r
e
c
o
n
+
λ
1
L
e
n
t
r
\mathcal L_{recon}+λ_1\mathcal L_{entr}
Lrecon+λ1Lentr进行训练,以作为热启动模型。
qq_23966231: 大佬用什么翻译软件, 符号都处理的这么好
lyconghk: 请教个问题,这种针对math expression的decoder,词表里面的token有什么?另外论文中说用特殊符号num1, num2, num3等等去替换问题中里面的数字,如果同一个数字例如5,出现两次,但这两个5其实是针对不同东西的,例如5元和5支笔,这样需要怎么处理?
Renaissance_2237: 感谢翻译!
uuup111: 但是这篇文章的代码中好像有问题,导致了标签泄漏,,改正这个错误之后,效果变成了最差的https://kenschutte.com/gzip-knn-paper/
筑梦师King: 我真服了哈哈哈哈哈哈哈毕设要求翻译英文文献,好多相关的论文都被翻译过了