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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介: 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.


相关文章
|
6月前
|
人工智能 自然语言处理 安全
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架【2月更文挑战第2天】
探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
🔍 Prompt、RAG、Fine-tuning三者各自的优势是什么?
【10月更文挑战第15天】在人工智能模型的开发中,Prompt、RAG(检索增强生成)和Fine-tuning是三种常见的优化技术。Prompt通过少量示例引导模型生成特定输出,简单灵活;RAG结合检索和生成,适合需要大量外部知识的场景,提高答案准确性和可解释性;Fine-tuning通过特定任务或数据集训练模型,提升特定场景下的表现,适用于有大量数据和计算资源的场景。开发者需根据具体需求选择最合适的优化策略。
47 4
|
5月前
|
机器学习/深度学习 移动开发 自然语言处理
大模型Prompt-Tuning技术入门(二)
Prompt-Tuning是一种在大型语言模型中进行下游任务适配的技术,起源于GPT-3的In-context Learning和Demonstration Learning。它通过构建Prompt(提示)和Verbalizer(标签映射)来转换任务,比如将分类任务转化为填空问题。PET模型是Prompt-Tuning的早期实践,通过固定模板(Pattern)和标签词(Verbalizer)来实现。Prompt-Oriented Fine-Tuning是Prompt-Tuning的一种形式,将任务转换为与预训练任务相似的形式,如BERT的MLM任务。
|
4月前
|
SQL 缓存 测试技术
DeepMind的新论文,长上下文的大语言模型能否取代RAG或者SQL这样的传统技术呢?
DeepMind的LOFT基准测试挑战了长上下文大型语言模型(LCLLMs)的效用,包括Gemini、GPT-4o和Claude 3 Opus。
83 1
|
5月前
|
存储 机器学习/深度学习 自然语言处理
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
|
5月前
|
机器学习/深度学习 自然语言处理 算法
大模型Prompt-Tuning技术入门(一)
Prompt-Tuning是NLP领域的新兴技术,旨在减少预训练模型Fine-Tuning的需要。它通过构造提示(Prompt)使预训练模型能适应各种任务,降低了语义偏差和过拟合风险。Prompt作为任务的“提示词”,可以是人工定义、自动搜索或生成的模板,与预训练的MLM头结合使用,只需少量甚至无标注数据,通过标签词映射进行预测。此方法从GPT-3的In-Context Learning发展至今,包括了连续Prompt、大规模模型的Instruction-tuning和Chain-of-Thought等进展。 Prompt-Tuning是向少监督、无监督学习迈进的关键研究。
|
4月前
|
机器学习/深度学习 人工智能 算法
【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍
【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍
|
6月前
|
API 算法框架/工具 异构计算
Python中Keras微调Google Gemma:定制化指令增强大语言模型LLM
Python中Keras微调Google Gemma:定制化指令增强大语言模型LLM
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
再超Transformer!Google提出两个新模型(Griffin、Hawk),强于Mamba,更省资源
【2月更文挑战第15天】再超Transformer!Google提出两个新模型(Griffin、Hawk),强于Mamba,更省资源
265 1
再超Transformer!Google提出两个新模型(Griffin、Hawk),强于Mamba,更省资源
|
6月前
|
人工智能 iOS开发 MacOS
Ollama--本地大语言模型LLM运行专家
Ollama--本地大语言模型LLM运行专家
1958 2