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

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

大家好,我是对白。


今天要给大家推荐一下我校计算机系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工具包


a319c5fa908af4a3077e7f72a48fa184.gif


图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研究快人一步!


64db7414abcdc5ecb428530fe57fda4c.png


图2 OpenPrompt工具包结构图


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


44212a52e9190e492b4019d442e9db5c.png


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


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


上手教程:



使用OpenPrompt


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


c96f794eef85b9f124977cd1aa1cbf33.png


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


第一步:定义任务


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


c468bd7fe4893641066a7110759a4006.png


第二步:选择预训练模型


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


32363a0c5a24aacef26a7ca288a7a05b.png


第三步:定义模板(Template)


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


d76e11a39bbdae5d5462c74a82300b3b.png


第四步:定义映射(Verbalizer)


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


8bd433a3968bec61195f30eec3229cd2.png


第五步:定义PromptModel


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


e92946037eb421ffa4fc6696f717765b.png


接下来就可以进行训练了!训练的流程和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.


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


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


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


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


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


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


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


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


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


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


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


相关文章
|
数据可视化 Ubuntu Linux
研发实用工具,推荐一款代码统计神器GitStats
研发实用工具,推荐一款代码统计神器GitStats
2153 0
研发实用工具,推荐一款代码统计神器GitStats
|
8月前
|
机器学习/深度学习 人工智能 安全
正式发布!一文总览《中国人工智能应用发展报告(2025)》
阿里云研究院联合央视频等机构发布《中国人工智能应用发展报告(2025)》,全面分析人工智能技术趋势与产业应用,涵盖六大技术创新、五类落地场景、四力评估体系及百个创业案例,提出“五位一体”发展建议,推动AI成为新质生产力的核心引擎。
1763 0
|
人工智能 算法 机器人
开源极客桌面机器人 Desk-Emoji
Desk-Emoji 是一款开源的实体 AI 桌面陪伴机器人,具备酷炫外观、流畅 Emoji 表情、双自由度云台及大模型语音聊天功能,支持手势识别和情绪反馈,适合 DIY 和二次开发,是性价比极高的桌面机器人。
3140 1
开源极客桌面机器人 Desk-Emoji
|
存储 人工智能 自然语言处理
Github上的十大RAG(信息检索增强生成)框架
信息检索增强生成(RAG)是一种结合了检索系统和生成模型优势的技术,能够显著提升大型语言模型的性能。RAG通过从外部知识库中检索相关信息,增强模型的输入,从而生成更加准确、符合上下文、实时更新的响应。GitHub上涌现出多个开源RAG框架,如Haystack、RAGFlow、txtai等,每个框架都有独特的功能和特性,适用于不同的应用场景。这些框架不仅提高了模型的准确性和可靠性,还增强了过程的透明度和可解释性。
2031 2
|
应用服务中间件 Docker 容器
如何在Docker容器和主机之间复制文件/文件夹
如何在Docker容器和主机之间复制文件/文件夹
|
Java 编译器 Maven
【颠覆你的认知!】当Quarkus邂逅GraalVM本机镜像,应用启动竟快到飞起——背后的技术秘密等你揭秘!
Quarkus框架因轻量级与高性能而在Java开发社区广受关注。结合GraalVM使用能显著提升应用启动速度与运行效率,这得益于GraalVM的本机镜像支持。本文将介绍如何利用Quarkus和GraalVM构建高效应用,并提供示例代码演示具体步骤。首先需安装GraalVM环境并配置Maven支持构建本机镜像。接着创建一个简单的RESTful服务端点作为示例,通过命令行编译生成本机可执行文件并运行。这种方式能够大幅提升应用性能,但需注意构建时间和部分Java特性兼容性问题。
410 1
|
存储 机器学习/深度学习 Web App开发
秒懂算法 | DP 概述和常见 DP 面试题
动态(DP)是一种算法技术,它将大问题分解为更简单的子问题,对整体问题的最优解决方案取决于子问题的最优解决方案。本篇内容介绍了 DP 的概念和基本操作;DP 的设计、方程推导、记忆化编码、递推编码、滚动数组以及常见的 DP 面试题。
1125 0
秒懂算法 | DP 概述和常见 DP 面试题
|
数据采集 存储 数据可视化
SharePoint List
【6月更文挑战第10天】
351 1
|
机器学习/深度学习 人工智能 自然语言处理
Prompt提示词的精华点缀,这一篇文章就懂了!
Prompt提示词的精华点缀,这一篇文章就懂了!
473 0
|
存储 编解码 算法
LabVIEW如何实现多张图拼接
LabVIEW如何实现多张图拼接
422 0

热门文章

最新文章