摘要
与最近在视觉领域的深度生成建模相比,文本的通用生成和控制具有挑战性并且成功率有限。本文旨在生成合理的文本句子,其属性是通过学习具有指定语义的隐藏表示来控制。我们提出了一种新的神经生成模型,该模型结合了变分自编码器 (VAE) 和整体属性判别器,用于有效施加语义结构。该模型也可以被视为使用wake-sleep算法增强的VAE,以利用假样本作为额外的训练数据。通过对离散文本样本的可微近似、对独立属性控制的显式约束以及生成器和判别器的高效协作学习,我们的模型甚至可以从单词注释中学习可解释的表示,并生成具有所需情感和时态属性的短句。使用经过训练的分类器作为评估器的定量实验验证了句子和属性生成的准确性。
1.介绍
最近对深度生成模型的研究兴趣激增,例如变分自编码器 (VAE)、生成对抗网络 (GAN) 和自回归模型。尽管它们在视觉领域取得了令人瞩目的进步,例如图像生成、学习可解释的图像表示和图像编辑,但对自然语言生成的研究相对较少。即使生成真实的句子也具有挑战性,因为需要生成模型来捕获句子背后的复杂语义结构。以前的工作主要限于有监督环境中的特定任务,包括机器翻译和图像字幕。然而,由于有效隐藏code的不平滑性,自编码器框架和循环神经网络语言模型不适用于从任意隐藏表示生成通用文本。最近很少有人尝试使用 VAE 和 GAN 来研究通用文本生成,而它们生成的文本在很大程度上是随机且不可控的。
在本文中,我们解决了可控生成文本的问题。也就是说,我们专注于生成真实的句子,其属性可以通过学习分解的潜在表示来控制。为了能够操纵生成的句子,需要解决一些挑战。
第一个挑战来自文本样本的离散性。由此产生的不可微分阻碍了使用全局判别器来评估生成的样本并进行梯度反向传播,以整体方式指导生成器的优化,这在连续图像生成和表示建模中非常有效。许多最近的方法试图通过策略学习来解决不可微分问题,策略学习在训练过程中往往会遇到高方差,或者只提供初步定性结果的连续近似。作为基于判别器学习的替代方案,半监督 VAE 最小化观察到样本上的各元素的重构误差,并且适用于离散的可见性。然而,这失去了完整句子的整体视图,尤其是在建模全局抽象属性(例如,情绪)时可能会更差。
可控生成的另一个挑战与学习分解的潜在表示有关。可解释性期望潜在表示的每个部分都能够控制并且只关注样本的一个方面。先前的结构化表示学习方法缺乏对完整潜在表示的独立性的明确实施,并且不同的个体code可能导致除所需属性之外的其他未指定属性的意外变化。
在本文中,我们提出了一种新的文本生成模型来解决上述问题,允许具有指定语义结构的高度分解表示,并生成具有动态指定属性的句子。我们的生成器基于 VAE,并结合属性的整体判别器,以在潜在code上有效地施加结构。端到端优化通过可微的 softmax 近似实现,该近似平滑地退火到离散情况并有助于快速收敛。VAE 的概率编码器还可以作为额外的判别器来捕获隐式建模方面的变化,并指导生成器在属性code操作期间避免混乱。
我们的模型可以解释为通过扩展的wake-sleep过程增强的VAE,其中sleep阶段能够合并生成的样本,以交替方式学习生成器和判别器。生成器和判别器有效地相互提供反馈信号,从而形成一个高效的相互指导框架。我们展示了一点监督数据(例如,100 条带标注的句子)就足以学习结构化表示。
定量实验证明了我们方法的有效性。我们应用我们的模型来生成具有可控情绪和时态的句子。我们的方法在生成指定属性的准确性以及使用生成的样本执行分类方面优于以前的生成模型。我们展示了我们的方法仅从单词级标签中学习高度分解的表示,并生成合理的短句。
2.相关工作
最近在深度生成建模方面取得了显着进展。Hu et al. (2017) 提供了一组不同的深度生成方法的统一视图。变分自编码器 (VAE) 由编码器和生成器网络组成,它们分别将数据编码为潜在表示并从潜在空间生成样本。通过最大化生成数据的对数似然的变分下界来训练模型,并最小化 KL 散度损失以将潜在code的后验与先验匹配,这使得来自先验的每个潜在code都可以解码为一个合理的句子。如果没有 KL 正则化,VAE 会退化为自编码器,并且不适用于通用型生成。普通 VAE 与离散表示不兼容,因为它们阻碍了用于学习编码器的可微参数化。通过将推理网络与生成器相结合,用于学习深度有向图模型的wake-sleep 算法与 VAE 具有相似性。wake阶段使用从训练数据上的推理网络生成的样本更新生成器,而sleep 阶段根据来自生成器的样本更新推理网络。我们的方法将 VAE 与扩展的wake-sleep相结合,其中sleep 过程更新生成器和推理网络(判别器),从而实现协作半监督学习。
除了在原始数据空间中重建,基于判别器的度量为生成器学习提供了一种不同的方式,即判别器评估生成的样本并反馈学习信号。例如,GAN 使用判别器来反馈样本被识别为真实样本的概率。Larsen et al. (2016) 将 VAE 与 GAN 相结合以增强图像生成。Dosovitskiy & Brox (2016); Taigman et al. (2017) 使用判别器来衡量高级感知相似性。由于离散样本的不可微性,将判别器应用于文本生成很困难。Bowman et al. (2015); Tang et al. (2016); Yang et al. (2017) 改为使用没有判别器的 VAE。所有这些文本生成方法都不会学习分解的潜在表示,从而导致样本随机化且无法控制。相比之下,视觉领域的分解表示生成取得了令人瞩目的进展。例如,InfoGAN 类似于我们联合 VAE/wake-sleep 算法,以无监督的方式分解潜在表示。每个维度的语义是在训练后可观察的,而不是由用户以受控方式指定。Siddharth et al. (2017); Kingma et al. (2014) 基于 VAE 并通过半监督学习获得分解的图像表示。Zhou & Neubig (2017) 扩展了用于文本转写的半监督 VAE。相比之下,我们的模型将 VAE 与判别器相结合,与各元素重构相比,判别器提供了更好的整体度量。此外,这些方法中的大多数只关注潜在分解表示的部分,而忽略了具有未显式编码的属性的结构化code的潜在依赖性。我们通过引入独立性约束来解决这个问题,并展示其在提高可解释性方面的有效性。
3.Controlled Generation of Text
我们的模型旨在生成以语义结构表示向量为条件的合理句子。例如,为了控制句子情感,我们的模型分配潜在表示的一个维度来编码“positive”和 “negative”语义,并通过简单地指定特定code来生成具有所需情感的样本。受益于分解的结构,每个这样的code都能够捕获一个显着的属性,并且与其他特征无关。与之前的工作相比,我们的深度文本生成模型具有几个优点: 1) 通过使全局判别器能够指导离散的文本生成器来促进潜在code语义的学习;2) 通过显式地对独立属性控制施加约束来提高模型的可解释性;3)通过使用特定的wake-sleep方法构建变分自编码器,允许有效的半监督学习和引导。我们首先介绍我们框架的概述(第 3.1 节),然后详细描述模型(第 3.2 节)。
3.1 Model Overview
我们从已用于文本生成的变分自编码器(§2)开始构建我们的框架,其中句子
x
^
\hat x
x^以潜在code
z
\textbf z
z为条件来进行生成。vanilla VAE 采用非结构化向量
z
\textbf z
z,其中各维度属性糅杂在一起。为了以可解释的方式对感兴趣的属性进行建模和控制,我们用一组结构化变量
c
\textbf c
c来扩充非结构化变量
z
\textbf z
z,其中每个结构化变量都表示句子的一个显着且独立的语义特征。
我们希望我们的句子生成器以组合向量
(
z
,
c
)
(\textbf z,\textbf c)
(z,c)为条件,并生成满足结构化code
c
\textbf c
c中指定的属性的样本。VAE(例如,半监督 VAE)训练时的通常是通过重构观察到的给定特征code的样本来学习的。然而,正如在视觉领域中所证明的那样,与在数据空间中计算向量距离相比,在特征空间中计算距离允许干扰变换的不变性,并提供更好的整体度量。因此,对于
c
\textbf c
c中的每个属性code,我们设置了一个单独的判别器来衡量生成的样本与所需属性的匹配程度,并驱动生成器产生改进的结果。在我们的上模型中应用判别器的困难在于生成的文本样本是离散且不可微的,这破坏了从判别器到生成器的梯度传播。我们使用基于 softmax 的连续近似,随着温度系数的降低,随着训练的进行,它会退火到离散情况。这种简单而有效的方法具有低方差和快速收敛的特点。
直观地说,具有可解释的表示意味着
c
\textbf c
c中的每个结构化code都可以独立控制其目标特征,而不会与其他属性纠缠在一起,尤其是那些没有明确建模的属性。我们通过强制将那些不相关的属性完全放在在非结构化code
z
\textbf z
z中,从而将与我们控制的
c
\textbf c
c分开。为此,我们重用 VAE 编码器作为额外的判别器,用于识别
z
\textbf z
z中建模的属性,并训练生成器,以便可以从生成的样本中恢复这些非结构化属性。因此,只要
z
\textbf z
z 不变,即使改变不同的属性code
c
\textbf c
c,也会同样保持非结构化属性不变。
图 1 显示了整体模型结构。我们的完整模型结合了 VAE 和属性判别器,其中 VAE 组件训练生成器重建真实句子以生成合理的文本,而判别器强制生成器生成与条件code一致的属性。另外,属性判别器进行训练以拟合有标签样本以包含指定的语义,同时解释来自生成器的样本。也就是说,生成器和判别器形成一对协作学习器,并相互提供反馈信号。协同优化类似于wake-sleep算法。我们展示了组合的 VAE/wake-sleep学习能够实现高效的半监督框架,它只需要很少的有监督数据即可获得可解释的表示和生成。
3.2 Model Structure
我们现在通过分别展示生成器和判别器的学习来详细描述我们的模型。
3.1 Generator Learning
生成器
G
G
G是一个LSTM-RNN,用于以潜在code
(
z
,
c
)
(\textbf z,\textbf c)
(z,c) 为条件生成字符序列
x
^
=
{
x
^
1
,
.
.
.
,
x
^
T
}
\hat \textbf x=\{\hat x_1,...,\hat x_T\}
x^={x^1,...,x^T},并描述了一个生成分布:
x
^
∼
G
(
z
,
c
)
=
p
G
(
x
^
∣
z
,
c
)
=
∏
t
p
(
x
^
t
∣
x
^
<
t
,
z
,
c
)
(1)
\hat \textbf x\sim G(z,c)=p_{G}(\hat \textbf x|\textbf z,\textbf c)=\prod_t p(\hat x_t|\hat \textbf x^{\lt t},\textbf z, \textbf c)\tag{1}
x^∼G(z,c)=pG(x^∣z,c)=t∏p(x^t∣x^<t,z,c)(1)
其中
x
^
<
t
\hat \textbf x^{<t}
x^<t表示
x
^
t
\hat x_t
x^t 之前的字符。因此,生成过程涉及一系列离散决策,该决策使用 softmax 函数在每个时刻
t
t
t从参数化的多项式分布中采样字符:
x
^
t
∼
s
o
f
t
m
a
x
(
o
t
/
τ
)
,
(2)
\hat x_t\sim softmax(\textbf o_t/\tau),\tag{2}
x^t∼softmax(ot/τ),(2)
其中
o
t
\textbf o_t
ot 是作为 softmax 函数输入的 logit 向量,
τ
>
0
\tau>0
τ>0 是通常设置为1的温度系数。
表示的非结构化部分
z
\textbf z
z被建模为具有标准高斯先验
p
(
z
)
p(\textbf z)
p(z)的连续变量,而结构化code
c
\textbf c
c可以包含连续和离散变量,以使用适当的先验
p
(
c
)
p(\textbf c)
p(c)编码不同的属性。给定观察值
x
\textbf x
x,基础 VAE 包括一个条件概率编码器
E
E
E来推断潜在变量
z
\textbf z
z:
z
∼
E
(
x
)
=
q
E
(
z
∣
x
)
.
(3)
\textbf z\sim E(\textbf x)=q_E(\textbf z|\textbf x).\tag{3}
z∼E(x)=qE(z∣x).(3)
令
θ
G
\theta_G
θG 和
θ
E
\theta_E
θE 分别表示生成器
G
G
G和编码器
E
E
E的参数。然后优化 VAE 以最小化观察到的真实句子的重构误差,同时将编码器正则化以接近先验
p
(
z
)
p(\textbf z)
p(z):
L
V
A
E
(
θ
G
,
θ
E
;
x
)
=
−
K
L
(
q
E
(
z
∣
x
)
∣
∣
p
(
z
)
)
+
E
q
E
(
z
∣
x
)
q
D
(
c
∣
x
)
[
l
o
g
p
G
(
x
∣
z
,
c
)
]
,
(4)
\mathcal L_{VAE}(\theta_G,\theta_E;\textbf x)=-KL(q_E(\textbf z|\textbf x)||p(\textbf z))+\mathbb E_{q_E(\textbf z|\textbf x)q_D(\textbf c|\textbf x)}[log~p_G(\textbf x|\textbf z,\textbf c)],\tag{4}
LVAE(θG,θE;x)=−KL(qE(z∣x)∣∣p(z))+EqE(z∣x)qD(c∣x)[log pG(x∣z,c)],(4)
其中
K
L
(
⋅
∣
∣
⋅
)
KL(·||·)
KL(⋅∣∣⋅)是 KL 散度,
q
D
(
c
∣
x
)
q_D(\textbf c|\textbf x)
qD(c∣x) 是判别器 D 为
c
\textbf c
c中的每个结构化变量定义的条件分布:
D
(
x
)
=
q
D
(
c
∣
x
)
.
(5)
D(\textbf x)=q_D(\textbf c|\textbf x).\tag{5}
D(x)=qD(c∣x).(5)
在这里,为了描述简单,我们只假设一个结构化变量和一个判别器,尽管我们的模型可以直接应用于多个属性。当我们学习分解的表示时,
(
z
,
c
)
(\textbf z,\textbf c)
(z,c)上的分布因子为
q
E
q_E
qE和
q
D
q_D
qD。请注意,这里的判别器
D
D
D和code
c
c
c不是使用 VAE 损失学习的,而是使用简短描述的目标进行优化的。除了驱动生成器生成真实句子的重构损失外,判别器还提供额外的学习信号,强制生成器生成与
c
c
c中的结构化code匹配的连贯属性。然而,由于不可能通过离散样本从判别器传播梯度,我们使用确定性的连续近似。通过在每一步用等式(2)中的概率向量替换采样字符
x
^
t
\hat x_t
x^t(表示为one-hot向量)进行近似,该向量使得生成器的参数可微分。概率向量用作当前步骤的输出和下一步的输入。由此产生的“软”生成的句子,表示为
G
~
τ
(
z
,
c
)
\tilde G_{\tau}(\textbf z,\textbf c)
G~τ(z,c),被送入判别器(概率向量的作用是对词嵌入矩阵进行平均,以获得每一步的“软”词嵌入)以衡量目标属性的适应度,从而可以使用以下损失以改进
G
G
G:
L
A
t
t
r
,
c
(
θ
G
)
=
E
p
(
z
)
p
(
c
)
[
l
o
g
q
D
(
c
∣
G
~
τ
(
z
,
c
)
)
]
.
(6)
\mathcal L_{Attr,c}(\theta_G)=\mathbb E_{p(\textbf z)p(\textbf c)}[log~q_D(\textbf c|\tilde G_{\tau}(\textbf z,\textbf c))].\tag{6}
LAttr,c(θG)=Ep(z)p(c)[log qD(c∣G~τ(z,c))].(6)
温度系数
τ
\tau
τ (Eq.2) 随着训练的进行设置为
τ
→
0
\tau\rightarrow 0
τ→0,产生越来越多的峰值分布,最终模拟离散情况。简单的确定性近似有效地减少了训练过程中的方差和快速收敛,从而能够有效地学习条件生成器。生成结果的多样性得到保证,因为我们仅将近似用于属性建模,并且基本句生成是通过 VAE 学习的。
根据式(6)中的目标,生成句子的每个结构化属性都通过
c
\textbf c
c中的相应code进行控制,并且与潜在表示中的其他变量无关。然而,其他未明确建模的属性仍有可能与
c
\textbf c
c中的code纠缠在一起,因此改变
c
\textbf c
c的维度可能会产生我们不感兴趣的这些属性的意外变化。为了解决这个问题,我们通过强制非结构化部分 z 完全捕获这些属性来将这些属性与
c
\textbf c
c分开。因此,除了
c
\textbf c
c中显式编码的属性之外,我们还训练生成器,以便可以从生成的样本中正确识别其他非显式属性并匹配非结构化代码
z
\textbf z
z。我们没有构建新的鉴判别器,而是重用变分编码器
E
E
E,它精确地用于推断基础 VAE 中的潜在变量
z
z
z。除了用编码器条件
q
E
q_E
qE替换判别器条件
q
D
q_D
qD之外,损失的形式与等式(6)相同:
L
A
t
t
r
,
z
(
θ
G
)
=
E
p
(
z
)
p
(
c
)
[
l
o
g
q
E
(
z
∣
G
~
τ
(
z
,
c
)
)
]
.
(7)
\mathcal L_{Attr,z}(\theta_G)=\mathbb E_{p(\textbf z)p(\textbf c)}[log~q_E(\textbf z|\tilde G_{\tau}(\textbf z,\textbf c))].\tag{7}
LAttr,z(θG)=Ep(z)p(c)[log qE(z∣G~τ(z,c))].(7)
请注意,作为等式(6)中的判别器,编码器现在对从先验生成的样本进行推理,而不是像 VAE 中观察到的样本。
结合等式(4)-(7)我们得到生成器目标:
m
i
n
θ
G
L
G
=
L
V
A
E
+
λ
c
L
A
t
t
r
,
c
+
λ
z
L
A
t
t
r
,
z
(8)
min_{\theta_G}\mathcal L_G=\mathcal L_{VAE}+\lambda_c\mathcal L_{Attr,c}+\lambda_z\mathcal L_{Attr,z}\tag{8}
minθGLG=LVAE+λcLAttr,c+λzLAttr,z(8)
其中
λ
c
\lambda c
λc和
λ
z
\lambda z
λz是平衡参数。通过最小化 VAE 损失来训练变分编码器,即
m
i
n
θ
E
L
V
A
E
min_{\theta_E}\mathcal L_{VAE}
minθELVAE。
3.2 Discriminator Learning
训练判别器
D
D
D以准确推断句子属性并评估恢复潜在code中指定的所需特征的错误。例如,对于分类属性,判别器可以表述为句子分类器;而对于连续目标,可以使用概率回归器。与 VAE 编码器相比,判别器的学习方式不同,因为目标属性可以是离散的,而 VAE 框架不支持这些属性。此外,与以无监督方式学习的非结构化code
z
\textbf z
z相比,结构化变量
c
\textbf c
c使用标注的样本来训练指定的语义。我们为判别器推导出一种有效的半监督学习方法。
形式上,令
θ
D
\theta_D
θD表示判别器的参数。为了学习指定的语义,我们使用一组标注的样本
X
L
=
{
(
x
L
,
c
L
)
}
\mathcal X_L=\{(\textbf x_L, \textbf c_L)\}
XL={(xL,cL)}来训练判别器
D
D
D,其目标如下:
L
s
(
θ
D
)
=
E
X
L
[
l
o
g
q
D
(
c
L
∣
x
L
)
]
.
(9)
\mathcal L_s(\theta_D)=\mathbb E_{\mathcal X_L}[log~q_D(\textbf c_L|\textbf x_L)].\tag{9}
Ls(θD)=EXL[log qD(cL∣xL)].(9)
此外,条件生成器
G
G
G还能够合成(嘈杂的)句子属性对
(
x
^
,
c
)
(\hat \textbf x,\textbf c)
(x^,c),可用于增加半监督学习的训练数据。为了缓解噪声数据的问题并确保模型优化的鲁棒性,我们引入了最小熵正则化项。 由此产生的目标是:
L
u
(
θ
D
)
=
E
p
G
(
x
^
∣
z
,
c
)
p
(
z
)
p
(
c
)
[
l
o
g
q
D
(
c
∣
x
^
)
+
β
H
(
q
D
(
c
′
∣
x
^
)
)
]
,
(10)
\mathcal L_u(\theta_D)=\mathbb E_{p_G(\hat \textbf x|\textbf z,\textbf c)p(\textbf z)p(\textbf c)}[log~q_D(\textbf c|\hat \textbf x)+\beta\mathcal H(q_D(\textbf c'|\hat \textbf x))],\tag{10}
Lu(θD)=EpG(x^∣z,c)p(z)p(c)[log qD(c∣x^)+βH(qD(c′∣x^))],(10)
其中
H
(
q
D
(
c
′
∣
x
^
)
)
\mathcal H(q_D(\textbf c'|\hat \textbf x))
H(qD(c′∣x^))是对生成的句子
x
^
\hat \textbf x
x^评估的分布
q
D
q_D
qD 的经验香农熵,
β
\beta
β是平衡参数。直观上,最小熵正则化鼓励模型对预测标签有很高的信心。
然后使用标注样本和合成样本的判别器联合训练目标如下:
m
i
n
θ
D
L
D
=
L
s
+
λ
u
L
u
,
(11)
min_{\theta_D}\mathcal L_D=\mathcal L_s+\lambda_u\mathcal L_u,\tag{11}
minθDLD=Ls+λuLu,(11)
其中
λ
u
\lambda_u
λu是平衡参数。
3.3 Summarization and Discussion
我们已经推导出了我们的模型及其学习过程。生成器首先通过在大型未标记句子语料库上通过最小化方程(4)的目标,来训练基础 VAE 已进行初始化,此时潜在代码
c
\textbf c
c从先验分布
p
(
c
)
p(\textbf c)
p(c)中采样。然后通过交替优化生成器和判别器来训练完整模型,如算法 1 中所述。
我们的模型可以看作是将 VAE 框架与扩展的wake-sleep方法相结合,如图 2 所示。具体而言,在等式(10)中,样本由生成器生成并用作判别器最大似然训练的目标 . 这类似于wake-sleep中的sleep阶段。等式(6)-(7)进一步利用生成的样本来改进生成器。我们可以将以上内容一起视为基于从生成网络中进行祖先采样获得的“梦想”样本的扩展睡眠过程。另一方面,等式 (4) 从观测值
x
x
x上的判别器分布
q
D
(
c
∣
x
)
q_D(\textbf c|\textbf x)
qD(c∣x)中采样
c
c
c,以形成训练生成器的目标,该目标对应于wake阶段。有效的组合实现了离散的潜在code、整体判别器指标和高效的相互引导。
判别器的训练需要监督数据来施加指定的语义。可以在单独的标记集上独立训练不同属性的判别器。也就是说,模型不需要用所有属性标注一个句子,而只需要每个单独属性的独立标注数据。此外,由于标注数据仅用于学习属性语义而不是直接生成句子,因此我们可以将数据范围从标注的句子扩展到例如标注的单词或短语。如实验(第 4 节)所示,我们的方法能够有效地将单词级别的知识提升到句子级别并生成令人信服的句子。最后,通过sleep短语中增强的无监督训练,我们展示了一点监督就足以学习结构化表示。