大家好,我是对白。

今天要给大家推荐一下我校计算机系NLP实验室的最新成果:OpenPrompt开源工具包。有了它,初学者也可轻松部署Prompt-learning框架来利用预训练模型解决各种NLP问题,下面就让我们一起来看看吧。

如何高效地使用大规模预训练语言模型(Pre-trained Language Models, PLMs)是近年NLP领域中的核心问题之一。一直以来,传统的微调(fine-tuning范式)一直是驱动大模型的“基本操作”。在微调范式中,我们需要在预训练模型上引入额外的目标函数来,从而将大模型适配到各类下游任务中。

背景介绍:

Promp****t-learning范式的崛起

最近一段时间,一种新的驱动大模型的范式受到了NLP界的广泛关注,它就是提示学习(prompt-learning,又prompt-tuning),它将对输入的文本按照模板进行特殊的处理,把任务重构成一个“预训练任务”。比如,在一个情感分类任务中,我们需要判断“这电影让我感觉浪费生命”这句话的情感是“正向”还是“负向”,则可以用模板把分类问题转化为一个“完形填空”问题:“这电影让我感觉浪费生命,它真的很[MASK]”,这里的输出是“棒”和“糟”来对应二分类。研究发现,在训练样本较少时,prompt-learning的表现会异常优异,它能够有效地建立起预训练和模型适配之间的桥梁。更重要地,它是我们驱动超大模型(如无法直接微调的千亿参数模型)的有效手段。

OpenPrompt:

开源Prompt-learning工具包

图1 使用OpenPrompt来建模不同的NLP任务

如今,NLP学术界已经出现了一系列的prompt-learning方法,内容涵盖了模板的构建和搜索,标签到词典的映射和优化,prompt-learning在各种下游任务的适配等等。然而,当我们去具体深入源代码时,会发现prompt-learning的实现方式是没有统一的范式的,这些方法都是力求在已有的传统微调框架中进行细微高效的改动来实现prompt-learning,可能会造成较差的可读性和可复现性。事实上,一个prompt-learning流程是预训练任务、当前任务、人类先验知识、模型架构的综合过程。我们可能在具体实现中遇到各种细节问题,如:该用什么类型的模型,是MLM还是seq2seq?该用什么参数级别的模型,是亿级、十亿级还是百亿级以上的超大模型?该使用什么模板?是人工构建还是用soft tokens随机初始化?该如何构建标签到词表的映射?该使用什么训练手段?**最近,清华大学自然语言处理实验室团队发布了一个统一范式的prompt-learning工具包OpenPrompt,**旨在让初学者、开发者、研究者都能轻松地部署prompt-learning框架来利用预训练模型解决各种NLP问题。它有如下特点:

  • 易用性**。**基于OpenPrompt工具包,使用者可以快速根据不同任务部署prompt-learning框架。

  • **组合性。**从前的prompt-learning研究往往只实验了一种设定,在OpenPrompt的模块化支持下,使用者可以自由地将模型、模板、标词映射进行组合,从而进行更加全面的实验。

  • **拓展性。**OpenPrompt具有灵活的可拓展性,使用者可以轻松地在其之上完成进阶开发,让你的prompt-learning研究快人一步!

图2 OpenPrompt工具包结构图

同时,开发团队已经用OpenPrompt实现了一些代表性的prompt-learning工作,可以看出,在科学的模块设计下,这些工作都是可以在OpenPrompt统一框架下实现的。

表1 一些OpenPrompt中实现的prompt-learning工作

‍‍‍关于更详细的用法和说明,请扫描下方二维码或参考项目链接https://github.com/thunlp/OpenPrompt。

上手教程:

使用OpenPrompt

OpenPrompt的使用非常简便,首先git clone项目并且安装依赖:

在OpenPrompt中,一个PromptModel是由一个Template类、一个Verbalizer和一个预训练模型组成,其中Template类主要负责模板的定义,在这里不仅支持从文件中直接读入人工定义的模板,也支持通过迭代搜索等方式构建模板,Verbalizer类则是负责从标签词到词表的映射的定义,同样支持进阶操作。

第一步:定义任务

Prompt-learning范式几乎可以应用到任意的NLP范式上,因此第一步是定义当前的任务,这里本质上是定义classes和InputExample。这里使用情感分类为例。

第二步:选择预训练模型

选择预训练模型的本质上是选择预训练任务,不同的预训练模型也具有不同的特性,在OpenPrompt的模块性和灵活性的支持下,我们鼓励开发着探索不同预训练语言模型的特性,OpenPrompt与Huggingface Transfomers库兼容,可以一键调用。

第三步:定义模板(Template)

模板是prompt-learning中最重要的模块之一,它可以是文本或者无意义的特殊字符,将原始输入进行修改和封装。

第四步:定义映射(Verbalizer)

Verbalizer将标签映射到词典中的标签词中,它也是prompt-learning中比较重要的组成部分(但并不是必要的,如在生成任务中)。

第五步:定义PromptModel

将以上这些模块结合,我们将得到一个PromptModel,尽管在当前的例子中,这些模块只是封装到了一起,但在实际操作中,用户可以定义很多它们之间的进阶交互。

接下来就可以进行训练了!训练的流程和PyTorch的传统范式兼容,关注官方文档来获取更多关于OpenPrompt的信息。

进阶开发:

使用OpenPrompt开发自己的prompt-learning框架

OpenPrompt中提供了一些经典数据集的下载链接,同时使用者也可以根据自己的需求将数据集来开发prompt-learning框架。由于prompt-learning在少样本学习中的优异表现,OpenPrompt提供了少样本采样FewShotSampler类,使得使用者可以轻松对数据集进行不同粒度的采样,验证自己的prompt-learning框架的有效性。

在使用者自己实现的Template类中,需要继承prompt_base文件中的Template基类,这里定义了作为Template的基本属性,使用者可以指定构建模板的具体方式,其中哪些token是要被训练的,哪些token是不在词表中的新特殊字符(即soft-encoding),同时可以通过定义wrap_one_example方法来定义如何将一个输入数据用模板进行包装。在Verbalizer类中,同样地,使用者可以通过定义label_words来确定词表中的哪些词需要被标签所对应,同时可以设置如何将这些词的logits取出并应用的方式。通过将Template、Verbalizer和模型本身进行组合,我们可以得到一个PromptModel类,在这个类中,我们可以定义它们之间的具体交互,如每一个输入可能对应一个Template和多个Verbalizer等等。

定义好自己的Prompt之后,开发者还可以设置不同的优化方式,如只优化prompt本身而不改变模型参数来进行具体地训练,工具包中已经缺省地提供了具体训练过程中的接口,如指定哪些文本是需要truncate的等等,使用者也可以自由地按照自己的想法对训练和评测过程进行修改。

参考文献

  1. 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.

  2. Han X, Zhao W, Ding N, et al. PTR: Prompt Tuning with Rules for Text Classification[J]. arXiv preprint arXiv:2105.11259, 2021.

  3. Gao T, Fisch A, Chen D. Making pre-trained language models better few-shot learners[J]. arXiv preprint arXiv:2012.15723, 2020.

  4. Ding N, Chen Y, Han X, et al. Prompt-learning for fine-grained entity typing[J]. arXiv preprint arXiv:2108.10604, 2021.

  5. Lester B, Al-Rfou R, Constant N. The power of scale for parameter-efficient prompt tuning[J]. arXiv preprint arXiv:2104.08691, 2021.

  6. Le Scao T, Rush A M. How many data points is a prompt worth?[C]//Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. 2021: 2627-2636.

  7. Liu X, Zheng Y, Du Z, et al. GPT Understands, Too[J]. arXiv preprint arXiv:2103.10385, 2021.

  8. Qin G, Eisner J. Learning How to Ask: Querying LMs with Mixtures of Soft Prompts[J]. arXiv preprint arXiv:2104.06599, 2021.

  9. Schick T, Schmid H, Schütze H. Automatically identifying words that can serve as labels for few-shot text classification[J]. arXiv preprint arXiv:2010.13641, 2020.

  10. Li X L, Liang P. Prefix-tuning: Optimizing continuous prompts for generation[J]. arXiv preprint arXiv:2101.00190, 2021.

  11. Zhao T Z, Wallace E, Feng S, et al. Calibrate before use: Improving few-shot performance of language models[J]. arXiv preprint arXiv:2102.09690, 2021.

  12. 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.

机器学习/对比学习算法交流群

已建立机器学习/深度学习算法交流群!想要进交流群学习的同学,可以直接加我的微信号:duibai996

加的时候备注一下:昵称+学校/公司。群里聚集了很多学术界和工业界大佬,欢迎一起交流算法心得,日常还可以唠嗑~

关于我

你好,我是对白,清华计算机硕士毕业,现大厂算法工程师,拿过8家大厂算法岗SSP offer(含特殊计划),薪资40+W-80+W不等。

高中荣获全国数学和化学竞赛二等奖。

本科独立创业五年,两家公司创始人,拿过三百多万元融资(已到账),项目入选南京321高层次创业人才引进计划。创业做过无人机、机器人和互联网教育,保研清华后退居股东。

我每周至少更新三篇原创,分享人工智能前沿算法、创业心得和人生感悟。我正在努力实现人生中的第二个小目标,上方关注后可以加我微信交流。

期待你的关注,我们一起悄悄拔尖,惊艳所有~

NLPer福利 清华推出Prompt-tuning开源工具包,取代传统的微调fine-tuning相关推荐

  1. 计算机视觉之迁移学习中的微调(fine tuning)

    现在的数据集越来越大,都是大模型的训练,参数都早已超过亿级,面对如此大的训练集,绝大部分用户的硬件配置达不到,那有没有一种方法让这些训练好的大型数据集的参数,迁移到自己的一个目标训练数据集当中呢?比如 ...

  2. 谷歌正式推出 “密钥登录”,逐步取代传统密码登录

    出品 | OSC开源社区(ID:oschina2013) 都什么年代了,还在用传统密码?10 月 12 日,谷歌宣布在 Android 和 Chrome 中正式推行密钥登录 "PassKey ...

  3. 疫情将加速开源erp取代传统erp

    2020年,大家都知道爆发了新冠疫情,对全球经济影响颇大,另外随着房地产调控的深入,将会继续拖死更多的生产企业,存活下来的企业也必将转型,从以单一生产为主向生产.物流.销售.电子商务等多元化转型.单一 ...

  4. 如何fine tuning

    先看一个示例 keras入门 -在预训练好网络模型上进行fine-tune https://blog.csdn.net/hnu2012/article/details/72179437 我们的方法是这 ...

  5. 启动图一键生成工具_一键即运行!清华团队推出图深度学习工具包CogDL v0.1

    一行代码命令可以做什么? "一行命令可以实现'一条龙'运行实验." 访问 http://github.com/THUDM/cogdl 一键体验! 近年来,结构化数据的表示学习备受业 ...

  6. NLPer福利-中文语言理解基准测【CLUEbenchmark】

    NLPer福利-中文语言理解基准测[CLUEbenchmark] 公众号:ChallengeHub 官方链接:https://www.cluebenchmarks.com Github链接:https ...

  7. 精选 Github 近期13款开源工具包!(附数据集、链接)

    来源:PaperWeekly 本文共1700字,建议阅读6分钟. 本文为你精选近期Github上的13款深度学习开源工具包和数据集,一起Star和Fork吧- 01 #Swift for Tensor ...

  8. 清华-伯克利RISC-V国际开源实验室诚聘

    清华-伯克利RISC-V国际开源实验室诚聘 点击关注

  9. Java 开源工具包推荐

    Java 开源工具包推荐 网络请求 forest Forest是一个高层的.极简的HTTP调用API框架. 相比于直接使用Httpclient您不再用写一大堆重复的代码了,而是像调用本地方法一样去发送 ...

最新文章

  1. 红帽linux系统更改主机名称,怎么在 redhat 中修改计算机名
  2. 组合数的简单求法(dfs)
  3. 用python编写一个高效搜索代码工具
  4. java if用法_java中if语句的写法
  5. Jodd 工具包之StringUtil
  6. Linux基础——常用命令
  7. 深度拷贝 java_java 深度拷贝 复制 深度复制
  8. spark成长之路(1)spark究竟是什么?
  9. 哈希表及处理冲突的方法
  10. BOMRemover v2.0 去除代码中的UTF-8 BOM
  11. Easyui and mvc 项目3书籍管理功能
  12. 百度搜索引擎的搜索高级语法及应用
  13. Java使用模板导出word勾选框
  14. ubuntu关机后自动重启[无法关机]的解决办法
  15. python 中的 Fraction和GCD求最大公约数
  16. 校园招聘的简历写作与面试技巧
  17. 中南大学计算机学院复试差额录取比例,中南大学在职研究生复试差额比例大概是多少...
  18. 外汇和股票有什么区别啊?
  19. dell Precision 3550 更换固态硬盘
  20. ug支持linux系统吗,UG12.02-linux,感兴趣的可以下载

热门文章

  1. 老牌Git客户端SmartGit 安装 和 使用 教程
  2. 计算机电缆都几芯,计算机电缆型号DJYVRP-1X2X1.5
  3. 关于如何卸载流氓软件 巧压--来自北京小树发芽科技网络有限公司
  4. vector iterators incompatible
  5. ipython shell_交互式python shell之ipython安装
  6. Ios-视频直播-知识点汇总-持续更新
  7. 直接插入排序将数字从小到大排序
  8. 服务器拦截微信请求,分享微信域名检测,域名拦截检测接口(官方api)
  9. 企业工程管理系统简介 工程管理系统源码
  10. 逻辑回归模型(Logistic Regression)