Prompt-based Language Models:模版增强语言模型小结
©PaperWeekly 原创 · 作者 | 李泺秋
学校 | 浙江大学硕士生
研究方向 | 自然语言处理、知识图谱
最近注意到 NLP 社区中兴起了一阵基于 Prompt(模版)增强模型预测的潮流:
从苏剑林大佬近期的几篇文章《必须要 GPT3 吗?不,BERT 的 MLM 模型也能小样本学习》,《P-tuning:自动构建模版,释放语言模型潜能》,到智源社区在 3 月 20 日举办的《智源悟道 1.0 AI 研究成果发布会 暨大规模预训练模型交流论坛》[1] 中杨植麟大佬关于“预训练与微调新范式”的报告,都指出了 Prompt 在少样本学习等场景下对模型效果的巨大提升作用。
不知道哪里来的图……
本文目录:
追本溯源:从GPT、MLM到Pattern-Exploiting Training Pattern-Exploiting Training 解放双手:自动构建Prompt LM Prompt And Query Archive AUTOPROMPT Better Few-shot Fine-tuning of Language Models 异想天开:构建连续Prompt P-tuning 小结
追本溯源:从GPT、MLM到Pattern-Exploiting Training
要说明 Prompt 是什么,一切还要从 OpenAI 推出的 GPT 模型说起。
GPT 是一系列生成模型,在 2020 年 5 月推出了第三代即 GPT-3。具有 1750 亿参数的它,可以不经微调(当然,几乎没有人可以轻易训练它)而生成各式各样的文本,从常规任务(如对话、摘要)到一些稀奇古怪的场景(生成 UI、SQL 代码?)等等。
▲ 嘿,注意:图中的 Prompt 不是本文的 Prompt
仅仅几个单词组成的任务描述,就可以为语言模型的预测提供指导,这启发了一些少样本领域的工作——在缺少训练数据的场景下,利用任务描述能很好地提升模型的效果。
另一个灵感来自预训练语言模型的 Masked Language Model/MLM 任务:
在 BERT 的训练中,有 15% 的输入词被选中,其中的绝大部分又被替换为 [MASK] 标签或者随机的其他词,并在最终的 hidden states 中对被遮盖的词进行预测,通过还原遮盖词让模型学习单词级别的上下文信息。
补充:从这里就可以提出一个问题,Mask 和 Prompt,具体而言是哪一部分对模型预测起了作用?
1.1 Pattern-Exploiting Training
对模版中遮盖的词(即下划线部分),设计候选词对应不同的情感极性(图中 great 对应 positive,bad 对应 negative),然后将模型预测 “great” 的概率作为原来预测 “positive” 的概率,从而将情感分类任务转换为完形填空任务。
当然,原文中对 NLI 任务也进行了模版构建,其操作有所不同,在此不展开;
注意,完形填空和 MLM 不是一个任务,虽然二者都是词分类任务,但是类别一个是候选词集,一个是模型中全部的词集;
因为有标签样本比较少,所以训练成本低于全量数据训练一个完整的模型;
这里的训练因为是有监督的,所以结合了完形填空的词分类 loss 和 MLM Loss 进行训练: ,其中 MLM loss 占较小比重(1e-4);
这里最终模型并不进行 pattern 的学习;
在这里的训练中,不涉及 MLM loss。
其实就是进行多代交叉的蒸馏,随机选取每一代的模型为无标签数据进行标记,并基于此进一步训练下一代模型; 最终和 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 训练在少样本场景下的潜力。
有了 PET,人们显然是不满足的——类比机器学习的不同时期的话,人工构建 pattern/prompt 就像在进行手工的特征工程,对输入特征进行人工的选择和组合,所谓“有多少人工,就有多少智能”,需要不断尝试和调整才能取得一个比较好的模版。
而依赖特征工程的方法,如今很大程度上被深度学习为主的自动选择特征的方法取代了——换言之,取代手工选取模版的方法自然会被自动选取特征的方法取代。
最早提出自动构建模版的工作应该是发表在 TACL 2020 的《How Can We Know What Language Models Know?》,其中提出了一个 LPAQA(LM Prompt And Query Archive)方法以进行模版的自动搜索。
不过,这篇文章并不应用在前述的少样本场景,而是针对一个检测语言模型是否具有某些知识的探针任务(Language Models as Knowledge,LAMA Probe)——而这一任务的形式也是完形填空。
▲ 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。
显然,第一种方法会引入噪音,而第二种也具有不稳定性。
Top-1 Prompt Selection:就是用 LM 测一测看看效果,取 acc 最高的 prompt; Rank-based Ensemble:除了 Top-1 方案,有时候需要保持多个模版来增强效果,即选取前 K 个模版; Optimized Ensemble:通过 LM 的预测为不同的 prompt 赋权。
这篇文章看起来很复杂,实际上提出了一个比较 basic 的方案。
2.2 AUTOPROMPT
方法很直观,将通过梯度找出的 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 的预测,进行训练得到线性层的权重;
实验中发现一些有趣的结论:
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
本文探究的是少样本场景,包括 single-sentence tasks 和 sentence-pair tasks。此前的工作局限于分类,本文还涉及 STS-B 这一回归任务。
具体方案包括标签词的自动搜索、模版的搜索和样本实例的搜索,以下分别介绍:
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 低的不行),这也合情合理。
看到这 idea,我脑海里第一个念头就是:
你的下一句prompt,何必是自然语言?
好吧,这一块是关于唐杰老师的《GPT Understands, Too》,首次提出了用连续空间搜索的 embedding 做 prompt。
和之前的工作不太一样,这篇文章用的是 GPT 这个生成模型而不是 BERT 这些 MLM 模型。
同样注意到离散化表达的搜索困难,但是这一工作接着自动搜索还提出了连续空间的搜索。
这一操作可就相当于去掉了镣铐,但是也带来了搜索空间过大的问题(同时,也模糊了 prompt 原本的含义)。
在这一基础上,对某些和任务相关的 token 进行保留(task-related anchors),比将它们也随机训练带来的效果更好。——anchors是怎么选的?好像论文没说…… 然后在少样本场景,只训练 LSTM(即只进行寻找 prompt); 在全量数据场景,全部参数进行 fine-tuning(即寻找 prompt 和 fine-tuning 共同进行)。
在 LAMA 和 SuperGLUE 上进行测试:
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 的优化搜索空间很大,但是它主要提升的少样本场景本身就缺少训练数据,自然需要人工的先验来帮助模型,这人工先验又不一定有效,是一个矛盾的点。
参考文献