一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第29天,点击查看活动详情。
导语
Prompt是最近NLP领域一个很火爆的研究内容,之前只是偶尔听说并未详细了解过。最近刚好有空就对这个方向进行了初步了解。本系列博客为个人在学习中所记录笔记,如有错误烦请大家批评指出。
本文是对论文prompt领域的综述性文章“Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in NLP”阅读的个人笔记。由于原论文比较长,有46页,故分几篇博客记录。本文对应原论文的第1,2章的部分内容。
摘要
本文对自然语言处理的一个新范式——即“基于prompt的学习”(prompt-based learning)进行了综述和梳理。 传统的监督学习是训练模型接受输入并预测输出为,而基于prompt的学习是基于语言模型对文本概率的直接建模。 使用这些模型来执行预测任务,原始输入x是使用一个模板修改成一个文本字符串prompt ,其中包含有一些空缺的slot,然后使用语言模型的来对其进行完形填空获得最终的,从中可以得到最终的输出。 这个框架强大和有吸引力的原因有以下几点:它允许语言模型pre-trained在大量的原始文本,并通过定义一个新的prompt函数模型能够执行few-shot甚至zero-shot学习,适应只有few-shot或zero-shot数据下的新场景。 在本文中,我们介绍了这个有前景的范例的基础,描述了一组统一的数学符号,它可以涵盖各种各样的现有工作,并沿着几个维度组织现有工作,例如,预训练模型、prompt符和调优策略的选择。 为了让有兴趣的初学者更容易理解这个领域,我们不仅对现有的作品进行了系统的回顾,并对基于提示的概念进行了高度结构化的分类,而且还发布了其他资源,例如网站NLPedia-Pretrain,包括不断更新的调查和论文列表。
目录
原论文目录如下:
1 NLP领域的两个重大改变(Two Sea Changes in NLP)
在特定任务下进行有监督学习曾经是整个机器学习领域的主要任务。由于这些任务的数据量并不足够多,无法学习出高质量模型,所以早期的NLP任务多依赖于特征工程(feature engineering),即如何设计和提取有用的特征帮助机器去进行学习。那时,NLP的研究者们人为的从数据中提取有用的特征给模型。后来,随着神经网络的迅速发展,这些特征的学习被直接丢给了模型自己在训练中学习,因而彼时的工作又转移到了架构工程(architecture engineering),即如何设计有效的神经网络模型架构(比如选取什么模块CNN/RNN/LSTM,设计如何连接等等)。
然而,在2017-2019年,随着大规模预训练模型的提出,NLP领域第一个重大改变发生了。几乎所有的NLP任务都变成了“Pre-train - Fine-tune”模式。人们一般不会去修改预训练模型本身,而是引入很少的额外参数(/网络层),通过设置各种各样的目标函数来完成下游任务。此时的工作重心又转移到了目标函数工程(objective engineering)上来。
而目前,我们正处在第二个重大改变中。原本的“Pre-train - Fine-tune”模式正逐渐被所谓的“pre-train, prompt, and predict”模式替代。在这种模式下,人们不再使用自定义的objective engineering来促使预训练模型适应到下游任务上。反而是各种各样的下游任务在简短的文本prompt下被重新定义,以尽可能像PLM(即预训练模型)在训练过程中被解决的问题形式那样。
例如,对于一个简单的文本情感分类:
“I missed the bus today.”
我们可能在这个句子后,紧跟着给出这样一个prompt:
“I felt so _____”
然后要求PLM来进行填空。
或者,我们可以选择另一个prompt:
“English: I missed the bus today. French: ______”
那么,PLM将使用法语来进行填空。
通过以上示例可以看出,通过选取合适的prompt,我们可以操作模型的表现并得到想要的输出。有时,上述过程甚至不需要额外的训练。这种方法的优点是,只要提供一套适当的prompt,一个完全无监督方式训练的LM就可以用来解决大量的任务。
然而,如何选取一个最恰当的prompt则成为了一个问题,即当前的工作重心又转移到了prompt engineering上。
本文试图通过提供prompt方法的概述和正式定义(2),以及使用这些prompt的预先训练的语言模型(3),来组织这个快速发展领域的知识现状。接下来是对prompt方法的深入讨论。从prompt engineering(4)和answer engineering(5)等基础知识到更先进的概念,如multi-prompt learning methods(6)和prompt-aware training methods(7)。然后,我们组织了prompt-based learning methods的各种应用,并讨论它们如何与提示方法的选择相互作用(8)。最后,我们试图定位prompt在研究生态系统中的现状,与其他研究领域建立联系(9),提出一些当前具有挑战性的问题,这些问题可能有待进一步研究(10),并对当前的研究趋势进行元分析(11)。
四种研究范式对比如下:
小结
本章作者介绍了归纳了NLP领域技术发展的四个“范式”。
- 非神经网络时代的完全监督学习 (Fully Supervised Learning, Non-Neural Network),此时研究重点关注于特征工程(feature engineering)。
- 基于神经网络的完全监督学习 (Fully Supervised Learning, Neural Network),此时由于神经网络的引入使得特征选取变为了黑盒,研究重点关注于架构工程(architecture engineering)。
- 预训练,精调范式 (Pre-train, Fine-tune)。这是作者认为的NLP领域的第一次重大变化。此时的工作重心又转移到了目标函数工程(objective engineering)上来。
- 预训练,提示,预测范式(Pre-train, Prompt, Predict)。这是作者认为的NLP领域的第二次重大变化。但如何选取设计合适的prompt则成了研究热点,即当前的工作重心又转移到了prompt engineering上。
之后,通过一个简单示例就展现出了prompt的简便和强大之处:只需要替换不同的prompt,就可以改变模型的任务类型(文本分类、文本翻译)。甚至不需要额外的训练。
最后,作者通过表1详细对比了四种研究范式的异同。从表中的图示可以形象的看出,在前两组范式中,各个不同的任务和PLM之间(几乎)没有任何关系,他们都是独立的任务。在预训练-微调范式引入后,PLM尽可能的向各个下游子任务去“适应”。而prompt的出现,则使得各个下游子任务向PLM去“适应”。
2 Prompt的正式描述(A Formal Description of Prompting)
2.1 NLP中的监督学习任务
传统的NLP监督学习任务即给定文本输入,基于模型的输出得到输出。而可以是一个label,text或者其他各种类型的输出变种。
例如,对于一个文本分类任务,输入可能是 =“I love this movie.”,输出,且。又或者对于一个文本翻译任务,输入为芬兰语= “Hyv¨a¨a huomenta.”,输出为英语=“Good morning”.
2.2 Prompt基础知识
有监督学习面临的一个主要问题是无法获得大量标注数据,即为了训练模型 ,必须要有用于该任务的标注数据,但找到这种适用大规模标注数据集是比较困难的。
表2展示了prompt中的一些常见术语和举例及解释说明。