当前位置: 首页 > news >正文

PEFT库和transformers库在NLP大模型中的使用和常用方法详解

PEFT(Parameter-Efficient Fine-Tuning)库是一个用于有效微调大型预训练语言模型的工具,尤其是在计算资源有限的情况下。它提供了一系列技术,旨在提高微调过程的效率和灵活性。以下是PEFT库的详细解读以及一些常用方法的总结:

PEFT库详解

  1. 参数高效微调的概念

    • PEFT旨在通过只微调模型的一部分参数(而不是整个模型)来减少计算和内存开销。这对于大型语言模型(如BERT、GPT等)尤其重要,因为它们的参数数量通常非常庞大。
  2. 常见方法

    • PEFT包括几种不同的策略,每种策略都有其适用场景和优缺点。以下是一些最常用的PEFT方法:

常用的PEFT方法总结

  1. LoRA(Low-Rank Adaptation)

    • 原理:通过在预训练模型的权重矩阵中添加低秩矩阵,LoRA将大模型的微调问题转化为对小矩阵的优化。
    • 优点:显著减少训练时所需的参数,降低计算复杂度。
    • 使用场景:适合在计算资源有限的情况下进行快速微调。
    • from transformers import AutoModelForSequenceClassification, AutoTokenizer
      from peft import LoRAConfig, get_peft_model# 加载预训练模型和分词器
      model_name = "distilbert-base-uncased"
      model = AutoModelForSequenceClassification.from_pretrained(model_name)
      tokenizer = AutoTokenizer.from_pretrained(model_name)# 配置LoRA
      lora_config = LoRAConfig(r=8,  # 低秩适配的秩lora_alpha=32,lora_dropout=0.1
      )# 应用LoRA
      lora_model = get_peft_model(model, lora_config)# 训练代码(略)
      

  2. Adapter

    • 原理:在预训练模型的不同层之间插入小型的“适配器”网络,只微调适配器参数,保留主模型的权重不变。
    • 优点:适配器可以在不同任务之间共享,大幅度减少微调时的参数数量。
    • 使用场景:适用于需要频繁在不同任务之间切换的情况。
    • from transformers import AutoModelForSequenceClassification, AutoTokenizer
      from peft import AdapterConfig, get_peft_model# 加载预训练模型和分词器
      model_name = "distilbert-base-uncased"
      model = AutoModelForSequenceClassification.from_pretrained(model_name)
      tokenizer = AutoTokenizer.from_pretrained(model_name)# 配置Adapter
      adapter_config = AdapterConfig(reduction_factor=2,non_linearity="relu"
      )# 应用Adapter
      adapter_model = get_peft_model(model, adapter_config)# 训练代码(略)
      

  3. Prefix Tuning

    • 原理:在输入序列前添加一个学习到的前缀,这个前缀在微调过程中进行优化,而主模型的参数保持不变。
    • 优点:可以实现快速微调,同时保留主模型的知识。
    • 使用场景:适合文本生成和对话系统等任务。
    • from transformers import AutoModelForCausalLM, AutoTokenizer
      from peft import PrefixTuningConfig, get_peft_model# 加载预训练模型和分词器
      model_name = "gpt2"
      model = AutoModelForCausalLM.from_pretrained(model_name)
      tokenizer = AutoTokenizer.from_pretrained(model_name)# 配置Prefix Tuning
      prefix_config = PrefixTuningConfig(prefix_length=10,  # 前缀长度task_type="text-generation"
      )# 应用Prefix Tuning
      prefix_model = get_peft_model(model, prefix_config)# 训练代码(略)
      

  4. Prompt Tuning

    • 原理:通过优化输入提示(prompt)的参数来指导模型生成所需的输出。
    • 优点:相较于传统微调方法,减少了对模型整体参数的依赖。
    • 使用场景:适用于自然语言处理中的各种任务,如文本分类和问答。
    • from transformers import AutoModelForSequenceClassification, AutoTokenizer
      from peft import PromptTuningConfig, get_peft_model# 加载预训练模型和分词器
      model_name = "distilbert-base-uncased"
      model = AutoModelForSequenceClassification.from_pretrained(model_name)
      tokenizer = AutoTokenizer.from_pretrained(model_name)# 配置Prompt Tuning
      prompt_config = PromptTuningConfig(prompt_length=5,  # 提示长度task_type="classification"
      )# 应用Prompt Tuning
      prompt_model = get_peft_model(model, prompt_config)# 训练代码(略)
      

  5. BitFit

    • 原理:只对模型的偏置参数进行微调,保持权重参数不变。
    • 优点:极大地减少了微调的参数数量,同时在许多任务中表现良好。
    • 使用场景:适用于资源受限的场景。
    • from transformers import AutoModelForSequenceClassification, AutoTokenizer
      from peft import BitFitConfig, get_peft_model# 加载预训练模型和分词器
      model_name = "distilbert-base-uncased"
      model = AutoModelForSequenceClassification.from_pretrained(model_name)
      tokenizer = AutoTokenizer.from_pretrained(model_name)# 配置BitFit
      bitfit_config = BitFitConfig()# 应用BitFit
      bitfit_model = get_peft_model(model, bitfit_config)# 训练代码(略)
      

----------------------------------------------------------------------------------------------------------------------

transformers库概述

transformers库是由Hugging Face开发的一个开源库,专门用于处理自然语言处理(NLP)任务。它提供了预训练的模型、简单的API和丰富的功能,使得使用大型语言模型变得更加方便。以下是transformers库的详解和一些最常用的方法总结。 

1. 加载模型和分词器

  • from_pretrained(model_name)
    • 用途:从Hugging Face Model Hub加载预训练模型和分词器。from_pretrained(model_name)方法用于从Hugging Face Model Hub加载预训练模型及其配置。可以通过指定模型的名称、路径或标识符来获取预训练的模型。(这里我常常自己先下载下来,不然的话huggingface社区老没办法从本地登进去)
    • 示例:model = AutoModel.from_pretrained("bert-base-uncased")

2. 分词器(Tokenizer)

  • tokenizer(text)
    • 用途:将文本转化为模型可接受的输入格式,包括分词、编码等。
    • 参数:可以设置return_tensors参数指定返回的张量格式(如"pt"表示PyTorch)。
    • 示例:inputs = tokenizer("Hello, world!", return_tensors="pt")
    • Hugging Face提供多种类型的分词器,主要包括:

      BertTokenizerBERT- 用于NLP任务的分词器- 使用WordPiece分词- 处理复杂句子和OOV词效果好
      GPT2TokenizerGPT-2- 通过from_pretrained加载- 使用Byte Pair Encoding (BPE)分词- 适合文本生成和补全
      T5TokenizerT5- 提供tokenization和编码功能- 使用SentencePiece分词- 支持多种任务,灵活性高
      RobertaTokenizerRoBERTa- 支持填充、截断和解码功能- 训练数据更丰富,取消特殊标记- 在上下文理解方面表现优秀
      AutoTokenizer多种模型- 方便集成和使用- 自动选择适合的分词器- 提高开发效率,适合快速实验
    • BertTokenizer:用于BERT模型。
    • GPT2Tokenizer:用于GPT-2模型。
    • T5Tokenizer:用于T5模型。
    • RobertaTokenizer:用于RoBERTa模型。
    • AutoTokenizer:自动选择适当的分词器,根据给定的模型名称。

3. 推理

  • model(inputs)
    • 用途:推理(Inference)是指使用训练好的模型对新输入进行预测或生成输出的过程。在自然语言处理(NLP)和深度学习中,推理是模型应用的关键步骤,通常在模型训练完成后进行。以下是推理的基本概念和过程,(在这里我理解为,推理是对经过分词处理的输入数据进行推断,输出模型的预测结果。)目的:推理的目的是对未知数据进行预测,例如分类、生成文本、回答问题等。输入与输出:推理通常接收原始输入(如文本、图像等),并输出模型的预测结果(如分类标签、生成的文本等)。
    • 示例:outputs = model(**inputs)

4. Pipeline

  • pipeline(task)
    • 用途:创建一个简化的任务接口,支持文本分类、问答、翻译等多种任务。
    • 示例:classifier = pipeline("sentiment-analysis")
    • 使用方法:result = classifier("I love this movie!")

5. Trainer

  • Trainer
    • 用途:用于模型的训练和评估,简化了训练过程。
    • 方法:
      • train():开始训练模型。
      • evaluate():评估模型在验证集上的表现。
      • save_model():保存微调后的模型。

6. 保存和加载模型

  • save_pretrained(directory)
    • 用途:将模型和分词器保存到指定目录。
    • 示例:model.save_pretrained("./my_model")
  • from_pretrained(directory)
    • 用途:从本地目录加载已保存的模型和分词器。
    • 示例:model = AutoModel.from_pretrained("./my_model")

7. 自定义数据集

  • Dataset
    • 用途:自定义数据集类,继承自torch.utils.data.Dataset,实现数据的加载和预处理。
    • 方法:
      • __len__():返回数据集大小。
      • __getitem__(idx):返回指定索引的数据样本。

8. 模型评估

  • evaluate()
    • 用途:在验证集上评估模型性能,返回各类指标(如损失、准确率等)。
    • 示例:metrics = trainer.evaluate(eval_dataset=eval_dataset)

9. 文本生成

  • model.generate()
    • 用途:用于生成文本,例如进行对话生成或续写。
    • 示例:generated_ids = model.generate(input_ids, max_length=50)

10. 模型的选择

  • AutoModelAutoModelForSequenceClassification
    • 用途:根据任务选择合适的模型架构。
    • 示例:model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")

相关文章:

PEFT库和transformers库在NLP大模型中的使用和常用方法详解

PEFT(Parameter-Efficient Fine-Tuning)库是一个用于有效微调大型预训练语言模型的工具,尤其是在计算资源有限的情况下。它提供了一系列技术,旨在提高微调过程的效率和灵活性。以下是PEFT库的详细解读以及一些常用方法的总结&…...

静止坐标系和旋转坐标系变换的线性化,锁相环线性化通用推导

将笛卡尔坐标系的电压 [ U x , U y ] [U_x, U_y] [Ux​,Uy​] 通过旋转变换(由锁相环角度 θ P L L \theta_{PLL} θPLL​ 控制)转换为 dq 坐标系下的电压 [ U d , U q ] [U_d, U_q] [Ud​,Uq​]。这个公式是非线性的,因为它涉及到正弦和余弦函数。 图片中的推导过程主要…...

AI学习指南深度学习篇-学习率衰减的变体及扩展应用

AI学习指南深度学习篇 - 学习率衰减的变体及扩展应用 在深度学习的训练过程中,学习率的选择对模型的收敛速度和最终效果有重要影响。为了提升模型性能,学习率衰减(Learning Rate Decay)作为一种优化技术被广泛应用。本文将探讨多…...

成都睿明智科技有限公司真实可靠吗?

在这个日新月异的电商时代,抖音作为短视频与直播电商的佼佼者,正以前所未有的速度重塑着消费者的购物习惯。而在这片充满机遇与挑战的蓝海中,成都睿明智科技有限公司以其独到的眼光和专业的服务,成为了众多商家信赖的合作伙伴。今…...

力扣6~10题

题6(中等): 思路: 这个相较于前面只能是简单,个人认为,会print打印菱形都能搞这个,直接设置一个2阶数组就好了,只要注意位置变化就好了 python代码: def convert(self,…...

IntelliJ IDEA 2024.2 新特性概览

文章目录 1、重点特性:1.1 改进的 Spring Data JPA 支持1.2 改进的 cron 表达式支持1.3 使用 GraalJS 作为 HTTP 客户端的执行引擎1.4 更快的编码时间1.5 K2 模式下的 Kotlin 性能和稳定性改进 2、用户体验2.1 改进的全行代码补全2.2 新 UI 成为所有用户的默认界面2.3 Search E…...

C++基础(12)——初识list

目录 1.list的简介(引用自cplusplus官网) 2.list的相关使用 2.1有关list的定义 2.1.1方式一(构造某类型的空容器) 2.1.2方式二(构造n个val的容器) 2.1.3方式三(拷贝构造) 2.1.4…...

系统架构设计师论文《论NoSQL数据库技术及其应用》精选试读

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展…...

产品经理产出的原型设计 - 需求文档应该怎么制作?

需求文档,产品经理最终产出的文档,也是产品设计最终的表述形式。本次分享呢,就是介绍如何写好一份需求文档。 所有元件均可复用,可作为管理端原型设计模板,按照实际项目需求进行功能拓展。有需要的话可分享源文件。 …...

phenylalanine ammonia-lyase苯丙氨酸解氨酶PAL功能验证-文献精读61

Molecular cloning and characterization of three phenylalanine ammonia-lyase genes from Schisandra chinensis 五味子中三种苯丙氨酸解氨酶基因的分子克隆及特性分析 摘要 苯丙氨酸解氨酶(PAL)催化L-苯丙氨酸向反式肉桂酸的转化,是植物…...

柯桥生活口语学习之在化妆品店可以用到的韩语句子

화장품을 사고 싶어요. 我想买化妆品。 어떤 화장품을 원하세요? 您想买什么化妆品。 스킨로션을 찾고 있어요. 我想买化妆水,乳液。 피부 타입은 어떠세요? 您是什么皮肤类型? 민감성 피부예요. 我是敏感性皮肤。 평소에 쓰시는 제품은 뭐예…...

Ubuntu 安装 Docker Compose

安装Docker Compose # 删除现有的 docker-compose(如果存在) sudo rm -f /usr/local/bin/docker-compose ​ # 下载最新的 docker-compose 二进制文件 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-…...

C++面试速通宝典——7

150. 数据库连接池的作用 数据库连接池的作用包括以下几个方面: 资源重用:连接池允许多个客户端共享有限的数据库连接,减少频繁创建和销毁连接的开销,从而提高资源的利用率。 统一的连接管理:连接池集中管理数据库连…...

毕业设计 大数据电影数据分析与可视化系统

文章目录 0 简介1 课题背景2 效果实现3 爬虫及实现4 Flask框架5 Ajax技术6 Echarts7 最后 0 简介 今天学长向大家介绍一个机器视觉的毕设项目 🚩基于大数据的电影数据分析与可视化系统 项目运行效果(视频): 毕业设计 大数据电影评论情感分析 &#x1…...

第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)

目录 重要信息 大会简介 组织单位 大会成员 征稿主题 会议日程 参会方式 重要信息 大会官网:www.icicml.org 大会时间:2024年11月22日-24日 大会地点:中国 深圳 大会简介 第三届图像处理、计算机视觉与机器学…...

OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录

单体项目改造为微服务 什么是微服务 服务:提供某类功能的代码 微服务:专注于提供某类特定功能的代码 而不是把所有的代码放到同一个项目里 会把一个大的项目按照一定的功能逻辑进行划分 拆分成多个子模块 每个子模块可以独立运行 独立负责一类功能 …...

【机器学习】网络安全——异常检测与入侵防御系统

我的主页:2的n次方_ 随着全球互联网和数字基础设施的不断扩展,网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁(APT),网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…...

【C语言】基础篇续

最大公约数HCF与最小公倍数LCM #include<stdio.h> int main(){int n1,n2,i,hcf,lcm;printf("Enter two numbers:");scanf("%d %d",&n1,&n2);for(i 1;i < n1 & i < n2;i){if(n1 % i 0 & n2 % i 0){hcf i;lcm (n1*n2)/hc…...

文件丢失一键找回,四大数据恢复免费版工具推荐!

丢失数据的情况虽然不经常出现&#xff0c;但一旦出现都会让人头疼不已&#xff0c;而这时候&#xff0c;要如何恢复丢失的数据呢&#xff1f;一款免费好用的数据恢复工具就派上用场了&#xff01;接下来就为大家推荐几款好用的数据恢复工具&#xff01; 福昕数据恢复 直达链…...

【学习笔记】手写一个简单的 Spring MVC

目录 一、什么是Spring MVC &#xff1f; Spring 和 Spring MVC 的区别&#xff1f; Spring MVC 的运行流程&#xff1f; 二、实现步骤 1. DispatcherServlet 1. 创建一个中央分发器 拦截所有请求 测试 2. 接管 IOC 容器 1. 创建配置文件 2. 修改 web.xml 配置文件 …...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...