Prompt-based Language Models:模版增强语言模型小结

©PaperWeekly 原创 · 作者 | 李泺秋

学校 | 浙江大学硕士生

研究方向 | 自然语言处理、知识图谱

最近注意到 NLP 社区中兴起了一阵基于 Prompt(模版)增强模型预测的潮流:

从苏剑林大佬近期的几篇文章《必须要 GPT3 吗?不,BERT 的 MLM 模型也能小样本学习》,《P-tuning:自动构建模版,释放语言模型潜能》,到智源社区在 3 月 20 日举办的《智源悟道 1.0 AI 研究成果发布会 暨大规模预训练模型交流论坛》[1] 中杨植麟大佬关于“预训练与微调新范式”的报告,都指出了 Prompt 在少样本学习等场景下对模型效果的巨大提升作用。

本文根据上述资料以及相关论文,尝试梳理一下 Prompt 这一系列方法的前世今生。

不知道哪里来的图……

本文目录:

  1. 追本溯源:从GPT、MLM到Pattern-Exploiting Training
    1. Pattern-Exploiting Training
  2. 解放双手:自动构建Prompt
    1. LM Prompt And Query Archive
    2. AUTOPROMPT
    3. Better Few-shot Fine-tuning of Language Models
  3. 异想天开:构建连续Prompt
    1. P-tuning
  4. 小结

追本溯源:从GPT、MLM到Pattern-Exploiting Training

要说明 Prompt 是什么,一切还要从 OpenAI 推出的 GPT 模型说起。

GPT 是一系列生成模型,在 2020 年 5 月推出了第三代即 GPT-3。具有 1750 亿参数的它,可以不经微调(当然,几乎没有人可以轻易训练它)而生成各式各样的文本,从常规任务(如对话、摘要)到一些稀奇古怪的场景(生成 UI、SQL 代码?)等等。

在这里,我们关注到 GPT 模型在零样本场景下的运行方式——基于一定的任务描述(task description),按这一描述的指定生成文本:

▲ 嘿,注意:图中的 Prompt 不是本文的 Prompt

仅仅几个单词组成的任务描述,就可以为语言模型的预测提供指导,这启发了一些少样本领域的工作——在缺少训练数据的场景下,利用任务描述能很好地提升模型的效果。

另一个灵感来自预训练语言模型的 Masked Language Model/MLM 任务:

在 BERT 的训练中,有 15% 的输入词被选中,其中的绝大部分又被替换为 [MASK] 标签或者随机的其他词,并在最终的 hidden states 中对被遮盖的词进行预测,通过还原遮盖词让模型学习单词级别的上下文信息。

将这两个灵感融合,就得到了以下将介绍的 Pattern-Exploiting Training,或 PET 方法。
补充:从这里就可以提出一个问题,Mask 和 Prompt,具体而言是哪一部分对模型预测起了作用?

1.1 Pattern-Exploiting Training

PET 来自 2020 年的论文(已发表在 EACL 2021)《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》,其中介绍了一种基于模版和词遮盖将文本分类任务转换为完形填空(cloze)任务的半监督训练方法,仅使用 RoBERTa-base 模型就在多个半监督场景下取得了 SOTA:
1. 首先,针对少量样本设计描述的模版(pattern),如下图中对 “Best pizza ever!” 的情感分类任务,生成一个 “It was ___” 的句子并拼接在原始输入后作为补充;
  • 对模版中遮盖的词(即下划线部分),设计候选词对应不同的情感极性(图中 great 对应 positive,bad 对应 negative),然后将模型预测 “great” 的概率作为原来预测 “positive” 的概率,从而情感分类任务转换为完形填空任务

  • 当然,原文中对 NLI 任务也进行了模版构建,其操作有所不同,在此不展开;

  • 注意,完形填空和 MLM 不是一个任务,虽然二者都是词分类任务,但是类别一个是候选词集,一个是模型中全部的词集;

2. 对有标签样本集设计不同的模版,然后对每一个模版,分别训练模型;
  • 因为有标签样本比较少,所以训练成本低于全量数据训练一个完整的模型;

  • 这里的训练因为是有监督的,所以结合了完形填空的词分类 loss 和 MLM Loss 进行训练: ,其中 MLM loss 占较小比重(1e-4);

3. 使用上面训练得到的一堆模型,在无标签数据上进行预测,按不同 pattern 的模型 acc 对应权重对所有的预测进行归一化,作为 soft label 蒸馏一个最终模型;
  • 这里最终模型并不进行 pattern 的学习;

  • 在这里的训练中,不涉及 MLM loss。

在 PET 的基础上,为了让不同模版训练出的模型互相学习,文中还提出了一种迭代式的 PET 训练(Iterative PET,iPET):
  • 其实就是进行多代交叉的蒸馏,随机选取每一代的模型为无标签数据进行标记,并基于此进一步训练下一代模型;
  • 最终和 PET 一样,用不同模型标注的无标签数据进行预测,蒸馏一个统一的模型。

说完了训练过程,我们看看这里的模版(pattern):

  • 情感分类(Yelp):

  • 文本蕴含(MNLI):

可以看出,人工构建的模板比较简单,语义上也和任务具有较好的关联。

在这一半监督场景工作的基础上,本文作者进一步在 NAACL 2021 上发表了《It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners》,通过将“小模型”(ALBERT)和 GPT-3 这一巨无霸在 SuperGLUE benchmark 上进行对比,进一步挖掘 PET 训练在少样本场景下的潜力。

由于使用的基本是同一个方法(补充了实际训练中 multi-token 的 mask 预测),所以不再重复,在此贴出论文的实验结果:
除了这一个震撼的结果以外,苏神的文章中也有一些中文的少样本实验(包括零样本、小样本、半监督等场景)证明了 MLM 预测在中文情感分析中的作用。
解放双手:自动构建Prompt

有了 PET,人们显然是不满足的——类比机器学习的不同时期的话,人工构建 pattern/prompt 就像在进行手工的特征工程,对输入特征进行人工的选择和组合,所谓“有多少人工,就有多少智能”,需要不断尝试和调整才能取得一个比较好的模版。

而依赖特征工程的方法,如今很大程度上被深度学习为主的自动选择特征的方法取代了——换言之,取代手工选取模版的方法自然会被自动选取特征的方法取代

不同 pattern 对效果影响巨大(来自 GPT Understands, Too)
2.1 LM Prompt And Query Archive

最早提出自动构建模版的工作应该是发表在 TACL 2020 的《How Can We Know What Language Models Know?》,其中提出了一个 LPAQA(LM Prompt And Query Archive)方法以进行模版的自动搜索。

不过,这篇文章并不应用在前述的少样本场景,而是针对一个检测语言模型是否具有某些知识的探针任务(Language Models as Knowledge,LAMA Probe)——而这一任务的形式也是完形填空。

LPAQA 旨在改进 LAMA 的模版(换言之,让语言模型在这些新的 queries 上具有更好的预测表现),以为检测 LM 中的知识提供一个更严格的下界:

▲ LAMA 部分问题模版

可以看到,LAMA 数据集中包含的句子用于描述两个实体之间的关系,而其中一个实体被遮盖,需要语言模型来预测,如果预测正确则说明模型学会了这一关系。然而,很多时候其实从这些 query 中是看不出这种关系的,或者说,即便模型没有回答正确,也不能说明模型不懂这个关系(比如存在一对多的情形,或者模型未见过的实体等)。

具体而言,LPAQA 包含两部分生成方法:

1. Mining-based Generation:基于远程监督的假设(即,出现相同实体对的句子表达相同的关系),在 Wikipedia sentence 中寻找包含头尾实体 h、t 的句子,然后进一步提出了两种 prompt 抽取方法:

  • Middle-word Prompts:对于 h、t 中间包含文本的句子形式,将 h、t 中间的文本当作 prompt;

  • Dependency-based Prompts:对于其他句子,使用句法依赖解析来提取 h 和 t 最短的路径,并将路径上的词作为 prompt。

2. Paraphrasing-based Generation:类似查询拓展技术,在保持原 prompt 语义同时增加词汇的多样性。这种方法依赖反向翻译(back-translation),即翻译到另一种语言再翻译回来,构成多个样本后根据往返概率(round-trip probability)筛选 prompt。

显然,第一种方法会引入噪音,而第二种也具有不稳定性。

因此,需要进一步筛选高质量的生成语句,为此本文提出了 selection 和 ensemble 的方法:
  • Top-1 Prompt Selection:就是用 LM 测一测看看效果,取 acc 最高的 prompt;
  • Rank-based Ensemble:除了 Top-1 方案,有时候需要保持多个模版来增强效果,即选取前 K 个模版;
  • Optimized Ensemble:通过 LM 的预测为不同的 prompt 赋权。

这篇文章看起来很复杂,实际上提出了一个比较 basic 的方案。

简单、可控,没有什么 fancy 操作,不需要调整什么模型参数(几乎是 parameter-free 的),实际操作和落地都很有价值,这大概就是 LPAQA 的优点……

2.2 AUTOPROMPT

这是来自 EMNLP 2020 的文章《AUTOPROMPT: Eliciting Knowledge from Language Models with Automatically Generated Prompts》,提出了一种基于梯度的模版搜索方案,如下图:

方法很直观,将通过梯度找出的 trigger word 和 mask 拼接在文本中,形成一个语义上不通顺、但是对模型而言却具有合理提示的样本,并且将 label 预测转换为 masked token 的预测(即完形填空问题)。

方法的核心在于选取 trigger word,这一方法基于本文作者之一的 Wallace 在 EMNLP 2019 发表的对抗攻击文章《Universal Adversarial Triggers for Attacking and Analyzing NLP》:

1. 将所有 trigger token 初始化为 mask token;

2. 对某个 trigger 进行替换,找出前 k 个最大化输入与其梯度乘积的词:

3. 对每个候选词,评估其加入 prompt 后的模型预测概率:

4. 通过形如的模版,加入上面选出的词构造 prompt。

补充:这里的步骤说的不是很清楚,不过大致应该就是梯度粗筛+代入模版精筛。具体参考:http://ucinlp.github.io/autoprompt,而且这里用 5 个词的 template,估计也是效果试出来的……
此外,这里标签词也是自动化的方式选出来的:

1. 将 mask token 的 hidden states 过一个线性层,用这一输出对应真实 label 的预测,进行训练得到线性层的权重;

2. 将 MLM 的输出 word embedding 过上面这个线性层(这里应该是说,将候选词代替 mask token 后输出的 hidden states)并预测 label,这个分数越高说明候选词与 label 的关联越强,那么就取分数最高的候选词作为 label 对应的token:。
这一工作不但在 SST-2 和 SICK-E(一个 NLI 数据集,不知道为什么不用 MNLI 呢?)上进行实验,还在 LAMA 与 LPAQA 进行了比较。
以下是不同任务找出的 trigger token 和 label token:
在 LAMA 数据集上,和 LPAQA 相比,AUTOPROMPT 生成的 prompt 对 LM 效果提升更明显:即便每个关系只用一个 prompt,也比 LPAQA 集成了 30 句 prompt 的提升效果要好……

实验中发现一些有趣的结论:

  • AUTOPROMPT 中,更容易用语言表达的 label 对应的 prompt 提升比其他 label 的明显(例如 NLI 的 contradiction > entailment / neutral);
  • 在 LAMA 中,越容易具体说明的关系对应的 prompt 对模型提升越大,这个和上一点相似;
  • 在 LAMA 中,RoBERTa 比 BERT 表现差,因为它在 prompt 中加入了一些无关的 token,然而这一点依然有待未来工作探究(当然,LAMA 仅仅表明了语言模型能力的下界)。

进一步,本文中进行了 RE 实验,看看 AUTOPROMPT 在 RE 任务(T-Rex 数据集)上的效果。实验发现 LM 比常规 RE 大幅度胜出,在对尾实体进行随机替换实验后依然如此——后一实验用于探究 LM 是否因为记忆了实体才具有更好的效果。

补充:值得注意的是,这里的实验忽略 NA 即无关系标签,使用 precision 作为指标,和常规的 F1 指标有较大区别;这里的设置我不是很理解(也许单纯为了效果更好)

总体而言,AUTOPROMPT 虽然效果不错,但相对而言具有更差的解释性,其搜索方式也比较简单——这一点是否是缺点则见仁见智。

2.3 Better Few-shot Fine-tuning of Language Models

这一工作来自 Danqi Chen 大佬的小组:《Making Pre-trained Language Models Better Few-shot Learners》,探究少样本场景下 Prompt 的作用,基于谷歌的 T5 模型构建了一个自动化的 pipeline:

补充:LM-BFF 也可以是 language models’ best friends forever
同样注意到 PET 方法的低效,这一工作提出了一种名为 LM-BFF 的架构,引入了T5(Text-to-Text Transfer Transformer)生成模型用于自动化生成 Prompt,同时也指出 LPAQA 只能应用在有限场景(表达 relation 等),而 AUTOPROMPT 需要大量样本进行基于梯度搜索,总而言之目前的方案都不完美……

本文探究的是少样本场景,包括 single-sentence tasks 和 sentence-pair tasks。此前的工作局限于分类,本文还涉及 STS-B 这一回归任务。

此外还加入了 demonstrations(示例)与 prompt 一并输入以为预测提供指导。这一灵感来自于 GPT 在少样本场景的工作方式,即将示例样本与任务描述一并输入模型:

具体方案包括标签词的自动搜索、模版的搜索和样本实例的搜索,以下分别介绍:

1. 标签词搜索。用预训练模型为每个 label 找到预测最高的 k 个词,综合每个类的词进行训练找到效果最好的 n 个组合(嘿,这里我也没弄明白怎么找的,不会是暴力试一遍吧),再在 dev 微调找出最佳的一组;

2. 模板搜索。用 T5 进行不指定 token 数量的生成,这一点比普通的固定数量 mask 要自然;

3. 实力搜索。考虑到 GPT-3 方案对样本长度的限制和不同样本不好训练,使用 Sentence-BERT 为输入样本在每一个类别寻找相似的样本作为 demonstration。

使用 T5 搜索模版

实验结果如下:

  • 可以看出 prompt FT(auto) + demonstrations > prompt FT(auto) > prompt FT(man) > FT;
  • 但是全量数据 FT 还是比不过(差别不算大?也有超过的,不过 CoLA 低的不行),这也合情合理。
关于详细解读,可以参考这篇文章:
https://zhuanlan.zhihu.com/p/341609647
异想天开:构建连续Prompt

看到这 idea,我脑海里第一个念头就是:

你的下一句prompt,何必是自然语言?

好吧,这一块是关于唐杰老师的《GPT Understands, Too》,首次提出了用连续空间搜索的 embedding 做 prompt。

这拓展倒是合情合理,毕竟自然语言是给人看的,而模型只会看到一堆向量……
3.1 P-tuning

和之前的工作不太一样,这篇文章用的是 GPT 这个生成模型而不是 BERT 这些 MLM 模型。

同样注意到离散化表达的搜索困难,但是这一工作接着自动搜索还提出了连续空间的搜索。

这一操作可就相当于去掉了镣铐,但是也带来了搜索空间过大的问题(同时,也模糊了 prompt 原本的含义)。

那么 p-tuning 是怎么搜索 prompt 的呢?请看:
为了(1)保持语义的关联、(2)保持 token 间的上下文依赖关系,作者使用一个可训练 LSTM 模型——即上图(b)中的 Prompt Encoder——生成的 embedding 替换模版中的词。
  • 在这一基础上,对某些和任务相关的 token 进行保留(task-related anchors),比将它们也随机训练带来的效果更好。——anchors是怎么选的?好像论文没说……
  • 然后在少样本场景,只训练 LSTM(即只进行寻找 prompt);
  • 在全量数据场景,全部参数进行 fine-tuning(即寻找 prompt 和 fine-tuning 共同进行)。

在 LAMA 和 SuperGLUE 上进行测试:

LAMA 上的结果表明:
  • PT > MP + FT > FT > MP
  • PT > AUTOPROMPT > LPAQA > MP

然后是 SuperGLUE,对比 BERT-large 和 GPT2-medium(和 base 结果类似,这里只贴一个):

除了和 LAMA 类似的结论,GPT2 虽然还是有一些任务比不过 BERT,但是还是很不错的。

然后,这里又拿出前辈 PET 进行比较:

  • 相比起来,iPET 使用了数据增强、模型集成、蒸馏技术,然而还是比不过 P-Tuning(读出了作者的小骄傲哈哈);
  • 这张表上半部分除了使用 32 个 train 以外,还用挑选的 32 个 dev 进行验证,大部分任务的效果依然超过了 GPT-3 和 PET,说明了 P-Tuning 的有效性。

补充1:问题来了,连续的 prompt 和离散的有多接近呢?文章中没有提及……补充2:用 LSTM 这一操作多少有点迷惑和不自然……可以参考苏神的版本,不加 LSTM 直接训练的讨论。
补充:又看到一篇 NLG 上的 Prefix-Tuning 方法《Prefix-Tuning: Optimizing Continuous Prompts for Generation》,有兴趣的读者可以去了解一下:

Prefix-Tuning: Optimizing Continuous Prompts for Generation [2]

小结

在低资源场景(半监督、少样本以至于零样本)下,Prompt 对 LM 的直接预测以及 fine-tuning 具有明显的增益(甚至,是否可以考虑不做 tune 只加 prompt 的方法);
目前而言,不确定 prompt 对 LM 的增益主要来源于完形填空这一任务设置与其预训练 MLM 流程保持了形式的一致性,还是搜索到的提示词为预测带来的帮助;
现在有这么多种 prompt(或者叫额外输入):GPT-3 的 task description、完形填空的 prompt、甚至连续的 prompt 以及额外样本 demonstration,从本质上是不一样的,对模型效果的提升的相同之处和不同方面还有待研究——为什么这个 prompt 效果好,为什么那个不好,是否有一种统一的最优方案,也是值得探索的问题;

目前来看 prompt 的优化搜索空间很大,但是它主要提升的少样本场景本身就缺少训练数据,自然需要人工的先验来帮助模型,这人工先验又不一定有效,是一个矛盾的点。

参考文献

[1] https://hub.baai.ac.cn/activity/details/141
[2] https://arxiv.org/abs/2101.00190
(0)

相关推荐