广告行业中那些趣事系列59:详解当前大火的提示学习prompt learning
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广告行业中那些趣事系列59:详解当前大火的提示学习prompt learning相关的知识,希望对你有一定的参考价值。
导读:本文是“数据拾光者”专栏的第五十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要从理论到实践介绍了当前超火的提示学习Prompt Learning,对于希望将Prompt Learning应用到实际业务中的小伙伴可能有帮助。
欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。知乎专栏:数据拾光者 公众号:数据拾光者
摘要:本篇主要从理论到实践介绍了当前超火的提示学习Prompt Learning。首先介绍了背景,从NLP四大范式引出预训练+微调和当前大火的提示学习Prompt Learning。相比于预训练+微调是让预训练模型适配下游任务,提示学习Prompt Learning则是让下游任务来适配预训练模型,将几乎所有NLP任务统一转化成语言模型问题,提升预训练模型的利用率;然后重点介绍了Prompt Learning,主要包括Prompt的作用、Prompt文本分类流程、Prompt形状、如何设计Prompt和Prompt Learning的优势;最后基于百度paddleNLP实战Prompt Learning,在小样本场景下的多分类任务中对比了预训练+微调和Prompt Learning的效果,使用同样的预训练模型Prompt Learning提升效果很明显。对于希望将Prompt Learning应用到实际业务中的小伙伴可能有帮助。
下面主要按照如下思维导图进行学习分享:
01 背景介绍
最近NLP又掀起了Prompt Learning提示学习的大潮,看看能不能落地到我们广告场景中。说起Prompt Learning,要先说下NLP四大范式:
图1 NLP四大范式介绍图
- 第一范式:非神经网络时代的完全监督学习(特征工程)。该阶段需要大量任务相关的训练数据,通过特征工程和算法,比较有代表的算法是朴素贝叶斯Naïve Bayes、支持向量机SVM、逻辑回归LR等;
- 第二范式:基于神经网络的完全监督学习(架构工程)。该阶段也需要大量任务相关的训练数据,通过深度学习方法,自动获取特征(表示学习)进行端到端分类学习;
- 第三范式:预训练,精调范式(目标工程):该阶段是当前使用比较多的预训练+微调范式,通过预训练的方式(比如掩码语言模型Masked Language Model)来学习海量的语言学知识,然后下游使用少量的任务相关的数据对预训练模型进行微调即可完成相关任务;
- 第四范式:预训练,提示,预测范式(Prompt工程):当前进入了Prompt Learning提示学习的新范式,使用Few shot或者Zero shot即可完成下游任务。
以BERT为代表的预训练+微调范式在NLP领域引起了巨大的反响,不仅效果好,而且应用范围也非常广。但是预训练模型随着使用更多的数据、更大的模型效果也越来越好,比如GPT-3模型的参数量已经达到了恐怖的175B,伴随而来的问题是对这些“庞然大物”进行微调对硬件的要求和成本也越来越高。下面是预训练模型越来越大的介绍图:
图2 预训练模型越来越“大”
为了解决预训练模型微调越来越困难的问题,提示学习Prompt Learning是一个不错的方向。Prompt Learning目标就是用一个完全无监督的预训练模型来解决下游各种问题,从而省去微调的步骤,让下游任务适配预训练模型。下面通过预训练+微调和Prompt Learning对比图查看两者的差异:
图3 预训练+微调和Prompt Learning对比图
上图中左边是预训练+微调范式。对于下游不同的任务A、B、C,会对11B量级参数的预训练模型分别进行微调,得到3个微调之后不同的11B模型,核心是让预训练模型来适配下游任务。而Prompt Learning针对三个不同的下游任务只使用同一个预训练模型来构建任务,省去了微调的步骤,核心是让下游任务来适配预训练模型,这样可以充分利用已经训练好的预训练模型,大大提升预训练模型的使用效率。
02 Prompt Learning详解
2.1 Prompt的主要作用
Prompt Learning相比于预训练+微调来说最大的优势在于充分利用预训练模型的能力,通过添加提示信息将下游任务转化成预训练阶段的掩码预测任务。
2.2 Prompt文本分类流程
下面通过NLP中最常见的文本分类任务来对比介绍下预训练+微调和Prompt Learning提示学习流程:
图3 预训练+微调和Prompt Learning流程对比
上图中左边部分是预训练+微调范式解决文本分类问题,将输入文本添加[CLS]开始标志和[SEP]结束标志,然后经过预训练模型编码得到encodding,将[CLS]标志作为句向量去进行文本分类流程,一般是经过一个softmax进行分类,得到正向/负向标签。而上图中右边部分则是Prompt Learning流程,该流程主要有以下四个步骤:
- (1) 探索prompt模板,比如“我[MASK]喜欢”;
- (2) 将输入转化成:"电影真好看!我[MASK]喜欢。";
- (3) 利用预训练模型去预测答案,比如得到“不/很”等词;
- (4) 构造映射函数,将答案转化成正向/负向分类的标签。比如预训练模型预测为“不”则会转化成负向的标签,如果预测为“很”则会转化成正向的标签。
Prompt Learning通过模板(Template)定义的提示语句,将原有任务转化为预测掩码位置的词,以及通过标签词(Verbalizer)的定义,建立预测词与真实标签之间的映射关系,就可以将下游任务转化成预训练阶段的掩码预测任务。Prompt Learning提示学习可以很好的应用到小样本甚至无样本场景中,解决下游任务。尤其对于我们广告场景中经常需要在小样本场景中进行文本分类更加适用。
2.3 Prompt形状
通过上面使用Prompt Learning进行文本分类任务的例子中可以看出来最重要的是如何得到Prompt模板,Prompt模板的数量和位置会直接影响下游任务的效果。
Prompt从位置上来看主要出现在句中或者句末,如果在句中称为cloze prompt,如果在句末称为prefix prompt。在句中时cloze prompt和Masked Language Model的训练方式就非常相似,非常适合 MLM任务,比如完形填空等任务。对于生成类或者自回归任务来说prefix prompt则非常合适,比如小说生成等任务。
Prompt从形式上来说可以是我们人类可理解的语言文本,也可以是人类无法直接理解但机器可以理解的向量embedding。
2.4 如何设计Prompt
设计Prompt可以通过手工设计模板,也可以自动学习模板。
2.4.1 手工设计模板
最开始Prompt就是通过手工设计模板,手工设计模板主要依赖人类的语言学知识,得到语义流畅且高效的模板。手工设计模板的好处在于可以直观可理解性较强,但是缺点也很明显,依赖很多人工经验和专业知识,代价比较大。
2.4.2 自动学习模板
相比于手工设计模板,自动学习模板则先进高效了很多。自动学习模板可以分为离散(Discrete Prompts)和连续(Continuous Prompts)两大类。离散的主要包括 Prompt Mining, Prompt Paraphrasing, Gradient-based Search, Prompt Generation 和 Prompt Scoring;连续的则主要包括Prefix Tuning, Tuning Initialized with Discrete Prompts 和 Hard-Soft Prompt Hybrid Tuning。
离散Prompts指的是自动生成由自然语言的词组成的Prompt,因此其搜索空间是离散的。常用的五种方法介绍如下图,主要参考资料【1】:
图4 常用的离散Prompts方法
连续Prompts相比于离散Prompts来说不再拘泥于人类可以理解的语言,会将机器可以理解的向量embedding也作为Prompt模板。常用的三种方法介绍如下图,主要参考资料【1】:
图5 常用的连续Prompts方法
2.5 Prompt Learning的优势
Prompt Learning核心在于充分利用无监督学习得到的预训练模型,省去了微调的步骤,将下游任务转化成预训练阶段的掩码预测任务。主要有两个优势:
一方面,Prompt Learning把所有的NLP任务统一转化成了语言模型的问题,避免了预训练和微调之间存在的差异,适用于几乎所有NLP任务,并且对于少样本和无样本场景也能取得不错的效果;
另一方面,相比于预训练+微调范式中让预训练模型适配下游任务,Prompt Learning是将下游任务进行重定义,让下游任务来适配预训练模型。可以更好的提升预训练模型的利用率。
03 基于paddleNLP实战Prompt Learning
上面从理论方面详解了Prompt Learning,下面基于百度paddleNLP实战Prompt Learning,开源项目github地址如下:
https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/advanced_guide/prompt.md
Prompt API 提供了这类算法实现的基本模块,支持PET、P-Tuning、WARP、RGL等经典算法的快速实现。下面是Prompt API主要的目录结构,感兴趣的小伙伴可以到github详细了解并使用起来:
图6 Prompt API主要的目录结构
对于文本分类任务来说,Prompt API实践教程分别提供了多分类文本分类示例、多标签文本分类示例和多层次文本分类示例。我们业务场景中主要是多分类任务,下面将PaddleNLP提供的Prompt Learning应用到公共数据集中并对比预训练+微调的效果。
小样本场景下的多分类任务github如下:
PaddleNLP提供了Prompt Learning端到端的实践案例,主要特点是标注成本低,在少样本(few-shot)的场景下取得比微调更好的分类效果,同时全流程打通,提供了从训练到部署的完整解决方案,可以低成本迁移至实际应用场景。相当于我们可以很容易的将Prompt Learning应用到我们下游任务中了,这对于快速落地到实际生产业务中是非常重要的。
效果方面,在公共数据集FewCLUE中的新闻分类(tnews)任务测试集中进行了测试,分别对比了预训练+微调和Prompt Learning的效果对比,下面是精度评价指标:
图7 预训练+微调和Prompt Learning的效果对比
可以看出使用同样的预训练模型ernie-3.0-base-zh,Prompt Learning的效果提升非常明显。下一步我会应用到实际业务场景中,到时候有经验成果会和大家一起分享。
如果想在多标签文本分类任务中使用Prompt Learning可以查看以下github:
如果想在多层次文本分类任务中使用Prompt Learning可以查看以下github:
总结和反思
本篇主要从理论到实践介绍了当前超火的提示学习Prompt Learning。首先介绍了背景,从NLP四大范式引出预训练+微调和当前大火的提示学习Prompt Learning。相比于预训练+微调是让预训练模型适配下游任务,提示学习Prompt Learning则是让下游任务来适配预训练模型,将几乎所有NLP任务统一转化成语言模型问题,提升预训练模型的利用率;然后重点介绍了Prompt Learning,主要包括Prompt的作用、Prompt文本分类流程、Prompt形状、如何设计Prompt和Prompt Learning的优势;最后基于百度paddleNLP实战Prompt Learning,在小样本场景下的多分类任务中对比了预训练+微调和Prompt Learning的效果,使用同样的预训练模型Prompt Learning提升效果很明显。对于希望将Prompt Learning应用到实际业务中的小伙伴可能有帮助。
参考资料
[1] NLP新宠——浅谈Prompt的前世今生, https://zhuanlan.zhihu.com/p/399295895
[2]https://github.com/PaddlePaddle/PaddleNLP/blob/develop/docs/advanced_guide/prompt.md
[3] NLP的四个范式, https://zhuanlan.zhihu.com/p/456951972
最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。
码字不易,欢迎小伙伴们点赞和分享。
以上是关于广告行业中那些趣事系列59:详解当前大火的提示学习prompt learning的主要内容,如果未能解决你的问题,请参考以下文章
广告行业中那些趣事系列60:详解超好用的无监督关键词提取算法Keybert
广告行业中那些趣事系列10:推荐系统中不得不说的DSSM双塔模型
广告行业中那些趣事系列10:推荐系统中不得不说的DSSM双塔模型
广告行业中那些趣事系列4:详解从配角到C位出道的Transformer