- API 文档
- CLI
- 集成指南
- 博客
使用变换器进行基于提示的学习
Communications Mining 的机器学习模型使用一种称为 “变换器”的架构,该架构在过去几年中,在大多数常见的自然语言处理 (NLP) 任务中取得了最先进的成果。 首选方法是采用预训练的变换器语言模型,并针对感兴趣的任务对其进行微调。
最近,我们一直在研究“提示”,这是一组很有前景的方法,而且越来越受欢迎。 其中涉及直接用自然语言指定任务,以供预训练语言模型解释和完成。
基于提示的方法具有显着的潜在优势,因此您应该使用它们吗? 这篇文章将:
- 举例说明传统微调和提示之间的区别。
- 解释一些流行的基于提示的方法的工作原理的详细信息。
- 讨论基于提示的方法的优点和缺点,并就是否使用这些方法提供建议。
这些语言模型首先使用未注释的数据进行预训练,目的是能够对文本序列的语义进行编码(例如 句子/文档)。 预训练的目标是学习表示,这通常可用于任何下游任务。
经过预训练后,通常会针对下游任务对语言模型进行微调(即进一步训练预训练参数),例如 意图识别、情感分类、命名一般字段识别等。 微调流程需要带注释的训练数据,并且要针对每个任务单独微调模型。
预训练
变换器的工作原理是,首先将文本序列中的每个单词编码为数字向量,称为“嵌入”。 嵌入层后跟一系列注意层,用于构建序列的模型内部表示。 最后是预测层,其目标函数取决于所使用的预训练类型。
变换器以无监督方式预训练。 此步骤通常使用以下两种训练之一来完成:
- 掩码语言建模(图 1 中显示了一个示例)
- 从序列中删除一些随机选择的单词,然后训练模型以预测这些缺失的单词。
- 下一个词预测(图 2 中显示了一个示例)
- 模型必须以之前的单词为条件,预测序列中的每个单词。
微调
预训练模型后,即可针对下游的有监督任务(例如 意图识别)。 这通常涉及在序列的最后一步获取表示(或表示的平均值),并将其传递通过小型前馈网络以进行预测(有关示例,请参见图 3)。 大多数情况下,预训练语言模型和前馈模型的参数都会在微调过程中更新。
假设我们有一个预训练的语言模型,要用于执行下游任务。 我们可以不使用语言模型的表示作为另一个模型的输入来解决任务(如上所述),而是可以通过向其提供“提示”并让它填写空白或完成序列(图 4 中显示了一个示例)。
也可以在提示中提供示例,以向模型展示应如何完成任务(有关示例,请参见图 5)。 这称为K -shot 学习,其中K指的是提供的示例数量。 这意味着图 4 是零样本学习的一个示例。
使用提示时,仍可以对模型进行微调(与上述相同),但这通常是不必要的,我们将在下面看到。
在本节的剩余部分,我们将介绍一些基于提示的常用方法;有关更全面的信息,请参阅此调查文件。
GPT-3
GPT-3是一个基于变换器的大型语言模型,它会在“通用抓取数据集” 的筛选版本上使用下一个词预测目标进行训练。 GPT-3 除了以生成非常优质的文本序列而出名外,它还可用于在零样本、单样本和少量样本 (10K100) 设置中执行监督任务,而无需进行任何微调。 作者训练了不同规模的模型,最大的模型有 1750 亿个参数。
总体而言,GPT-3 在零样本和一次性设置中取得了很好的结果。 在很少样本的情况下,它有时比最先进的模型表现更好,即使它们可以在大型带注释的数据集上进行微调。 在绝大多数任务中,GPT-3 的性能会随着模型大小和提示中显示的示例数量的增加而提高。
但是,它也难以完成某些任务,尤其是那些涉及比较多个文本序列的任务。 其中包括:
- 自然语言推理
- 给定两个句子,模型必须确定第二个句子是否与第一个句子相符、相矛盾还是中性。
- 阅读理解
- 模型将获得一个段落,并且必须回答有关该段落的问题。
作者假设,这是因为 GPT-3 已经过训练下一个词预测,即以从左到右(而不是双向)的方式。
模式利用训练
对于给定任务,模式利用训练 (pet)定义了一组提示,每个提示只有一个掩码令牌,这些提示会输入到使用掩码语言建模目标进行预训练的语言模型中。 PT 流程的工作方式如下:
- 为每个提示微调单独的语言模型,为任务创建模型集合。
- 使用此微调模型集合,以类似于知识提纯的方式为一组未注释的数据点生成“软”标签。
- 使用这些软标签,以上述微调部分中定义的方式微调最终语言模型(即 不使用提示)。
pet 也已扩展,可以处理多个掩码令牌,即使跳过上述步骤 2 和 3,它也能很好地工作(即直接将步骤 1 中微调后的模型集成用作最终模型)。 作者使用ALBERT作为基本掩码语言模型,并在 32 个样本的设置中评估 ET。 在SuperGLUE 基准中的大多数任务上,它的性能优于 GPT-3,而参数数量仅为 GPT-3 的 0.1%。
提示调整
与我们到目前为止介绍的方法不同,提示调整不会手动设计输入到模型的提示。 相反,它使用额外的可学习嵌入,这些嵌入直接附加到嵌入层的序列前面。 实际上,这跳过了用自然语言编写提示的步骤,而是允许模型直接在嵌入层学习最佳提示。
即时调优方法(如图 6 所示)基于预训练的T5语言模型。 这类似于最初的“转换器”,旨在执行转换。 T5 模型包含两个组件:
- 编码器使用自注意力机制将输入序列映射到向量表示,并在第一层插入可学习的提示嵌入。
- 解码器再次使用注意机制,根据编码器表示生成文本以对示例进行分类。
针对每个任务,我们在完整的带注释数据集上对模型进行了微调,但仅更新提示嵌入(包含绝大多数参数的模型的其余部分在预训练后冻结)。 即时调优的性能显着优于小样本 GPT-3,并且最大的即时调优模型可与完全微调的性能相匹配。
从实践的角度来看,基于提示的方法的最大优点是,它们通常可以很好地处理非常少量的带注释的数据。 例如,借助 GPT-3,只需一个带注释的示例,就可以在某些任务上实现最先进的性能。 尽管在很多设置中运行 GPT-3 大小的模型可能不切实际,但通过使用 ET 方法,使用更小的模型在几次设置中可能会优于 GPT-3。
从建模的角度来看,与传统的微调相比,使用提示是将预训练的语言模型用于下游任务的更自然的方式。 这是因为在使用提示时,我们使用语言模型来生成解决任务的文本;这也是它在预训练程序中接受训练的目的。 相比之下,在将语言模型用于下游任务时,传统微调(图 3)可视为不太直观的方法,因为与预训练过程相比,它使用具有完全不同目标函数的单独模型。
基于提示的学习的缺点
尽管基于提示的方法在能够很好地执行带有很少注释示例的任务方面显示出很大的前景,但它们也存在某些缺点。 首先,语言模型容易产生“幻觉” ,即它们可以生成无意义的、有偏差的或令人反感的文本。 这可能会使此类模型在任何实际设置中都无法使用。 可以限制语言模型生成的文本,但根据任务的不同,可能无法在保持性能的同时指定一组适当的限制。
其中许多方法的另一个缺点是提示本身是手动设计的。 这不仅在性能方面可能不是最佳选择,而且选择最佳提示本身也需要带注释的验证数据。 PT 通过使用提示集合来解决此问题,但这需要为每个提示微调单独的语言模型。 “软”提示方法(例如提示调整)不需要手动设计提示,但需要更大的训练数据集。
上述 GPT-3 和最新的PaLM模型等方法会插入带注释的示例作为自然语言提示的一部分,并且不会微调语言模型本身。 尽管这在少数样本学习设置中非常有效,但当有大量带注释的示例可用时,这可能不是最佳选择。 这是因为在达到最大序列长度之前,提示中只能插入少量示例;这限制了模型仅执行几次学习。
在这篇文章中,我们研究了基于提示的方法,这些方法涉及直接以自然语言指定任务,以便预训练语言模型进行解释和完成。
在使用很少的带注释的训练示例来实现出色性能方面,提示显示了很大的潜力。 但是,这些技术通常依赖于手动设计的提示,并且容易产生幻觉,因此在现实环境中使用并不安全。 因此,尽管这些方法确实看起来很有希望,但仍需进行大量研究,以使其实用化。
在 Communications Mining,我们正在积极研究制定可以安全使用的提示方法,提供精确的准确性估计值并生成结构化的可操作数据。 这项研究的结果即将推出。