Controllable Natural Language Generation with Contrastive Prefixes:使用前缀微调指导多属性文本生成

本文提出了一种利用冻结LM的前缀控制框架,通过监督和无监督方法训练多个前缀,考虑前缀间的关系,实现了单方面和多方面控制。实验结果显示,这种方法有效指导了生成过程。
摘要由CSDN通过智能技术生成

文章的主要工作

(1)提出了一种新颖的框架,该框架利用带有冻结 LM 的前缀作为可控 GPT2 生成的轻量级替代方案。
(2)提出了一种具有新颖目标的监督方法和无监督方法来进行前缀训练,其中考虑了前缀之间的关系并同时训练多个前缀。
(3)这项工作为单方面控制和多方面控制提供了统一的视角。实验结果表明,我们的方法可以有效地指导单方面控制和多方面控制的生成。

方法

image.png

为了独立地训练每一个前缀,我们考虑属性之间的关系并同时训练多个前缀,因此 H θ H_\theta Hθ 的维度是 N × M × D N \times M \times D N×M×D,其中 N N N 是前缀的数量。在单一方面控制中, N N N 等于涉及方面的属性数量。 M M M 是前缀的长度。 D = 2 × L × E D = 2 \times L \times E D=2×L×E 是在GPT-2中激活的维度,其中 L L L 是Transformer层的数量, E E E 是隐藏层的大小,2表示一个键向量和一个值向量。跟随Li和Liang (2021)的工作,我们通过一个较小的参数 H θ ′ [ l , j , : ] H'_\theta[l, j, :] Hθ[l,j,:] 与一个大矩阵 W l W_l Wl 重参数化 H θ [ l , j , : ] = W l H θ ′ [ l , j , : ] H_\theta[l, j, :] = W_lH'_\theta[l, j, :] Hθ[l,j,:]=WlHθ[l,j,:]。训练完成后,只有 H θ H_\theta Hθ 需要被保存以用于生成,而 W W W H θ ′ H'_\theta Hθ 可以被丢弃。因为GPT-2的参数在训练过程中被冻结了,它们也不需要被保存。图2展示了在训练前缀控制下的生成过程的一个例子。前缀可以通过监督、半监督或无监督的方式来训练。由于半监督方法是监督方法和无监督方法的结合,我们在这一部分介绍了监督和无监督方法。为了清晰起见,我们在单一方面控制设置下介绍这些方法。

监督方法

假设所关注的方面有属性集合 Y Y Y,每个训练样本是一对 ( x , y ) (x, y) (x,y),其中 x x x 是输入文本, y ∈ Y y \in Y yY 是属性标签。注意,属性标签也表示前缀在 H θ H_\theta Hθ 中的地面真值索引,所以 y y y 也指的是下文描述中的前缀索引。我们引入了一个额外的判别损失来同时训练多个前缀。因此,训练损失 L s u p L_{sup} Lsup 是语言模型损失 L L M L_{LM} LLM 和判别损失 L d L_d Ld 的加权和:

  • 监督训练损失: L s u p = ω 1 L L M + ω 2 L d L_{sup} = \omega_1L_{LM} + \omega_2L_d Lsup=ω1LLM+ω2Ld
  • 语言模型损失: L L M = − ∑ t = 1 T log ⁡ p ( x t ∣ x < t , y ) L_{LM} = -\sum_{t=1}^{T} \log p(x_t | x_{<t}, y) LLM=t=1Tlogp(xtx<t,y)
  • 判别损失: L d = − log ⁡ p ( y ) p ( x ∣ y ) ∑ y ′ ∈ Y p ( y ′ ) p ( x ∣ y ′ ) L_d = -\log \frac{p(y)p(x|y)}{\sum_{y' \in Y} p(y')p(x|y')} Ld=logyYp(y)p(xy)p(y)p(xy)

计算 log ⁡ p ( x t ∣ x < t , y ) \log p(x_t | x_{<t}, y) logp(xtx<t,y) 通过固定的GPT2参数化为 log ⁡ p θ , γ ( x t ∣ x < t , H θ [ y , : , : ] ) \log p_{\theta, \gamma}(x_t | x_{<t}, H_\theta[y, :, :]) logpθ,γ(xtx<t,Hθ[y,:,:]),其中 γ \gamma γ 是固定的GPT2参数, θ \theta θ 表示可学习的前缀参数。 log ⁡ p ( x ∣ y ) \log p(x|y) logp(xy) log ⁡ p θ , γ ( x t ∣ x < t , y ) \log p_{\theta, \gamma}(x_t | x_{<t}, y) logpθ,γ(xtx<t,y) t t t 上的和,因此参数化 log ⁡ p ( x ∣ y ) \log p(x|y) logp(xy) log ⁡ p θ , γ ( x t ∣ x < t , H θ [ y , : , : ] ) \log p_{\theta, \gamma}(x_t | x_{<t}, H_\theta[y, :, :]) logpθ,γ(xtx<t,Hθ[y,:,:]) 的和。

注意,每个前缀可以单独使用 L L M L_{LM} LLM 进行训练,这将与Li和Liang(2021)的前缀调整方法相同。直观地讲,通过 L L M L_{LM} LLM 训练的前缀被注入了鼓励生成的信息。然而,我们观察到,在可控的自然语言生成(NLG)中,给前缀注入不鼓励生成的信息也是有帮助的。给定一个训练样本 ( x , y ) (x, y) (x,y),前缀 H θ [ y , : , : ] H_\theta[y, :, :] Hθ[y,:,:] 应当被优化以生成 x x x,而其他前缀应当被阻止生成 x x x。为了实现这一目标,所有在 H θ H_\theta Hθ 中的前缀应该同时被训练。因此,判别损失 L d L_d Ld 被引入。优化 L d L_d Ld 可以通过增加 p ( y ∣ x ) p(y|x) p(yx) 并减少 p ( x ∣ y ′ ) p(x|y') p(xy),其中 y ′ ∈ Y \ { y } y' \in Y \backslash \{y\} yY\{y} 来提高属性对齐。我们假设先验分布是均匀的,所以 p ( y ) p(y) p(y) p ( y ′ ) p(y') p(y) 可以在公式被消去。图3展示了两个前缀的训练过程。

image.png

无监督方法

在无监督设定中,我们假定属性集 Y Y Y 中所关心的方面是已知的。训练样本仅由输入文本 x x x 构成。属性标签 y y y 不再可用,因此与 x x x 相关联的前缀索引是未知的。换句话说,前缀索引是一个潜在变量 z z z,其后验分布遵循一个分类分布。受到VQ-VAE(van den Oord等人,2017年)的启发,我们考虑将前缀作为离散潜在表示。我们采用在上述监督方法中的主模型作为解码器,并引入一个编码器来参数化分类分布 q ( z ∣ x ) q(z|x) q(zx)。根据 q ( z ∣ x ) q(z|x) q(zx),选出一个前缀索引 z z z 并将前缀 H θ [ z , ⋅ ; ] H_{\theta}[z, \cdot;] Hθ[z,;] 送入解码器来重构输入文本 x x x。由于前缀的选择过程是不可微分的,我们使用了Gumbel-Softmax(GS)松弛方法(Jang等人,2017年;Maddison等人,2017年)遵循Sønderby等人(2017年);Ramesh等人(2021年)。形式上, q ( z ∣ x ) q(z|x) q(zx) 的计算如下:

q ( z ∣ x ) = GS ( − ∥ Enc ( x ) − H θ ∥ 2 , τ ) q(z|x) = \text{GS}\left(-\left\|\text{Enc}(x) - H_{\theta}\right\|_2, \tau\right) q(zx)=GS(Enc(x)Hθ2,τ)

其中, τ \tau τ 是Gumbel-Softmax的温度, Enc \text{Enc} Enc 是编码器函数。我们使用预训练的GPT-2模型后跟一个线性层作为编码器。为了训练前缀,损失函数是三个损失项的加权和:

L uns = ω 1 L LM + ω 2 L KL + ω 3 L c \mathcal{L}_{\text{uns}} = \omega_1 \mathcal{L}_{\text{LM}} + \omega_2 \mathcal{L}_{\text{KL}} + \omega_3 \mathcal{L}_{\text{c}} Luns=ω1LLM+ω2LKL+ω3Lc
image.png

其中, L LM \mathcal{L}_{\text{LM}} LLM 是语言模型损失。类似于在监督方法中的计算, log ⁡ p ( x t ∣ x < t , z ) \log p(x_t | x_{<t}, z) logp(xtx<t,z) 是参数化的,作为 log ⁡ p θ y ( x t ∣ x < t , H θ [ z , ⋅ ; ] ) \log p_{\theta_y}(x_t | x_{<t}, H_{\theta}[z, \cdot;]) logpθy(xtx<t,Hθ[z,;]) L KL \mathcal{L}_{\text{KL}} LKL 是Kullback-Leibler散度,我们假设先验 p ( z ) p(z) p(z) 是均匀的。注意,这两个术语构成了VAE的损失函数。优化这两个损失项可以改善证据的下界 log ⁡ p ( x ) \log p(x) logp(x)。类似于在监督方法中 L d \mathcal{L}_{\text{d}} Ld 背后的直觉,如果 x x x 的真实前缀是 H θ [ y , ⋅ ; ] H_{\theta}[y, \cdot;] Hθ[y,;],那么其他前缀应当被阻止生成 x x x。然而, L d \mathcal{L}_{\text{d}} Ld 需要计算时有真实标签 y y y。相反,我们引入了一个无监督对比损失 L c \mathcal{L}_{\text{c}} Lc

L c = max ⁡ ( m − ∥ p ( z ∣ x ) − p ( z ~ ∣ x ) ∥ 2 , 0 ) 2 \mathcal{L}_{\text{c}} = \max(m - \left\| p(z|x) - p(\tilde{z}|x) \right\|_2, 0)^2 Lc=max(mp(zx)p(z~x)2,0)2
其中 m m m 是预设的边际值, z ~ \tilde{z} z~ 是另一个潜在变量,表示相反前缀的索引。 q ( z ~ ∣ x ) q(\tilde{z}|x) q(z~x) 的计算如下:

q ( z ~ ∣ x ) = GS ( − ∥ Enc ( x ) − H θ ∥ 2 , τ ) q(\tilde{z}|x) = \text{GS}\left( -\left\| \text{Enc}(x) - H_{\theta} \right\|_2, \tau \right) q(z~x)=GS(Enc(x)Hθ2,τ)

L c \mathcal{L}_c Lc 旨在通过将 p ( z ∣ x ) p(z|x) p(zx) p ( z ~ ∣ x ) p(\tilde{z}|x) p(z~x) 推开一个边际值来增加属性对齐。 p ( z ~ ∣ x ) p(\tilde{z}|x) p(z~x) 的计算如下:

p ( z ~ ∣ x ) = p ( z ~ ) p ( x ∣ z ~ ) ∑ z ′ ∈ Y p ( z ′ ) p ( x ∣ z ′ ) p(\tilde{z}|x) = \frac{p(\tilde{z})p(x|\tilde{z})}{\sum_{z' \in Y} p(z')p(x|z')} p(z~x)=zYp(z)p(xz)p(z~)p(xz~)

我们假设先验是均匀的,所以 p ( z ~ ) p(\tilde{z}) p(z~) p ( z ′ ) p(z') p(z) 可以被约去。类似于在监督方法中 log ⁡ p ( x ∣ y ) \log p(x|y) logp(xy) 的参数化, log ⁡ p ( x ∣ z ) \log p(x|z) logp(xz) 的参数化是 log ⁡ p θ y ( x t ∣ x < t , H θ [ z , ⋅ ; ] ) \log p_{\theta_y}(x_t | x_{<t}, H_{\theta}[z, \cdot;]) logpθy(xtx<t,Hθ[z,;]) 关于 t t t 的总和。训练过程在图4中说明。

image.png

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青云遮夜雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值