本文内容主要参考刘鹏飞博士在 Big Model Meetup 上的报告内容以及其发表的关于 Prompt Learning 的综述论文 《Pre-train, Prompt, and Predict A Systematic Survey of Prompting Methods in Natural Language Processing》
Big Model Meetup 报告链接:智源社区活动
论文链接:https://arxiv.org/pdf/2107.13586.pdf
本文目前算法工程师一枚,重点关注 预训练语言模型、文本语义相似性检测、命名实体识别、Prompt Learning 领域研究,后续会陆续更新更多文章,欢迎关注 ^_^
如果对于本文章的内容存在疑问或问题,欢迎留言或发邮件,看到后会第一时间回复,Email:liser_box@163.com
1. 什么是 Prompt?
在过去很长一段时间,预训练模型均是采用的 Pretrain+Fine-Tuning 的方式来适配下游任务,但是采用这种方式所带来的问题是对于每一项下游任务来说,都需要重新 Fine-Tune 一个新的模型,且具体任务的模型之间无法共用,这对于预训练语言模型来说,相当于对于每一个任务都进行了定制化,十分低效;而 Prompt Tuning 则是一种新的训练模式,即可以将预训练模型看做是电源,不同的下游任务则相当于用电器,此时依据下游任务的不同,只需要为预训练模型插入不同的插座(下游任务特定的 Prompt 参数),即可使预训练模型适配下游任务;
上述 Prompt Tuning 的方式极大地提升了预训练模型的使用效率,如下图所示:
- 左侧的图表示基于 Pretrain+Fine-Tuning 的训练范式,即对于不同的下游任务来说,均需要训练不同的模型,每个任务都会有一套完全独立的模型参数,任务模型之间相互独立;
- 右侧的图表示基于 Prompt Tuning 的训练范式,即对于不同的任务来说,只需要插入不同的 Prompt 参数,在训练期间可以灵活选择是否对预训练语言模型的参数进行调整,可以极大地缩短训练时间,提升模型使用率;
所谓 Prompt,从字面意思上来讲翻译为 “提示”,联想人类的思维过程,假如我们某一天忘记了某件事情,如果此时能够得到某种特定的提示,就可以轻松想起来对应的事情,比如给出我们提示 “白日依山尽”,我们自然而然的就会联想到下一句 “黄河入海流”;再比如,我们玩儿 “你画我猜” 这样的游戏,假如直接让我们猜一幅画,这对于我们来说很困难,但是如果给出别人画的提示呢?如果再进一步给出一个与这幅画相关的提示词呢?是不是就变得越来越容易啦?
那么在 NLP 的领域研究中,Prompt 就是指根据输入文本,给予预训练语言模型一个任务相关的线索或提示,以帮助模型能够更好的理解或记忆特定的人类问题; 比如,BERT、BART、ERINE 均为近些年饱受关注的预训练模型,其对于某些特定的人类问题,根据给出的线索均可以给出正确的答案,如下图所示:
在上图的示例中,根据提示,BERT 可以准确的给出答案: JDK 是由 Oracle 研发的;根据 TL;DR: 提示,BART 可以知道当前任务需要给出文章的摘要信息,另外,根据提示 ERINE 可以知道当前 Query 想问的是鸟类的能力;
除了上述较为形象的表述之外,Prompt 更加严谨的表述方式如下:
Prompt is the technique of making better use of the knowledge from the pre-trained model by adding additional texts to the input.
即通过为输入内容添加额外的文本(重新定义任务)的方式,来更好的挖掘预训练语言模型本身能力的一种方法;
2. Prompt 工作流
通常来说,Prompt Tuning 的工作流主要分为四个部分:模板构造、答案空间映射关系构造、将输入带入至模板并预测、预测结果映射; 以情感分析任务为例,Prompt Tuning 的不同工作模块如下图所示:
上图展示了在情感分析任务中,Prompt Tuning 范式在情感分析任务中的具体工作模块,下面将会将各个模块拆解进行说明: