摘要
大型语言模型在文本生成任务上显示了很好的结果,但用户无法轻易控制所生成文本的特定方面。我们开源了CTRL,它是一个具有1.63亿参数的transformer条件语言模型,以给定的风格,内容以及针对任务行为的控制code为条件,来进行模型训练。控制code来自与原始文本相关的结构,从而保留了无监督学习的优势,同时为文本生成提供更明确的控制。给定一个序列,这些code还允许CTRL预测训练数据的哪些部分与该序列最相似。这提供了一种通过基于模型的源属性分析大量数据的潜在方法。我们在https://github.com/salesforce/ctrl上发布了多个尺寸的CTRL的预训练模型。
1.介绍
使用足够大的数据量、模型容量和计算量,生成模型可以学习强大的分布,以生成来自复杂领域的高质量样本。在计算机视觉中,生成对抗网络的出现改善了图像生成。然后,许多研究专注于控制生成过程和改善生成分布估计的方法。
在自然语言处理中,语言模型通常针对某个具体任务被训练为条件语言模型。它们也被用作抽取词向量,文档向量或上下文向量的方法进行转移学习。语言模型本身也通过微调迁移到新任务。较少的语言模型则是不受任何特定任务约束的生成。通常,由模型生成或由人类编写的提示只能用于为需要生成的文本提供粗略的指南或起点。本文提出了如何更明确地控制文本的生成。
受图像生成中可控制程度,以及McCann et al. (2018)中文本生成和多任务学习最新进展的启发,我们训练了一种语言模型,该模型以各种控制code为条件,使得生成文本上期望的特征更加明确。通过使用1.63亿参数,我们的 Conditional Transformer Language(CTRL)模型可以以某个具体领域,风格,主题,日期,实体,实体间关系,槽以及任务相关行为的控制code为条件,来生成期望的文本。为了保留在无监督环境中训练语言模型的通用性,我们从与训练大型语言模型的原始文本相关的结构中提取控制code,并基于控制code来训练CTRL。例如,可以为Wikipedia,Project Gutenberg和Amazon Reviews等大型资源分配与领域相关的控制code。在绝大多数情况下,收集的训练文本与URL相关联,该URL通常包含与该文本相关的信息。人们可以直接使用这些code触发具有不同语言社区特点的文本生成,而无需了解如何使用特定的语言模式进行提示。即使在初始提示保持固定时,也可以通过控制内容或更改领域以更具可预测性的方式生成文本。
因为所有控制code都和训练数据的特定子集绑定,所以给定一个序列,CTRL可用于预测最可能的训练数据子集。CTRL与其训练数据之间的这种明确的关系可以被利用来分析语言模型从每个领域中学习的相关性,并且它提供了通过语言模型研究大量文本的方法。
这些控制code还允许以在不损害模型的一般性的情况下以增加重要技能的方式直接引入特定任务数据。 问答和机器翻译的控制code使得这些技能可以轻松地使用CTRL。这些code可以在生成期间与其他code组合,以实现对相关领域,内容以及具体任务行为的同时控制。
为了推动自然语言处理中通用模型的更加可控,我们在https://github.com/salesforce/ctrl上开源了多个不同版本的预训练CTRL。我们希望开源的模型能够进一步引导如何通过可控生成来增强自然语言理解。
2. LANGUAGE MODELING
给定样本序列
x
=
(
x
1
,
.
.
.
,
x
n
)
x =(x_1,...,x_n)
x=(x1,...,xn),其中每个
x
i
x_i
xi来自固定的词汇集,语言建模的目标是学习
p
(
x
)
p(x)
p(x)。 因为x是一个序列,所以使用链式法则来分解这种分布是自然的:
p
(
x
)
=
∏
i
=
1
n
p
(
x
i
∣
x
<
i
)
p(x)=\prod^n_{i=1}p(x_i|x_{\lt i})
p(x)=i=1∏np(xi∣x<i)
上式将语言建模分解为下一个单词预测。目前最好的方法是在数据集
D
=
{
x
1
,
.
.
.
,
x
∣
D
∣
}
D = \{x^1,...,x^{|D|}\}
D={x1,...,x∣D∣}上训练参数为
θ
θ
θ的神经网络,以最小化的负对数似然:
L
(
D
)
=
−
∑
k
=
1
∣
D
∣
l
o
g
p
θ
(
x
i
k
∣
x
<
i
k
)
\mathcal L(D)=-\sum^{|D|}_{k=1}log~p_{\theta}(x^k_i|x^k_{\lt i})
L(D)=−k=1∑∣D∣log pθ(xik∣x<ik)
由于语言模型能够学习
p
θ
(
x
i
∣
x
<
i
)
p_θ(x_i|x_{<i})
pθ(xi∣x<i),因此可以通过顺序采样其预测的字符来生成长度m的新序列
x
~
\tilde x
x~:
p
θ
(
x
0
)
,
p
θ
(
x
1
∣
x
~
0
)
,
.
.
.
,
p
θ
(
x
m
∣
x
~
<
m
)
p_θ(x_0),p_θ(x_1|\tilde x_0),...,p_θ(x_m|\tilde x_{<m})
pθ(x0),pθ(x1∣x~0),...,pθ(xm∣x~<m)。
3. LANGUAGE MODELING WITH CTRL