当前位置:   article > 正文

一文了解预训练模型 Prompt 调优(比较详细)_prompt优化

prompt优化

来源: AINLPer微信公众号(每日干货分享!!)
编辑: ShuYini
校稿: ShuYini
时间: 2022-10-12

引言

最近看了很多关于NLP的文章,发现一些预训练模型(PLMs)调优都用到了Prompt。之前对Prompt理解相对比较简单,所以今天找了篇综述,整理了一下关于Prompt的相关知识,个人觉还算比较全面,遂与大家分享共同学习。

关注 AINLPer公众号,每日干货第一时间送达

Prompt的诞生

 目前各种神经网络模型在自然语言处理领域得到了广泛应用,例如卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network, RNN)、图神经网络(Graph Neural Networks,GNN)。但是由于NLP任务的多样性,神经网络模型需要针对具体的任务进行设计,无法构建一个适用于多任务的通用模型

 从 2018 年起,迁移学习的思想被广泛应用在自然语言处理领域,提出了许多预训练语言模型,如 ELMO、GPT、BERT、XLNET、ELECTRA、Albert等。预训练语言模型采用两阶段学习方法,首先在大型语料库中训练模型,使模型学习通用语言表示,再根据不同的下游任务对预训练模型进行微调。 预训练模型中最具有代表性的就是Transformer结构,在BERT模型基于多层双向 Transformer 编码器实现,这种双向 结构能更好的捕捉语句中单词之间关系,提高模型在下游任务中的表现能力。而且使用预训练模型可以降低后期训练成本、加快在下游任务中模型的收敛速度、 显著提升下游任务的准确率。

 随着计算机性能的提升,预训练模型参数量也呈现快速增长的趋势。预训练模型参数量从 2018 年的 1.1 亿 (Bert-base) 增 长 到 2021 年 的 53000 亿 (Megatron-Turing),增长了 48000 倍。但是模型参数量的增长在带来益处的同时,也表现出许多隐患。因为巨大的参数量会导致模型的迁移能力下降,传统预训练模型中的两阶段学习方法很难适用于参数量达到数万亿的巨大模型,即使在微调时使用了较大的数据集,也无法保障模型能够快速记住微调样本。并且,传统微调方法需要对每一种下游任务进行全模型微调,并存储一份该任务的模型样本,对存储资源造成巨大压力,对计算机算力也有更高的要求。

 基于以上神经网络模型的发展,基于 Prompt Tuning 的预训练模型微调方法应运而生。

Prompt 微调方法

 Prompt微调方法主要思想通过模板将不同的下游任务转换为模型预训练时常见的形式,缩小预训练与微调时训练数据的差异性,降低了预训练模型在下游任务微调时存储和运算的资源使用,提升模型在下游任务中的表现。Prompt 的设计分为三个步骤:

  • 模板设计:通过手动或自动设计模板,将输入x(例如:独行月球真好看。)转变成X(例如:独行月球真好看,这太___了)。通常情况下X中包含空槽,让预训练语言模型对空槽填充,从而推断出 y(好看)。模板的设计灵活多变,需要根据下游任务与预训练语言模型来选择合适的模板。
  • 答案搜索:在通过模板得到X后,预训练语言模型在答案空间中进行搜索,找出得分最高的值填充到对应空槽中。
  • 答案映射:通过答案搜索得到空槽对应填充值后,部分任务的槽值为最终结果,部分任务的槽值需要进行转换,将槽值对应到最终的输出标签 y(好看)。

三种Prompt模板设计方法

 如何构建一个模板使模型在下游任务中获得最好的表现是 Prompt Tuning 研究的主要问题,目前在模板设计阶段主要有人工构建模板、离散模板和连续模版三种方法,本文会分别介绍这三种方法。

人工模板构建

依靠专业人员的经验手动构建模板是最直接高效的方式,可以支持下游任务,也可以使用辅助半监督学习的方式构建数据集,进行数据增强。在大型预训练模型的场景下可以实现小样本甚至零样本学习,实现全模 型微调的效果

 2019年,Petroni F等人对预训练模型中包含的知 识进行探测。使用 BERT 作为基础模型,通过将下游任 务训练数据集转换为完形填空的形式(如下表所示)模仿 MLM 预训练机制,缩小模型预训练与微调时看到的数 据差异,来检验模型中包含的知识量。

 2020年,Open AI发布了GPT-3 ,同样采用了人工构建模板的方式。将预训练好的模型参数冻结,在输入文本中加入提示构成模板引导模型完成相应问题,在避免全模型微调的情况下获得了很好的结果。提示通常由任务描述和几个相关示例组成,将任务相关提示与输入 x 拼接生成新的输入,无需针对不同的下游任务进行设计。

 2021年,Schick T等人将有监督的微调和无监督 的微调相结合提出了PET(Pattern Exploiting Training),采用了半监督训练的方式,将输入示例转换为完形填空形式的短语,帮助模型理解相应任务。该方法使用手工构建模板的方式,使用相应短语为未标记数据添加软标签,最后对生成的训练集执行标准的监督训练。

由于模板之间无法相互学习,如果其中某个模板性 能差,会导致最终生成的训练集包含许多错误示例。作者针对这种情况提出iPET。首先在数据集上进行训练得到多个单独微调模型,对于每个模型,随机选取剩下的多个模型对未标注数据进行预测,将预测结果作为该模型新的训练集。其次为每个模型分配新的数据集,继续训练得到一组新的 PET 模型。最后将前面步骤重复 k 次,每次将生成的训练集大小增加 d 倍,最后一组模型将用于创建软标记数据集,用于标准分类。

离散模板方法

虽然人工构建模板较为直观高效,但是由于构建过程繁琐,模板微小的变化可能会导致结果出现较大的变化,自动构建模板方式的提出用于解决这一问题。离散模板是自动构建模板的一种方法,模板由具体的字符构成
 2020年,Shin 等人针对手动设计模板既耗时性能又不稳定的问题,提出了AUTOPROMPT。通过梯度引导搜索为各种任务创建提示。如上图所示,首先定义模板 λ,λ 中包含触发标记 X t r i g X_{trig} Xtrig 、原始输入 X i n p X_{inp} Xinp 和填充预测结果的插槽[mask]。触发标记 X t r i g X_{trig} Xtrig 在所有任务中共享, 并通过梯度搜索寻找确定。将 X i n p X_{inp} Xinp X t r i g X_{trig} Xtrig 输入到 λ 中,生成 X prompt 作为预训练模型输入。对于抽象任务中标签选择不清晰的问题,作者使用通用的两阶段操作来自动 选择标签集合的方法。首先训练一个逻辑分类器,使用 [mask]作为输入来预测类标签。然后将预训练模型的输 出来当作训练好的逻辑分类器的输入,来获得相应标签。AUTOPROMPT与手工构建模板相比,减少了人力的消耗并获得了不错的性能。

 GPT-3 虽然在小样本微调中有不错的效果,但是其参数太多,在真实场景中难以应用部署。对此,Gao T等人在2021 年提出LM-BFF模型。通过T5模型来自动创建Prompt模板,避免人工标注导致的局部最优问题。

 目前提示的微调方法大都基于令牌级别的,基于GPT的L2RLM(left to right language model)或者 BERT的MLM(mask language model)。2021 年,Sun Y等人使用了被RoBERTa等模型抛弃的 Bert 原始训练任务 NSP(next sentence predict)来构建句子级提示方法,称为 NSP-BERT。NSP-BERT 为不同的下游任 务分别构建模板并通过添加 soft-position 将候选词与 [Blank]映射到同一位置,解决完形填空中候选词无法感 知[Blank]上下文的缺点。

 BARTScore Prompt 是 Yuan W 等人在 2021 年提 出的一种模版生成方法,将 Prompt 加在源文本前面或采用自动搜索模板的方式。首先构建一个提示,对提示中文本进行同义词替换生成新的提示,以这种方式来扩充 提示数量。最终将生成的提示加在文本的前面或者后面,构成模板作为预训练模型的输入。虽然该构建方法简单,但是没有证明在事实和语言质量视角下的有效性。

 2021 年,Haviv A 等人将构建模板将模板使用两个步骤合并,提出了一种新的模板生成方法,使用BERT1和BERT2 两个模型完成任务。首先,构建初始模板作为BERT1模型的输入,计算每一个隐时刻状态与BERT1中哪一个词嵌入的 token 最接近,将 token 与原始模板中对应词进行替换优化生成新模板。将新模板作为 BERT2 的输入,预测结果。虽然这个方法简单并易于理解,但整个训练过程需要使用两个BERT模型,对计算机算力有较高的要求。

连续模板方法

 由于手动设计模板十分困难,需要大量验证集,并且当模板发生细微变化时,容易产生不可预估的变化。离散模板与连续模板相比,在许多情况下存在性能不理想的问题。连续模板构建是对整个连续空间进行微调,放松了模板由实际存在词语组成的约束,与离散模板相比,连续模板具有更强的表现力。并且连续模板可以强调词语,并对具有误导性和歧义性的词语进行调整

 2021年,Li X L 等人提出 prefix-tuning 解决全模 型微调中每个任务存储一份预训练模型参数的问题。每 个下游任务只需要存储对应的前缀,使用前缀来优化任务。Prefix-tuning 通过在预训练模型的每一层插入与任务相关的向量,在下游任务中调整相关参数,同时保持预训练模型参数不变。自

 2021年,Lester B等人在prefix-tuning的基础上进行简化,提出 Soft-Prompt。Soft-Prompt仅在输入前加入提示,采用与目标任务相关的token对提示进行初始化。Soft-Prompt 比 prefix-tuning 添加更少的参数,允许transformer根据输入的上下文更新中间层的任务表示, 不需要重新参数化。

 Hambardzumyan K等人受到了对抗性重新编程的启发,提出了一种基于对抗性重构的方法WARP(Word-level Adversarial ReProgramming)。与之前手工寻找或者学习离散token作为Prompt的方法不同,WARP直接优化embedding作为 Prompt,给予模型更高的自由度,并且在最终的下游任务中获得了更好的表现。

 目前提示调优已经展现出强大的能力,但是想要达到全模型微调的效果,需要一个巨大的模型(参数量在100亿以上)。然而超大的预训练模型在实际应用部署中存在较多的问题,目前实际应用中通常使用中型模型(参数量在1亿到10亿之间)。在这部分模型中,提示调优效果远低于全模型微调。2021年10月,Liu X等人受 prefix-tuning 启发,在P-tuning基础上进行改进提出 P-tuning v2。采用了深层实体调优,通过在不同层中添加标记,增加可以调节的参数量,解决 P-tuning 在复杂NLU任务中表现差的问题。

Prompt模板总结

人工模板构建

  • 优点–人工构建模板由专家根据专业知识进 行模板构建,具有直观,高效的特点, 好的模板会提升预训练模型的表现。
  • 缺点–人工模板构建过程繁琐,标点符号等细微的变化会让模型 效果产生巨大差异,导致手工构建模板有较高的不稳定性。 手工模板构建的过程费时费力,且难以构造出合适的模板。

离散模板构建

  • 优点–离散模板的构建相对简单,对专业知 识没有太大的要求。
  • 缺点–构建得到 Prompt 集合后,具体任务中需要进行大量实验选 择合适的 Prompt,在部分任务中存在性能不理想的问题。

连续模板构建

  • 优点–连续模板构建通过在整个连续空间中 优化,部分场景下可以获得甚至超越 全模型微调的性能。
  • 缺点–训练时间较长,模型收敛速度较慢,与使用的预训练模型 存在高耦合现象,更换预训练模型后需要重新进行训练。

推荐阅读

[1] EMNLP2022 | 带有实体内存(Entity Memory)的统一编解码框架 (美国圣母大学)

[2] NeurIPS2022 | 训练缺少数据?你还有“零样本学习(zero-shot Learning)”(香槟分校)

[3] 一文了解EMNLP国际顶会 && 历年EMNLP论文下载 && 含EMNLP2022

[4]【历年NeurIPS论文下载】一文带你看懂NeurIPS国际顶会(内含NeurIPS2022)

[5]【微软研究院 && 含源码】相比黑盒模型,可解释模型同样可以获得理想的性能

[6]【IJCAI2022&&知识图谱】联邦环境下,基于元学习的图谱知识外推(阿里&浙大&含源码)

[7]【NLP论文分享&&语言表示】有望颠覆Transformer的图循环神经网络(GNN)

[8]【历年IJCAI论文下载 && 论文速递】无数据对抗蒸馏、垂直联合、预训练微调范式图神经网络(GNN)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号