深入浅出Prompt Learning要旨及常用方法

©作者 | 余央木

单位 | NIO蔚来汽车

研究方向 | NLU、AIGC

排版 | PaperWeekly

进NLP群—>加入NLP交流群

近年来 NLP 学术领域发展真是突飞猛进,刚火完对比学习(contrastive learning),又有更火的提示学习 prompt learning。众所周知,数据标注数据很大程度上决定了 AI 算法上限,并且成本非常高,无论是对比学习还是提示学习都着重解决少样本学习而提出,甚至在没有标注数据的情况下,也能让模型表现比较好的效果。本文主要介绍 prompt learning 思想和目前常用的方法。

2e93b3ea2e0ed5d791b85eb1b4df0c5f.png

NLP的训练范式有哪些

目前学术界一般将 NLP 任务的发展分为四个阶段即 NLP 四范式:

1. 第一范式:基于传统机器学习模型的范式,如 tf-idf 特征 + 朴素贝叶斯等机器算法;

2. 第二范式:基于深度学习模型的范式,如 word2vec 特征 + LSTM 等深度学习算法,相比于第一范式,模型准确有所提高,特征工程的工作也有所减少;

3. 第三范式:基于预训练模型 + finetuning 的范式,如 BERT + finetuning 的 NLP 任务,相比于第二范式,模型准确度显著提高,但是模型也随之变得更大,但小数据集就可训练出好模型;

4. 第四范式:基于预训练模型 + Prompt + 预测的范式,如 BERT + Prompt 的范式相比于第三范式,模型训练所需的训练数据显著减少。

f674a3b24bf7a7950e3d0daa378796d8.png

在整个 NLP 领域,你会发现整个发展是朝着精度更高、少监督,甚至无监督的方向发展的,而 Prompt Learning 是目前学术界向这个方向进军最新也是最火的研究成果。

c9fb3ed012c482f4f7da382cb4c28429.png

为什么需要提示学习

为什么呢?要提出一个好的方式那必然是用来解决另一种方式存在的缺陷或不足,那我们就先从它的上一个范式来说起,就是预训练模型 PLM + finetuning 范式常用的是 BERT+ finetuning:

e1f81c2d7ec05467c3006ee40c87d6f7.png

这种范式是想要预训练模型更好的应用在下游任务,需要利用下游数据对模型参数微调;首先,模型在预训练的时候,采用的训练形式:自回归、自编码,这与下游任务形式存在极大的 gap,不能完全发挥预训练模型本身的能力

必然导致:较多的数据来适应新的任务形式——>少样本学习能力差、容易过拟合

1b1f32fa4b7074d026c0faaf81b8f481.png

▲ 上下游任务形式存在gap

其次,现在的预训练模型参数量越来越大,为了一个特定的任务去 finetuning 一个模型,然后部署于线上业务,也会造成部署资源的极大浪费。

591bc0aadfae77ada7eb97f6c7901f4f.png

▲ 模型专用性特定任务微调导致部署成本过高

81211229911566b84254d3b62df4cdb2.png

提示学习是什么

首先我们应该有的共识是:预训练模型中存在大量知识;预训练模型本身具有少样本学习能力。

GPT-3 提出的 In-Context Learning,也有效证明了在 Zero-shot、Few-shot 场景下,模型不需要任何参数,就能达到不错的效果,特别是近期很火的 GPT3.5 系列中的 ChatGPT。

8b716f6fb26f3370f872f236279c896c.png

Prompt Learning 的本质:

将所有下游任务统一成预训练任务;以特定的模板,将下游任务的数据转成自然语言形式,充分挖掘预训练模型本身的能力。

本质上就是设计一个比较契合上游预训练任务的模板,通过模板的设计就是挖掘出上游预训练模型的潜力,让上游的预训练模型在尽量不需要标注数据的情况下比较好的完成下游的任务,关键包括 3 个步骤:

  1. 设计预训练语言模型的任务

  2. 设计输入模板样式(Prompt Engineering)

  3. 设计 label 样式及模型的输出映射到 label 的方式(Answer Engineering)

Prompt Learning 的形式:

以电影评论情感分类任务为例,模型需根据输入句子做二分类:

原始输入:特效非常酷炫,我很喜欢。

Prompt 输入:提示模板 1:特效非常酷炫,我很喜欢。这是一部 [MASK] 电影;提示模板 2:特效非常酷炫,我很喜欢。这部电影很 [MASK]

提示模板的作用就在于:将训练数据转成自然语言的形式,并在合适的位置 MASK,以激发预训练模型的能力。

e18e509e1bb72711d5fb0e365a4695a2.png

▲ 提示学习模板框架

类别映射 / Verbalizer:选择合适的预测词,并将这些词对应到不同的类别。

52597a30f6b1f26b2e9c1f6c66597690.png

▲ 类别映射

通过构建提示学习样本,只需要少量数据的 Prompt Tuning,就可以实现很好的效果,具有较强的零样本/少样本学习能力。

0f81fd9b38de4f6f3f5192fd1e63e498.png

常见的提示学习方法

4.1 硬模板方法

4.1.1 硬模板-PET(Pattern Exploiting Training)

PET 是一种较为经典的提示学习方法,和之前的举例一样,将问题建模成一个完形填空问题,然后优化最终的输出词。虽然 PET 也是在优化整个模型的参数,但是相比于传统的 Finetuning 方法,对数据量需求更少

建模方式:

以往模型只要对 P(l|x) 建模就好了(l 是 label),但现在加入了 Prompt P 以及标签映射(作者叫 verbalizer),所以这个问题就可以更新为:

e4d9f68d7fd442a493190e351bbc1ce4.png

其中 M 表示模型,s 相当于某个 prompt 下生成对应 word 的 logits。再通过 softmax,就可以得到概率:

98f0388189e9e6becc6df6975180213b.png

作者在训练时又加上了 MLM loss,进行联合训练。

72711299746d2be0b719999645498021.png

▲ 训练架构

具体的做法:

  1. 在少量监督数据上,给每个 Prompt 训练一个模型;

  2. 对于无监督数据,将同一个样本的多个 prompt 预测结果进行集成,采用平均或加权(根据 acc 分配权重)的方式,再归一化得到概率分布,作为无监督数据的 soft label ;

  3. 在得到的 soft label上 finetune 一个最终模型。

4.1.2 硬模板-LM-BFF

LM-BFF 是陈天琦团队的工作,在 Prompt Tuning 基础上,提出了 Prompt Tuning with demonstration & Auto Prompt Generation。

301512da98f9d6540f0e3db8d5a6a840.png

aaa20df79af160edb10c9382a8f3f2ef.png

硬模板方法的缺陷:

硬模板产生依赖两种方式:根据经验的人工设计 & 自动化搜索。但是,人工设计的不一定比自动搜索的好,自动搜索的可读性和可解释性也不强。

278d69c9f6fbdbb2f20162063f453a6c.png

上图实验结果可以看出硬模板 对于 prompt,改变 prompt 中的单个单词会给实验结果带来巨大的差异,所以也为后续优化提供了方向,如索性直接放弃硬模板,去优化 prompt token embedding。

4.2 软模板方法

4.2.1 软模板- P tuning

不再设计/搜索硬模板,而是在输入端直接插入若干可被优化的 Pseudo Prompt Tokens,自动化寻找连续空间中的知识模板:

  1. 不依赖人工设计

  2. 要优化的参数极少,避免了过拟合(也可全量微调,退化成传统 finetuning)

34f9eb8b7a6347fb03e0f347620f72ca.png

传统离散 prompt 直接将模板 T 的每个 token 映射为对应的 embedding,而 P-Tuning 将模板 T 中的 Pi(Pseudo Prompt)映射为一个可训练的参数 hi

优化关键点在于,自然语言的 hard prompt,替换为可训练的 soft prompt;使用双向 LSTM 对模板 T 中的 pseudo token 序列进行表征;引入少量自然语言提示的锚字符(Anchor)提升效率,如上图的“capital”,可见 p-tuning 是 hard+soft 的形式,并不是完全的 soft 形式。

具体的做法:

  1. 初始化一个模板:The capital of [X] is [mask]

  2. 替换输入:[X] 处替换为输入 “Britian”,即预测 Britain 的首都

  3. 挑选模板中的一个或多个 token 作为 soft prompt

  4. 将所有 soft prompt 送入 LSTM,获得每个 soft prompt 的隐状态向量 h

  5. 将初始模板送入 BERT 的 Embedding Layer,所有 soft prompt 的 token embedding 用 h 代替,然后预测mask。

核心结论:基于全量数据,大模型:仅微调 prompt 相关的参数,媲美 fine-tuning 的表现。

代码:

https://github.com/THUDM/

4.2.2 软模板- Prefix tuning

P-tuning 更新 prompt token embedding 的方法,能够优化的参数较少。Prefix tuning 希望能够优化更多的参数,提升效果,但是又不带来过大的负担。虽然 prefix tuning 是在生成任务上被提出来的,但是它对 soft prompt 后续发展有着启发性的影响。

30bfc1344b1294448cfc242b1df11bf7.png

▲ 优化每一层的 Prompt token embedding,而不仅仅是输入层

由上图可见,模型上在每层 transformer 之前加入 prefix。特点是 prefix 不是真实的 token,而是连续向量(soft prompt),Prefix-tuning 训练期间冻结 transformer 的参数,只更新 Prefix 的参数。

只需要存储大型 transformer 的一个副本和学习到的特定于任务的前缀即可,为每个附加任务产生非常小的开销。

b1c8c861fcbaf32a4bbf7b0e7357920d.png

▲ 自回归模型

以图上自回归模型为例的做法:

  1. 输入表示为 Z = [ prefix ; x ; y ]

  2. Prefix-tuning 初始化一个训练的 矩阵 P,用于存储 prefix parameters

  3. 前缀部分 token,参数选择设计的训练矩阵,而其他部分的 token,参数则固定 且为预训练语言模型的参数

核心结论:Prefix-tuning 在生成任务上,全量数据、大模型:仅微调 prompt 相关的参数,媲美 fine-tuning 的表现。

代码:

https://github.com/XiangLi1999/PrefixTuning

4.2.3 软模板- Soft Prompt Tuning

Soft Prompt Tuning 系统后验证了软模板方法的有效性,并提出:固定基础模型,有效利用任务特定的 Soft Prompt Token,可以大幅减少资源占用,达到大模型的通用性。

对 Prefix-tuning 的简化,固定预训练模型,只对下游任务的输入添加额外的 k 个可学习的 token。这种方式在大规模预训练模型的前提下,能够媲美传统的 fine-tuning 表现。

2d28795ace032b60f348c647f8c50738.png

代码:

https://github.com/kipgparker/soft-prompt-tuning

19dd5a73d6c73094d062979915f55f55.png

总结

Prompt Learning 的组成部分

  1. 提示模板:根据使用预训练模型,构建完形填空 or 基于前缀生成两种类型的模板

  2. 类别映射 / Verbalizer:根据经验选择合适的类别映射词

  3. 预训练语言模型

典型的 Prompt Learning 方法总结

  1. 硬模板方法:人工设计/自动构建基于离散 token 的模板

1)PET

2)LM-BFF

2. 软模板方法:不再追求模板的直观可解释性,而是直接优化 Prompt Token Embedding,是向量/可学习的参数

1)P-tuning

2)Prefix Tuning

outside_default.png

参考文献

outside_default.png

[1] https://arxiv.org/pdf/2107.13586.pdf

[2] https://arxiv.org/pdf/2009.07118.pdf

[3] https://arxiv.org/pdf/2012.15723.pdf

[4] https://arxiv.org/pdf/2103.10385.pdf

[5] https://aclanthology.org/2021.acl-long.353.pdf

[6] https://arxiv.org/pdf/2104.08691.pdf


进NLP群—>加入NLP交流群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值