【大模型】Prompt Learning 提示学习

近年来,预训练语言模型已然成为自然语言处理(NLP)领域中备受瞩目的技术之一。预训练模型可以在大规模文本语料上进行自监督学习,从而获得丰富的语言学知识,并通过在下游任务上进行微调,实现出色的性能。

Prompt Learning(提示学习)则是一种最新的预训练模型范式,通过在预训练过程中提供特定任务的提示信息,来指导模型学习,帮助模型更好地利用任务的上下文信息,从而提高模型的性能,也使得模型可以在Few-shot、Zero-shot等低资源场景下保持良好的表现。

简单来说,Prompt learing 就是通过引入模版来将原始输入改造成类似于完形填空的格式,让语言模型去回答,进而推断出下游任务的结果。

一、引言

人工智能的发展一直是科技界的热门话题。在过去的几十年里,人们一直在探索着如何让机器更加智能化。然而,尽管现代机器学习技术取得了长足的进步,但是机器在某些领域的表现仍然远远不如人类。其中最关键的原因之一,机器往往缺乏人类的常识和推理能力。这使得机器在面对一些复杂的任务时表现不佳,例如自然语言理解、文本生成等。

为了解决这个问题,研究人员一直在尝试各种各样的方法。其中最有前途的方法之一就是Prompt Learning。Prompt Learning是一种基于模板的机器学习方法,它通过给模型提供一些“提示”来帮助其更好地理解任务,从而提高模型的性能。

训练模型时,首先需要定义一个提示模板,这个模板包含了一些提示信息,例如关键词、短语、句子等。然后,将提示模板与训练数据一起输入到模型中进行训练在预测时,可以将提示模板与待预测的数据一起输入到模型中,从而帮助模型更好地理解输入数据。 模型训练采用的提示信息通常是可以被人类理解的,这也使得可以更好地理解模型在做决策时的逻辑和推理过程,模型预测时通过结合不同的Prompt模式即可完成不同的任务需求。同时,通过添加提示信息可以帮助模型更好地利用已有的标注数据,学习到更通用的特征表示,从而使得模型在低资源场景任务中仍然可以保持较好的表现。

二、NLP发展的四个阶段

在这里插入图片描述
自然语言处理(NLP)技术的发展经历了典型的四个范式阶段:

(1) 特征工程:feature engineering

特征工程指从原始数据中提取、构建和转换出有用的特征用于算法模型的训练学习。早期阶段,人们通常需要手动构建特征来解决特定的问题,这个过程可能需要花费大量的时间和精力,并且需要专业知识和技能。

(2) 架构工程:architecture engineering
随着深度学习技术的发展,特征工程发生了重大变革,模型可以自动从原始数据中提取得到更丰富鲁棒的特征,从而减少了手动构建特征的需求,更多的关注网络模型结构设计和算法优化。

(3) 目标工程:预训练+微调范式

随着大规模预训练语言模型的出现,如BERT、GPT等,江湖逐渐再次形成大一统,预训练+微调范式成为诸多NLP建模任务(如CLS分类任务、TAG序列任务、LM语言模型及GEN生成任务等)的基本解决方案,在预训练模型的基础上引入下游任务数据进行微调训练,通常即可得到一个较好的实现效果,往往优于以前的技术方法,且操作应用更加简便。

(4) 提示工程:Prompt Learning
既然预训练模型之流已经实现了这么好的效果了,那为什么还要Prompt Learning呢?

可以从两个方面进行诠释:

  • 在自然语言处理领域,传统的机器学习算法往往需要大量的人工标注数据,才能够在大规模语料上训练得到较好的模型效果。 但是,这些数据通常需要业务领域专家进行标注处理或指导,成本高昂,而且人工的注意力也有限,这就导致了训练数据的不足及数据质量的不稳定性,以致模型性能下降。

  • 另一方面,随着人工智能技术的不断发展,很多自然语言处理任务可以通过预训练语言模型(Pretrained Language Model)来解决,这些模型通过大规模的语料库训练得到,具有较好的性能和泛化能力。 但是,这些预训练模型通常只适用于特定的任务和数据集,不能够直接用于新的任务,在很多情况下,需要业务专家基于任务需求进行微调才能够得到更好的表现,无法充分发挥预训练语言模型的能力。因此,研究人员开始探索如何使用自动化技术和预训练模型来一站式解决这些问题。其中,Prompt Learning是一种被广泛研究和应用的技术,通过引入Prompt模板来将原始输入改造成类似于完形填空的格式,让语言模型去回答,进而推断出下游任务的结果。

Prompt Learning在特定下游任务下可以通过引入合适的模版(prompt)去重构下游任务,管控模型的行为,实现zero shot或者few shot。一个合适的模版甚至可以让模型摆脱对下游特定任务数据的要求,所以如何构建一个合理有效的prompt成为了重中之重。

三、Prompt Learning

3.1 为什么需要Prompt Learning

我们可能会发现,在大多实际工作场景中,通常是无法拿到很多监督训练数据的,甚至没有任何可用任务数据。这种弱监督、无监督的应用场景需求往往更符合我们的生产场景。那么此时此刻,如何实现任务需求呢?Prompt Learning无疑给了我们一种较优解决方案。这里,笔者以分类任务为例,结合一个场景任务展开细致阐述如何进行Prompt Learning。

首先,找到一个公开的新闻文本分类数据集,包含“文化”、“财经”、“体育”、“娱乐”等15个类别,共计600条样本数据,如下为3个数据样例:

{"text": "中铁建有多少个局?", "label_name": "财经", "label": 3}

{"text": "世界十大最著名的手枪", "label_name": "军事", "label": 8}

{"text": "高三学生如何复习?", "label_name": "教育", "label": 6}

利用这些数据,我们可以建模一个文本分类任务,构建模型进行训练并预测其所属类别。但是,由于样本数据只有600条,因此,微调训练得到的模型可能并不稳定,很容易存在过拟合等情况,模型实际并不可用。弱监督学习方式可能才是更优的一种解决方案。根据Prompt Learning的原理方式,我们对任务数据进行转换调整,构建一个完形填空任务,让模型给出相应答案,而不再是直接进行文本分类输出类别标签并将其映射回所属类别。 可以采用的一种Prompt数据转换方式如下:

{"text": "这是一条____新闻,"+"中铁建有多少个局?", "answer": "财经"}

{"text": "这是一条____新闻,"+"世界十大最著名的手枪", "answer ": "军事"}

{"text": "这是一条____新闻,"+"高三学生如何复习?", " answer ": "教育"}

我们期望模型可以直接预测输出文本数据归属的类别答案,如第一条样例数据,模型的输出即为 “财经”。这里Prompt数据的形式已然符合语言模型的训练范式,可以直接利用预训练语言模型如BERT预测输出完型填空答案结果。当然,也可以基于转换后的数据对BERT模型进行进一步的language model(LM)微调预训练,训练后的BERT模型通常会有更优的预测输出表现。如果采用的语言模型能力足够强,直接基于构建的Prompt数据进行预测输出即可普遍得到较优结果,改换不同的Prompt甚至可以完成多个不同场景任务需求(分类、问答、对话、翻译…),如 “将句子翻译成英文,中铁建有多少个局?”,模型会直接推理预测输出其英文译文 "How many bureaus does China Railway Construction Corporation have? "。

3.2 Prompt Learning的定义

传统的监督学习任务,是去训练一个模型P(y|x),接收x作为输入,去预测y。

Prompt learning则依赖于预训练语言模型P(x),通过引入合适的模版template将输入x调整为完形填空格式的x’,调整后的输入x’里含有某些空槽,利用语言模型P将空槽填充后就可以推断出对应的y。 例如对于情感分析任务,传统的做法就是训练一个判别模型,去预测输入x对应的标签是positive或者negative,但是如果是prompt learning,则是利用合适模版,将输入x调整为 [x], it is [z]。然后作为语言模型的输入去预测相应z的取值,如果z是positive相关的词,就表示原始输入x是positive,反之就是negative的。

Prompt learning包括三个部分,分别是prompt addition,answer search, answer mapping。

3.2.1 Prompt addition

选择合适的模版,定义函数fprompt(x),可以将原始的输入x转化为x‘,即fprompt(x)=x’。经过该函数转化得到的输入都是带有空槽{},槽位{}上的预测值会直接决定最后的结果。另外,这里的模版不仅仅可以是离散化的token,也可以连续的向量。在不同的下游任务,可以灵活调整,选择合适的模版。

3.2.2 Answer search

通过prompt函数后,将x’输入到语言模型,去预测使得语言模型得分最高的候选槽值。Answer search指的就是从所有可能的候选槽值进行搜索,然后选择合适的槽值填充到对应的空槽里。这里槽值的所有可能结果的集合为Z,对于生成任务而言,Z包括所有的token,但是对于分类任务而言,Z只包含跟特定分类任务相关的一部分token。例如对于之前那个例子而言,Z={positive相关的词语,negative相关的词语}

3.2.3 Answer mapping

当通过answer search得到合适的槽值时,需要根据槽值推断最终的预测结果。这部分比较直接,假如是生成任务,那么填充的槽值就是最终的结果。但如果是分类任务,就需要根据相应的槽值归纳到具体的类中。例如情感分类中,如果把跟positive相关的槽值都归类到positive一类,把跟negative相关的槽值归类到negative一类中。

在这里插入图片描述

在了解prompt learning的基本组成后,不容易发现,有以下几个方面都会影响prompt learning的最终效果,后续我们再围绕着这几点分别展开。

  • Prompt engineering:如何选择一个合适的模版,也就是设计合适的模版函数,是整个prompt learning的第一个步。

  • 预训练语言模型的选择:如何预测空槽位置上的答案依赖于预训练语言模型的得分,同时预训练语言模型又有4大类。(在文本生成系列的文章对这这部分的介绍已经很详细了,这里就不赘述了。)

  • Answer engineering:如何构建一个合适的答案候选集以及一个从答案到最终结果的映射。

  • Expanding the paradigm:如何基于基础的prompt learning去扩展,包括multi prompt等。

  • Training strategy:如何选择训练策略,去训练一个合适的模型。

四、Prompt engineering

Prompt engineering,如何构建一个合适的模版函数,使得在下游任务能取得最高效的表现。Prompt learning利用预训练语言模型去预测最终结果,那么如何将输入x转化为语言模型擅长处理的样式就是Prompt engineering的工作。一个不合适的prompt function会导致语言模型不能做出令人满意的预测。为了最终任务的效果,我们需要根据语言模型和下游任务的特性,去构建合理的prompt。

如果模版处于输入x之中,那么称为cloze prompt,这种情形多应用于使用掩码语言模型的场景,它能够紧密的跟掩码语言模型的预训练过程相配合。如果输入x全部位于模版内容之前,那么称为prefix prompt,这种情形多应用于生成任务或者使用使用自回归的语言模型的场景,它能跟从左往右的回归模型本质更加匹配。

Prompt可以是通过人工构建的,根据人的经验知识构建合理的prompt,这也是最直接的方式。但是通过人工构建的模版需要耗费时间跟精力, 而且即便是专业人员也不一定能构建得到最优的prompt,为此,衍生了不少自动选择prompt的方法,其中包括离散的prompt,也包括连续的prompt。

五、Answer engineering

Answer engineering旨在寻找一个合适的答案空间Z以及一个从答案到最终输入y的一个映射。Prompt learning之所以能实现few shot甚至zero shot,是依仗于预训练语言模型强大的泛化能力。

但是语言模型在预测时都是针对全词表的,对于下游任务而言并不一定需要全词表的,例如情感分析任务下如果预测到人称代词时要怎么推断最终结果的情绪呢?为此,Answer engineering要去寻找一个跟下游任务匹配的答案空间,也就是构建候选集,并定义好答案空间到最终输出之间的映射,候选词跟最终输出的对应关系。

Answer engineering里的答案空间可以是由token,或者片段,或者完整的句子组成。Token跟片段的情形多见于分类相关任务,完整的句子多见于生成相关任务。 答案空间同样也可以通过人工构建,也可以通过模型去搜索查找。大部分的方法构造的候选集都是离散化的,只有很少部分方法是连续化的。

六、Multi-prompt learning

跟打比赛时经常会集成多个模型的思路如出一辙,相对于单个prompt,多个prompt往往能提高prompting methods的有效性。常见的多个prompt的方法有以下几种类型。

在这里插入图片描述

a) Ensemble

多个prompt,每个prompt都按照单prompt的方法并行进行,然后再把最终的结果汇总,可以通过加权或者投票的方式汇总多个单prompt的方法的结果。

b) Augmentation

增强的方式其实就是找一个跟当前问题相似的case,然后将这个case跟当前输入x‘一起输入,这种模型就可以根据那个case对x‘做出更精准的预测了。

c) Composition

​ ​同时利用多个prompt构建prompt函数,每个prompt负责一个子任务,把多个prompt的内容融合到一起,同时进行多个子任务的预测。例如关系抽取任务,有的prompt负责实体识别,有的prompt负责判断实体间的关系。

d) Decomposition

对于有多个预测值的任务,将原始的任务拆分程多个子任务,引入多个prompt,分别处理子任务,彼此隔离。也就是把多个预测值的任务拆分程多个单prompt任务去分别处理。

七、Training strategy

根据是否需要在语言模型的基础上引进新的跟模版相关的参数,以及模型参数是否冻结可以分为以下4种。(图中第一种不算是prompt learning)
在这里插入图片描述
a) Prompt fine-tuning

NLP发展史上第三个阶段的先预训练然后再微调的方法。

b) Tuning-free Prompting

不需要微调,直接利用一个prompt做zero-shot任务

c) Fixed_LM Prompt Tuning

引进了额外的跟prompt相关的的参数,通过固定语言模型参数,去微调跟prompt相关的参数。

d) Fixed-prompt LM Tuning

引进了额外的跟prompt相关的的参数,通过固定prompt相关参数,去微调语言模型参数。

e) Prompt+LM Tuning

同时微调语言模型跟prompt相关的参数。

八、总结

Prompt learning,充分利用了预训练语言模型强大的泛化能力,极大的减少了对下游任务有监督数据的依赖,能实现few shot甚至zero shot,对于当下数量众多的NLP下游任务,有很大的应用前景。但是关于如何构建prompt,如何选择语言模型,构建候选答案空间,构建答案到最终输出的映射,如何选择训练策略,如何寻找一个最佳配置使得下游任务效果达到最优,依旧是个需要持续探索的事情。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值