• 首页
  • 科学成果
  • 自然语言处理第四范式-定性认识Prompt技术-滕达博士

自然语言处理第四范式-定性认识Prompt技术-滕达博士

2022-04-27

在很长的一段时间内,自然语言处理任务采用的都是 Pretrain + Fine-tuning(Model Tuning)的解决方案,但是这种方案,需要对于每个任务都重新 fine-tune 一个新的模型,且不能共用。但是对于一个预训练的大语言模型来说,这就仿佛好像是对于每个任务都进行了定制化,十分不高效。是否存在一种方式,可以将预训练语言模型作为电源,不同的任务当作电器,仅需要根据不同的电器(任务),选择不同的插座,对于模型来说,即插入不同的任务特定的参数,就可以使得模型适配该下游任务。Prompt Learning 就是这个适配器,它能高效得进行预训练语言模型的使用。

 

这种方式大大地提升了预训练模型的使用效率,如下图:

image.png 

 

左边是传统的 Model Tuning 的范式:对于不同的任务,都需要将整个预训练语言模型进行精调,每个任务都有自己的一整套参数。

右边是Prompt Tuning,对于不同的任务,仅需要插入不同的prompt 参数,每个任务都单独训练Prompt 参数,不训练预训练语言模型,这样子可以大大缩短训练时间,也极大的提升了模型的使用率。

所以什么是 Prompt, 字面上来讲,Prompt 就是提示。那么在NLP中 Prompt 代表的是什么呢?prompt 就是给预训练语言模型的一个线索/提示,帮助它可以更好的理解 人类的问题。例如,下图的BERT/BART/ERNIE 均为预训练语言模型,对于人类提出的问题,以及线索,预训练语言模型可以给出正确的答案。

image.png 

根据提示,BERT能回答,JDK 是 Oracle 研发的

根据 TL;DR: 的提示,BART知道人类想要问的是文章的摘要

根据提示,ERNIE 知道人类想要问鸟类的能力--飞行

 

Prompt 更严谨的定义为:

Prompt 是一种为了更好的使用预训练语言模型的知识,采用在输入段添加额外的文本的技术。

目的:更好挖掘预训练语言模型的能力

手段:在输入端添加文本,即重新定义任务(task reformulation)

Prompt 的工作流包含以下4部分:

1. Prompt 模版(Template)的构造

首先我们需要构建一个模版Template,模版的作用是将输入和输出进行重新构造,变成一个新的带有mask slots的文本。

2. Prompt 答案空间映射(Verbalizer)的构造

对于我们构造的prompt,我们需要知道我们的预测词和我们的label 之间的关系,并且我们也不可能运行z是任意词,这边我们就需要一个映射函数(mapping function)将输出的词与label进行映射。

3. 文本代入template,并且使用预训练语言模型进行预测

到了这边我们就只需要选择合适的预训练语言模型,然后进行mask slots [z] 的预测。

4. 将预测的结果映射回label。

第四步骤,对于得到的 answer,我们需要使用 Verbalizer 将其映射回原本的label。

 

然而,确实如果使用pretrain和 fine-tuning 范式,我们是不需要使用任何的人工特征构造,而使用prompt-based的方法的话,情况如下所示:

对于不同的template,可以从以下两种角度进行区分:

根据slot 的形状/位置区分

(1.1) 完形填空(Cloze)的模式,即未知的slot在template的中间等不定的位置

(1.2) 前缀模式(Prefix),未知的slot在template的开头

根据是否是由人指定的来区分

(2.1) 人工指定 template

(2.2) 自动搜索 template

(2.3) Discrete 离散Template,即搜索的空间是离散的,为预训练语言模型的字典里的字符。

(2.4) Continuous 连续Template,即搜索的空间是连续的,因为所有新增的这些prompt的参数主要是为了让机器更好地服务于任务,所以其参数的取值空间不需要限定在特定的取值范围内,可以是连续的空间。

 

答案空间的选择可以有以下三个分类标注:

根据形状

(1.1) Token 类型

(1.2) Span 类型

(1.3) Sentence 类型

是否有界

(2.1) 有界

(2.2) 无界

是否人工选择

(3.1) 人工选择

(3.2) 自动搜素

(3.2.1) 离散空间

(3.2.2) 连续空间

 

Pre-trained Model Choice(预训练模型选择)

在定义完模版以及答案空间后,我们需要选择合适的预训练语言模型对 prompt 进行预测,如何选择一个合适的预训练语言模型也是需要人工经验判别的。

具体的预训练语言模型分类可以分为如下5类,具体参考:Huggingface Summary of the models

autoregressive-models: 自回归模型,主要代表有 GPT,主要用于生成任务

autoencoding-models: 自编码模型,主要代表有 BERT,主要用于NLU任务

seq-to-seq-models:序列到序列任务,包含了encoder 和 decoder,主要代表有 BART,主要用于基于条件的生成任务,例如翻译,summary等

multimodal-models:多模态模型

retrieval-based-models:基于召回的模型,主要用于开放域问答

 

Prompt-based Training Strategies(训练策略选择)

Prompt-based 模型在训练中,有多种训练策略,可以选择哪些模型部分训练,哪些不训练。

 

可以根据训练数据的多少分为:

 

Zero-shot: 对于下游任务,没有任何训练数据

Few-shot: 对于下游任务只有很少的训练数据,例如100条

Full-data: 有很多的训练数据,例如1万多条数据

也可以根据不同的参数更新的部分,对于prompt-based 的模型,主要分为两大块

一个是预训练模型,一个是 Prompts 参数。

这两个部分,都可以独立选择参数训练选择。

对于

 

预训练语言模型,可以选择精调,或者不训练

对于prompts:

可以是没有prompts

固定的离散字符 prompts。(无参数)

使用训练好的 prompts参数,不再训练。

继续训练 prompts参数

 

因此,Prompting 方法是现在NLP的第四范式。其中现在NLP的发展史包含

Feature Engineering:即使用文本特征,例如词性,长度等,在使用机器学习的方法进行模型训练。(无预训练语言模型)

Architecture Engineering:在W2V基础上,利用深度模型,加上固定的embedding。(有固定预训练embedding,但与下游任务无直接关系)

Objective Engineering:在bert 的基础上,使用动态的embedding,在加上fine-tuning。(有预训练语言模型,但与下游任务有gap)

Prompt Engineering:直接利用与训练语言模型辅以特定的prompt。(有预训练语言模型,但与下游任务无gap)

我们可以发现,在四个范式中,预训练语言模型,和下游任务之间的距离,变得越来越近,直到最后Prompt Learning是直接完全利用LM的能力。

 

参考文献:

大模型prompt tuning技术上的应用【智源分享】

Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing

Alexei Baevski, Sergey Edunov, Yinhan Liu, Luke Zettlemoyer, and Michael Auli. Cloze-driven pretraining of self-attention networks. arXiv preprint arXiv:1903.07785, 2019.

Tushar Khot, Peter Clark, Michal Guerquin, Peter Jansen, and Ashish Sabharwal. Qasc: A dataset for question answering via sentence composition. arXiv:1910.11473v2, 2020.