导读:本文是“数据拾光者”专栏的第五十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇主要从理论到实践介绍了当前超火的提示学习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如下:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_class/few-shot

PaddleNLP提供了Prompt Learning端到端的实践案例,主要特点是标注成本低,在少样本(few-shot)的场景下取得比微调更好的分类效果,同时全流程打通,提供了从训练到部署的完整解决方案,可以低成本迁移至实际应用场景。相当于我们可以很容易的将Prompt Learning应用到我们下游任务中了,这对于快速落地到实际生产业务中是非常重要的。

效果方面,在公共数据集FewCLUE中的新闻分类(tnews)任务测试集中进行了测试,分别对比了预训练+微调和Prompt Learning的效果对比,下面是精度评价指标:

图7 预训练+微调和Prompt Learning的效果对比

可以看出使用同样的预训练模型ernie-3.0-base-zh,Prompt Learning的效果提升非常明显。下一步我会应用到实际业务场景中,到时候有经验成果会和大家一起分享。

如果想在多标签文本分类任务中使用Prompt Learning可以查看以下github:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/multi_label/few-shot

如果想在多层次文本分类任务中使用Prompt Learning可以查看以下github:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/applications/text_classification/hierarchical/few-shot

总结和反思

本篇主要从理论到实践介绍了当前超火的提示学习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相关推荐

  1. 广告行业中那些趣事系列60:详解超好用的无监督关键词提取算法Keybert

    导读:本文是"数据拾光者"专栏的第六十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了超好用的无监督关键词提取算法Keybert,对于希望使用无 ...

  2. 手写数字识别中多元分类原理_广告行业中那些趣事系列:从理论到实战BERT知识蒸馏...

    导读:本文将介绍在广告行业中自然语言处理和推荐系统实践.本文主要分享从理论到实战知识蒸馏,对知识蒸馏感兴趣的小伙伴可以一起沟通交流. 摘要:本篇主要分享从理论到实战知识蒸馏.首先讲了下为什么要学习知识 ...

  3. 广告行业中那些趣事系列32:美团搜索NER技术实践学习笔记

    导读:本文是"数据拾光者"专栏的第三十二篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇主要是学习美团技术团队分享的<美团搜索中NER技术的探索与实践> ...

  4. 广告行业中那些趣事系列51:超牛的kaggle比赛Favorita Grocery Sales Forecasting冠军方案...

    导读:本文是"数据拾光者"专栏的第五十一篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇分享了kaggle比赛<Corporación Favorita G ...

  5. 广告行业中那些趣事系列2:BERT实战NLP文本分类任务(附github源码)

    微信公众号:数据拾光者.愿结交更多的小伙伴,一同走人生路. 摘要:上一篇广告中那些趣事系列1:广告统一兴趣建模流程,我们了解了如何为广告主圈人群以及如何刻画用户的兴趣度.要想给用户打标签,我们需要构建 ...

  6. 广告行业中那些趣事系列39:实战广告场景中的图片相似度识别任务

    导读:本文是"数据拾光者"专栏的第三十九篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了广告场景中的图片相似度识别任务,对于希望解决图片相似度识 ...

  7. 广告行业中那些趣事系列26:基于PoseNet算法的人体姿势相似度识别

    摘要:本篇从理论到实践分享了基于PoseNet算法的人体姿势相似度识别项目.首先介绍了项目背景,因为部门搞活动需要大家去模仿夸张搞笑的表情和姿势来提升活动的可玩性,所以需要利用CV算法对图片进行相似度 ...

  8. bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践

    摘要:本篇主要学习和分析BERT在美团搜索排序中的项目实践.首先介绍了业务背景,主要对比了美团搜索业务场景和我们的应用场景:然后讲了下计算query和doc相关性的方法,主要包括计算字面相关性和计算语 ...

  9. Tensorflow 2.x(keras)源码详解之第十二章:keras中的损失函数之BinaryCrossentropy详解

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

最新文章

  1. Modeling System Behavior with Use Case(1)
  2. 使用MongoDB存储Docker日志(续)
  3. 配置Exchange 2010 服务器(二)Exchange2010证书配置
  4. MATLAB无穷大上的反常积分
  5. uploadify多文件上传插件
  6. 【CV】带你入门多目标跟踪(二)SORTDeepSORT
  7. amd为什么还用针脚_为什么intel处理器不用针脚,AMD还一直使用针脚呢?
  8. 关于mingw编译Qt时无法编译opengl es2(ANGLE)版本的问题
  9. 有几个人会用计算机,怎么知道我家的wifi有几个人在使用
  10. c语言输出单链表最大值与最小值,数据结构(C语言版)---顺序表与链表的比较...
  11. Ubuntu16.04下制作deb包的方法详解
  12. Servlet之过滤器详解
  13. 《西河大鼓——调寇》(艳桂荣音配像)
  14. php workman实现socket服务及客户端连接
  15. 三菱gt3的序列号_WinXP sp3序列号大全
  16. SQL Prompt10 安装激活教程,让你写sql 如鱼得水
  17. 安全扫描利器-xscan3.3中文版
  18. 研究生能合作发表论文吗?
  19. python语言月份缩写_Python替换月份为英文缩写的实现方法
  20. vue,的M、V、VM分别代表什么

热门文章

  1. 使用 honeycam 在电脑上截取GIF动图
  2. 随机过程基础(2)---多维随机变量常用性质、随机过程的引入
  3. javaweb-----------filter过滤器
  4. 生产环境的数据库规划
  5. sqlserver2005 使用
  6. 运行时内存-CPU多级缓存
  7. CentOS 使用yum安装 pip
  8. ElasticSerach的简单创建和高亮查询
  9. 怎样把PDF文件转换成JPG格式保存
  10. 视频Android studio1.3.1从菜鸟到高手--第一季-IT蓝豹