如何把大模型调教成派大星?

目录

  • 主要内容
  • 模型图
  • 实验结果
      • 如何把大模型变成派大星?
      • chatglm3-6B
    • 数据集准备
      • 代码运行
      • 微调结果


  • 文章声明:非广告,仅个人体验:参考文献:https://www.aspiringcode.com/content?id=17197387451937&uid=291a2ae1546b48a7b50a0f3939d5aa7b

主要内容

  • 背景介绍:预训练语言模型(如BERT、RoBERTa等)在NLU任务上表现出色,但传统的微调方法需要更新模型的所有参数,这在训练时消耗大量内存,并且在推理时需要为每个任务保留模型参数的副本。

  • 提示调整(Prompt Tuning):与传统的微调相比,提示调整通过只调整连续的提示(prompts),而不是整个模型参数,来减少每个任务的存储和内存使用。但以往的研究表明,对于非大型预训练模型,提示调整的性能并不理想。

  • P-Tuning v2方法:文章提出了P-Tuning v2,这是一种深度提示调整方法,它通过在预训练模型的每一层添加连续提示来提高性能。这种方法在不同规模的模型和NLU任务上都表现出与微调相当的性能,同时只有0.1%-3%的参数需要调整。

  • 实验结果:P-Tuning v2在多个模型规模(从300M到10B参数)和各种NLU任务上进行了广泛的实验验证,包括简单的分类任务和难度较高的序列标记任务(如命名实体识别和抽取式问答)。实验结果显示,P-Tuning v2在性能上与微调相当,同时显著减少了训练时间和每个任务的存储成本。

  • 优化和实现细节:文章还讨论了一些关键的优化和实现细节,包括重参数化(Reparameterization)、提示长度(Prompt Length)、多任务学习(Multi-task Learning)以及分类头(Classification Head)的选择。

模型图

在这里插入图片描述
从图中可以对p-tuing v2有一个非常直观的理解了。

  • p-tuing就只是在模型的输入层添加几个虚拟的token,然后就微调这些参数,让模型适应新的任务,但是这样做效果存在一些问题。
  • p-tuing v2就是在模型的每一层都添加虚拟token,让可以训练的参数变多了,也能达到比较好的效果。
  • p-tuing v2的思路确实非常简单,但是简单有效,目前仍然是模型微调中比较流行的方法之一。

实验结果

在这里插入图片描述
可以看一下部分实验结果,FT表示全参数微调,PT表示Pp-tuing,PT-2表示p-tuing v2。

可以看到PT2虽然只有小小的改进,但是对比PT效果的提升是比较明显的。

如何把大模型变成派大星?

接下来将使用p-tuing v2的方法对chatglm3-6b进行微调,让其自身的自我认知发生改变。

chatglm3-6B

ChatGLM3-6B 是基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型开发的,是国内最流行的大模型之一。

我们可以看一下他的自我认知:

在这里插入图片描述

数据集准备

train.json的部分展示

[{"conversations": [{"role": "user", "content": "你好"}, {"role": "assistant", "content": "您好,我是派大星,一个由海绵宝宝打造的人工智能助手,请问有什么可以帮助您的吗?"}]},
{"conversations": [{"role": "user", "content": "你好呀,你叫什么名字呀"}, {"role": "assistant", "content": "您好!我是一个人工智能助手,你可以叫我派大星。很高兴见到您,请问有什么事情是我可以为您服务的呢?"}]}]

数据集格式如上,列表中的每个字典就是一段对话,也就是一条数据集。
role表明角色,user就是用户,也就是我们提的问题,assisant就是助手,也就是大模型自己
content就是各自说的话的内容。

dev.json格式也是同上。

核心代码

def load_tokenizer_and_model(model_dir: str,peft_config: Optional[PeftConfig] = None,
) -> tuple[PreTrainedTokenizer, nn.Module]:tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)if peft_config is not None:if peft_config.peft_type.name == "PREFIX_TUNING":config = AutoConfig.from_pretrained(model_dir, trust_remote_code=True)# 设置虚拟token数量config.pre_seq_len = peft_config.num_virtual_tokensconfig.use_cache = False# 模型每一层都添加虚拟tokenmodel = AutoModelForCausalLM.from_pretrained(model_dir,trust_remote_code=True,config=config,)print_model_size(model)return tokenizer, model

加载模型每一层都添加虚拟token,然后微调这些token即可。

代码运行

pip install -r requirements.txt --default-timeout=120 -i https://pypi.tuna.tsinghua.edu.cn/simplepython finetune_hf.py  data/  THUDM/chatglm3-6b  configs/ptuning_v2.yaml断点微调(从微调好3000步的基础上继续微调)
python finetune_hf.py  data/  THUDM/chatglm3-6b  configs/ptuning_v2.yaml 3000

微调结果

在这里插入图片描述
可以看到,chatglm3-6b改口了,知道自己是派大星了!

参考文献:https://www.aspiringcode.com/content?id=17197387451937&uid=291a2ae1546b48a7b50a0f3939d5aa7b


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议,概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…

异或操作解决一些问题

前提: 异或操作符合交换律,结合律(因为其根本上来抽象理解,就是查看所有项二进制数相同位是否有奇数个1,对运算结果二进制数而言,没有该位为0,有该位为1,与顺序无关)。 …

【人工智能】基于PyTorch的深度强化学习入门:从DQN到PPO的实现与解析

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 深度强化学习(Deep Reinforcement Learning)是一种结合深度学习和强化学习的技术,适用于解决复杂的决策问题。深度Q网络(DQN)和近端策略优化(PPO)是其中两种经典的算法,被广泛应用于游戏、机器人控…

windows server 2012 反向代理修改默认80端口转向3000

我们用npm start项目以后一般端口都是3000或者其他,这个方法可以直接80端口跳3000. Nginx的方法: 修改配置文件 在 Nginx 配置文件中,您需要找到默认的 server block,并将其配置为监听 80 端口,并将请求代理到 3000 端…

项目缓存之Caffeine咖啡因

文章目录 理论使用 理论 🍎缓存缓存是提升系统性能的一个不可或缺的工具,通过缓存可以避免大部分重复的请求到数据库层,减少IO链接次数,进而提升整体的响应速率;缓存工具可以分为本地缓存(如Caffeine&…

QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)

一、可能遇到的一些问题 Q1:如何禁用拖动? 在TableView下加一句代码即可: interactive: false 补充:这个属性并不专属于TableView,而是一个通用属性。很多Controls下的控件都可以使用,其主要作用就是控…

C基础上机题目51_55

51.字符数组x中存有任意一串字符;请编制函数,按给定的替代关系对数组x中的所有字符进行替代,仍存入数组x的对应的位置上,最后调用函数把结果x输出。 替代关系:f(p)p*11%256 (p是数组中某一个字符的ASCII值&#xff0c…

03-微服务搭建

1、搭建分布式基本环境 分布式组件 功能 SpringCloud Alibaba - Nacos 注册中心(服务发现/注册)、配置中心(动态配置管理) SpringCloud Alibaba - Sentinel 服务容错(限流、降级、熔断) SpringCloud …

2024强网杯--babyheap house of apple2解法

house of apple2 这次比赛看到这道题想到了用house of apple2,但是卡在了它把_IO_wfile_jumps给清零了,然后根据house of apple的调用链,我就以为做不了,其实是我对这个地方的理解不深刻。 利用_IO_wfile_overflow函数控制程序执…

Java八股(一)

目录 1.JVM、JRE、JDK之间的关系 2.static关键字作用(通俗版) 3.面向对象、面向过程 4.私有方法 5.Java代码执行与编译 6.IOC 1.JVM、JRE、JDK之间的关系 Java一次编写到处运行,可移植性好,保证这一点的就是iava虚拟机JVM …

pytest 通过实例讲清单元测试、集成测试、测试覆盖率

1. 单元测试 概念 定义: 单元测试是对代码中最小功能单元的测试,通常是函数或类的方法。目标: 验证单个功能是否按照预期工作,而不依赖其他模块或外部资源。特点: 快速、独立,通常是开发者最先编写的测试。 示例:pytest 实现单…

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址,无法连接,需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…

Vue前端开发-slot传参

slot 又称插槽,它是在子组件中为父组件提供的一个占位符,使用来表示,通过这个占位符,父组件可以向中填充任意的内容代码,这些代码将自动替换占位符的位置,从而轻松实现在父组件中控制子组件内容的需求。 作…

如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack

今天我们来聊聊如何在 Ubuntu 22.04 服务器上安装 ELK Stack,并集成 Nginx 作为 Web 服务器,同时使用 Let’s Encrypt Certbot 进行 SSL 认证。ELK Stack,包括 Elasticsearch、Logstash 和 Kibana,是一套强大的工具,用…

快速理解微服务中Sentinel怎么实现限流

Sentinel是通过动态管理限流规则,根据定义的规则对请求进行限流控制。 一.实现步骤 1.定义资源:在Sentinel中,资源可以是URL、方法等,用于标识需要进行限流的请求;(在Sentinel中,需要我们去告诉Sentinel哪些…

基于单片机的智慧小区人脸识别门禁系统

本设计基于单片机的智慧小区人脸识别门禁系统。由STM32F103C8T6单片机核心板、显示模块、摄像头模块、舵机模块、按键模块和电源模块组成。可以通过摄像头模块对进入人员人脸数据进行采集,识别成功后,舵机模块动作,模拟门禁打开,门…

llama-factory 系列教程 (七),Qwen2.5-7B-Instruct 模型微调与vllm部署详细流程实战

文章目录 介绍llama-factory 安装装包下载模型 微调模型数据集训练模型 微调后的模型推理 介绍 时隔已久的 llama-factory 系列教程更新了。本篇文章是第七篇,之前的六篇,大家酌情选看即可。 因为llama-factory进行了更新,我前面几篇文章的实…

利用Docker容器技术部署发布web应用程序

Docker是什么? docker 是一个开源的应用容器引擎,可以帮助开发者打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何…

SpringCloud框架学习(第五部分:SpringCloud Alibaba入门和 nacos)

目录 十二、SpringCloud Alibaba入门简介 1. 基本介绍 2.作用 3.版本选型 十三、 SpringCloud Alibaba Nacos服务注册和配置中心 1.简介 2.各种注册中心比较 3.下载安装 4.Nacos Discovery服务注册中心 (1) 基于 Nacos 的服务提供者 &#xf…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…