赶个时髦,看看Prompt

2021-11-04

最近prompt很火啊,专门花了点时间仔细看了看当前的survey,准备后面在这上面搞点低资源的事情。

Prompt的由来

NLP发展历程

自然语言处理范式是自然语言处理系统的工作模式,从一开始非NN的方法到现在的超大规模模型,细数之下,已经历了三代变迁,如今即将进入第四代。

  • 第一代范式是上个世纪的old school的方法,“词典+规则”;
  • 第二代范式是2012年之前的“数据驱动+统计机器学习模型“;
  • 第三代范式是随后兴起的深度学习模型。尤其在2018年前后,BERT的横空出世让NLP领域发生了翻天覆地的变化。遇事不决上BERT成为主流的解决方案。
  • 第四代范式就是当前正在掀起的Prompt Learning的浪潮。

当前痛点

近几年来,有关预训练语言模型(PLM)的研究比比皆是,自然语言处理(NLP)也借着这股春风获得了长足发展。尤其是在2017-2019年间,研究者们的重心逐渐从传统task-specific的有监督模式转移到预训练上。基于预训练语言模型的研究思路通常是,即将PLM应用到下游任务上,在预训练阶段和微调阶段根据下游任务设计训练对象并对PLM本体进行调整。随着PLM体量的不断增大,对其进行fine-tune的硬件要求、数据需求和实际代价也在不断上涨。除此之外,丰富多样的下游任务也使得预训练和微调阶段的设计变得繁琐复杂:

解决方案

因此研究者们希望探索出更小巧轻量、更普适高效的方法,Prompt就是一个沿着此方向的尝试。
为什么Prompt能更高效呢?我们可以从PLM的视角去看这个问题。传统的PLM的预训练任务通常都包含Masked Language Model任务,即,掩盖一个词,让模型去预测这词是什么,并且MLM任务其实是在预训练中起主要作用的任务。但是现在对于PLM的应用通常只是用于取[CLS]来做encoding,然后再接一个MLP去预测,强行转换下游任务的方式,和预训练任务其实存在很大的gap,所以当我们接其他的下游任务去fine-tune的时候,参数的规模是非常大的。
而如果当我们把下游任务重新形式化为接近预训练任务的方式(如MLM),则原来的无监督训练的模型就可以非常自然得直接应用到新的下游任务上,且不再需要去调整大模型里面的参数了。因此,Prompt实际上可以理解为对Downstream task的Reformulation,从而可以将PLM这个知识库中更多的知识利用进来。

什么是Prompt

在NLP领域,“Prompt”是将人为的规则给到预训练模型,使模型可以更好地理解人的指令的一项技术,可以简单理解为给任务的输入加入补充文本,以便更好地利用预训练模型。
融入了Prompt的新模式大致可以归纳成”Pre-train, Prompt, and Predict“,在该模式中,下游任务被重新调整成类似预训练任务的形式。例如,在文本情感分类任务中,传统的形式是输入句子 ‘I love Alibaba very much.’,希望输出 ‘positive/negative’ 中的一个标签。Prompt的形式则会变成, ‘Alibaba is ___.’, 然后让模型用来表示情感状态的答案(label),如“fantastic”、“boring”等,将空补全,最后再将答案转化成情感分类的标签(positive/negative)作为输出。

如何使用Prompt

使用Prompt Tuning解决问题可以大体分为四个步骤:构建Prompt、构建Answer、预测Answer以及匹配Answer和Label。

Prompt Construction

可以形式化为:给定输入文本 x=’I love Alibaba.’,存在一个函数F,使得输入变为F(x)=x+’Overall it is [Z].’。在实际的研究中,prompts应该有空位置来填充答案,这个位置一般在句中或者句末。如果在句中,一般称这种prompt为cloze prompt;如果在句末,称为prefix prompt。需要注意的是,由于prompt多种多样,x的位置、prompt的样子、prompt的数量等都可能对结果造成非常大的影响,因此可以根据需要灵活调整来使用。

离散Prompt

  • Prompt Mining. 该方法需要一个大的文本库支持,例如Wikipedia。给定输入和输出,要找到和之间的中间词或者依赖路径,然后选取出现频繁的中间词或依赖路径作为模板,即“[X] middle words [Z]”。
  • Prompt Paraphrasing. Paraphrasing-based方法是基于释义的,主要采用现有的种子prompts(例如手动构造),并将其转述成一组其他候选prompts,然后选择一个在目标任务上达到最好效果的。一般的做法有:将提示符翻译成另一种语言,然后再翻译回来;使用同义或近义短语来替换等。
  • Gradient-based Search. 梯度下降搜索的方法是在单词候选集里选择词并组合成prompt,利用梯度下降的方式不断尝试组合,从而达到让PLM生成需要的词的目的。
  • Prompt Generation. 既然Prompt也是一段文本,那是否可以用文本生成的方式来生成Prompt呢?该类方法就是将标准的自然语言生成的模型用于生成prompts了。例如,Gao等人将T5引入了模板搜索的过程,让T5生成模板词;Ben-David 等人提出了一种域自适应算法,训练T5为每个输入生成一种唯一的域相关特征,然后把输入和特征连接起来组成模板再用到下游任务中。
  • Prompt Scoring. Davison等人在研究知识图谱补全任务的时候为三元组输入(头实体,关系,尾实体)设计了一种模板。首先人工制造一组模板候选,然后把相应的[X]和[Z]都填上成为prompts,并使用一个双向LM给这些prompts打分,最后选取其中的高分prompt。

连续Prompt

  • Prefix Tuning. Prefix Tuning最开始由Li等人提出,是一种在输入前添加一串连续的向量的方法,该方法保持PLM的参数不动,仅训练合适的前缀(prefix)。
  • Tuing Initialized with Discrete Prompts. 这类方法中连续prompts是用已有的prompts初始化的,已有的prompts可以是手工设计的,也可以是之前搜索发现的离散prompts。
  • Hard-Soft Prompt Hybrid Tuning. 这类方法可以说是手工设计和自动学习的结合,它通常不单纯使用可学习的prompt模板,而是在手工设计的模板中插入一些可学习的embedding。一些相关的工作比如P-Tuning、PTR等。

Answer Construction

所谓的Answer就是指PLM输出词表中有关分类结果的单词,比如情感分类中的“fantastic”、“boring”。这一步的目的就是扩大原来标签的范围,构建答案空间(Answer Space)能够重新定义任务的目标:

  • 输出:从输出positive/negative” -> 完形填空
  • 任务:情感分类任务 -> 语言模型构建任务

此时的关键在于如何定义标签空间(Label Space)与答案空间(Answer Space)之间的映射。构建答案空间同样需要选择合适的形式和方法。在Prompt Learning中,答案有Token、Span、Sentence三种形式;从答案空间是否有边界的角度,又可分为bounded和unbounded两种;在选择方法上,同样可以分为人工选择和自动学习两种方式。

Answer Prediction

要进行预测,首先需要预先选择预训练语言模型。在实际应用中,可以根据现有的预训练模型的不同特点进行适配,不同类型的预训练模型适配不同的prompt:

  • Left-to-right LM,如GPT、GPT-3,适合搭配Prefix prompt
  • Masked LM,如BERT,适合NLU任务
  • Encoder-Decoder LM,如BART,适合生成式任务

当模型选择好之后,为了使当前的Prompt框架(framework)能够支撑更多的下游任务,可以考虑进行范式的拓展,例如,将之前的Single-Prompt设计拓展成Multi-Prompt,使模型能够更加灵活地解决更多的下游任务。

Answer-Label Mapping (Verbalizer)

最后,为了得到最终的输出(output),还需要根据之前定义好的映射,将预测到的Answer与实际任务中的Label匹配。可以采用近义词挖掘或者人工标注等方式进行映射关系的定义。

个人思考

Prompt Tuning作为一个新兴方向,最近在科研界吸引了一大波关注。从目前的效果来看,Prompt Tuning的优势主要体现在low-resource的任务上,如few-shot、zero-shot等;如果堆全量数据的话,目前的效果虽然还不能超过Fully-supervised的方法,但是个人觉得发展的空间还是很大的,很多研究点还等待着人们去改进。个人感觉Prompt Tuning的Highlight其实有以下几点:

  • 原理上是在任务层面统一了预训练任务和下游任务,可以更好地压榨出PLM中的知识;
  • 适用的任务为低资源情况下的分类或者匹配任务;
  • 对样本中的噪音很敏感,更加依赖预训练语料中的先验知识。

实际的落地,在一些“以文本为基础、标注数据较少、知识相关”的场景,如基于文本的用户/商家类型分类等,或许可以尝试一下。不过Prompt的发展之路还很长,拭目以待。如果对Prompt感兴趣的同学,可以去 http://pretrain.nlpedia.ai/ 寻找更多资源进行学习。

参考文献

  1. Brown T B, Mann B, Ryder N, et al. Language models are few-shot learners[J]. arXiv preprint arXiv:2005.14165, 2020.
  2. Liu P, Yuan W, Fu J, et al. Pre-train, prompt, and predict: A systematic survey of prompting methods in natural language processing[J]. arXiv preprint arXiv:2107.13586, 2021.
  3. Hu S, Ding N, Wang H, et al. Knowledgeable prompt-tuning: Incorporating knowledge into prompt verbalizer for text classification[J]. arXiv preprint arXiv:2108.02035, 2021.
  4. Gao T, Fisch A, Chen D. Making pre-trained language models better few-shot learners[J]. arXiv preprint arXiv:2012.15723, 2020.
  5. Shin T, Razeghi Y, Logan IV R L, et al. Autoprompt: Eliciting knowledge from language models with automatically generated prompts[J]. arXiv preprint arXiv:2010.15980, 2020.
  6. Jiang Z, Xu F F, Araki J, et al. How can we know what language models know?[J]. Transactions of the Association for Computational Linguistics, 2020, 8: 423-438.
  7. Liu X, Zheng Y, Du Z, et al. GPT Understands, Too[J]. arXiv preprint arXiv:2103.10385, 2021.
  8. Han X, Zhao W, Ding N, et al. PTR: Prompt Tuning with Rules for Text Classification[J]. arXiv preprint arXiv:2105.11259, 2021.
  9. Li X L, Liang P. Prefix-tuning: Optimizing continuous prompts for generation[J]. arXiv preprint arXiv:2101.00190, 2021.
  10. Gu Y, Han X, Liu Z, et al. Ppt: Pre-trained prompt tuning for few-shot learning[J]. arXiv preprint arXiv:2109.04332, 2021.
  11. https://bbs.cvmart.net/articles/5625
  12. https://zhuanlan.zhihu.com/p/398009000
  13. https://zhuanlan.zhihu.com/p/386470305
  14. http://www.360doc.com/content/21/0813/11/7673502_990843543.shtml
  15. https://www.aminer.cn/research_report/617a27745c28d1a4d4362fd4
  16. https://www.i4k.xyz/article/c9Yv2cf9I06K2A9E/119336766
  17. https://zhuanlan.zhihu.com/p/410211220
  18. https://zhuanlan.zhihu.com/p/419215591
  19. https://zhuanlan.zhihu.com/p/395115779

本文来源:「想飞的小菜鸡」的个人网站 vodkazy.cn

版权声明:本文为「想飞的小菜鸡」的原创文章,采用 BY-NC-SA 许可协议,转载请附上原文出处链接及本声明。

原文链接:https://vodkazy.cn/2021/11/04/赶个时髦,看看Prompt

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者,更多文章请访问想飞的小菜鸡