【CV2NLP】Chinese-Vicuna 中文小羊驼

news2024/12/24 6:06:29

学习一个短语!

gain proficiency in 熟练掌握

(用我最爱的文心一言造个句子)

最近羊驼家族百花齐放,赶紧学习一下 ChatBot 的背后细节。Chinese-Vicuna 中文小羊驼是基于 Vicuna 模型使用中文数据 + LORA 方案来微调的一种中文对话模型,是一个具备一些基础通用的中文知识模型,它具体能实现什么功能呢?

但是它也会附和你


接下来看看它实现的具体细节,它一个中文低GPU资源的llama+lora方案,使用一张2080Ti 即可训练该模型(当然训练的是语言大模型的很少的一些层)。它使用 BELLE 和 Guanaco 作为训练数据集;开源的这套代码使用了 PEFT's LORA interface + transformer's trainer + instruction data configuration,完成了中文版小羊驼的训练。其中 PEFT 指的是 State-of-the-art Parameter-Efficient Fine-Tuning (PEFT) methods,是一种高效的微调方法。

PEFT 是什么呢?

随着模型变得越来越大,在消费级硬件上对模型进行全部参数的微调变得不可行。此外,为每个下游任务独立存储和部署微调模型变得非常昂贵,因为微调模型与原始预训练模型的大小相同。PEFT 方法旨在解决这两个问题,PEFT 方法仅微调少量 (额外) 模型参数,同时冻结预训练 LLM 的大部分参数,从而大大降低了计算和存储成本。

其实 LORA 就属于PEFT 中的一种方式,HuggingFace 开源的一个高效微调大模型的 PEFT 库,目前包含LoRA,Prefix Tuning,Prompt Tuning,P-Tuning 四种算法。

LORA 是什么呢?

简单来说,lora 是一种轻量的网络结构,可以以插件的形式连接到大模型上(各种你不可能训动的模型,比如 llama, alpaca, guanaco),然后使用你的小数据集 finetune lora 结构,最终产出一个非常小的权重模型(大约在30M左右),那么这个 lora 模型就可以充分基于大模型的先验知识迁移到你的小数据集场景中。一般在图像生成的 Stable Fusion 中 LORA 用的比较多。随着大模型逐渐统一, lora 对于大模型的落地应用不容小觑。

LoRA 与 Transformer 的结合也很简单,仅在 QKV attention 中 QKV 的映射增加一个旁路(可看下文中具体的 LORA 网络结构),而不动MLP模块。基于大模型的内在低秩特性,增加旁路矩阵来模拟全模型参数微调,LoRA通过简单有效的方案来达成轻量微调的目的,可以将现在的各种大模型通过轻量微调变成各个不同领域的专业模型。

训练中文 vicuna 的数据集组成格式为:

{  'instruction': "用一句话描述地球为什么是独一无二的。\\\\n\\n"  'input': ""  'output': "地球上有适宜生命存在的条件和多样化的生命形式。"}

在训练过程中,通过库 datasets 来加载数据。作者使用的数据集共693987条,每一条都是如上的组织格式,下图展示了前 3 条样本的内容。

from datasets import load_dataset
DATA_PATH = ./sample/merge.jsondata = load_dataset("json", data_files=DATA_PATH)

对于数据预处理,以这样一条数据为例:

{  'instruction': '将第一段文本中的所有逗号替换为句号。\\\\n\\n\\\\n"在过去的几年中,我一直在努力学习计算机科学和人工智能。"\\\\n',  'input': '',  'output': '"在过去的几年中。我一直在努力学习计算机科学和人工智能。"'}
user_prompt 为:
'Below is an instruction that describes a task. Write a response that appropriately completes the request.\\n\\n### Instruction:\\n将第一段文本中的所有逗号替换为句号。\\\\n\\n\\\\n"在过去的几年中,我一直在努力学习计算机科学和人工智能。"\\\\n\\n\\n### Response:\\n'# 注意 user_prompt 只包含一个统一的场景描述 + 'instruction' + 'input'​​​​​​​full_tokens = tokenizer(    user_prompt + data_point["output"],    truncation=True,    max_length=256 + 1,    padding="max_length",    )["input_ids"][:-1] # 不要最后一个 <eos> token

会将 user_prompt + output 均 token 化,并且将 full_tokens pad 到固定长度 256,pad_id 为 0. 在训练和推理过程中,设置模型最大输入数据长度为 256 tokens。# 256 accounts for about 96% of the whole data.

之后这一串 ID 就是输入到模型中的东西,长度固定为 256, 包含了 user_prompt + output 信息;值得注意的是,对应输入的 label 只给了 output 部分的 ID,相当于只对 output 部分计算 loss。

类比于目标检测的训练过程,输入为目标的框的坐标,模型学习预测框的坐标;文本模型为输入文本在词表对应的 ID,模型学习预测文本在词表对应的 ID(模型输出的维度为词表长度维度,这里为 32000),最后将输出的 ID 基于词表映射,就可以得到输出的文本语句。单个样本在 token 化后的 attention_mask 为全 1,即所有的 tokens (包括 pad token)均会参与 attn 计算。

准备完数据后,看下 LORA 模型的结构组成,LLaMA是由 32 层 Transformer 组成,LORA 添加的网络结构只是在 QKV 同维度映射时添加了降维升维两个线性层,一共添加了 32*2 层额外的线性层。在训练过程中,模型学习的就是 lora_A/lora_B 这些层。

最后简单说一下 NLP 训练对于文本的处理。之前以为 NLP 非常复杂,但是看了Chinese-Vicuna的训练代码,感觉还是逻辑分明的。如果我们要训练一个 NLP 网络,我们需要先找到一个 tokenizer,能够把语言文本基于一个预先设定好的词表来映射成一个 id,这样就把文字/字符变成了数字表示,然后通过一个 nn.Embedding() 来为每一个 id 表征一个高维特征,输入到 transformer 层中的就是这些 id 对应的特征(还会通过使用 pad_token 将输入长度补全到固定长度 256/4096)。对于模型的输出,是通过一个词表长度的 FC 来得到每一个单词的输出概率。最终通过自回归的输出方式,直到预测得到 “<eos>”,就得到了模型的文本输出。

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

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

相关文章

数值分析-牛顿-柯特斯公式的概念、推导与应用

目录 一、引言 二、牛顿-柯特斯公式的基本概念 三、牛顿-柯特斯公式的推导 四、牛顿-柯特斯公式的应用 五、牛顿-柯特斯公式的优缺点 六、总结 一、引言 数值分析是数学中的一个重要分支&#xff0c;它研究如何利用数值方法来解决实际问题。在数值分析中&#xff0c;牛顿…

Redux 学习系列(一) —— 基础概念入门篇

简介 Redux 是一个可预测的 JavaScript 应用状态管理容器&#xff0c;也可以说是一个应用数据流框架。 作用 Redux 主要是用作应用状态的管理。它抽离所有组件的状态&#xff0c;构造一个中心化的单独常量状态树&#xff08;对象&#xff09;来保存这一整个应用的状态。这棵…

Java经典笔试题—day02

Java经典笔试题—day02 &#x1f50e;选择题&#x1f50e;编程题&#x1f95d;排序子序列&#x1f95d;倒置字符串 &#x1f50e;结尾 &#x1f50e;选择题 (1)A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; A a0new A(…

HTTPS协议介绍

文章目录 一、HTTPS协议的认识二、常见的加密方式1.对称加密2.非对称加密 三、数据摘要四、HTTPS的工作过程探究1.只使用对称加密2.只使用非对称加密3.双方都使用非对称加密4.非对称加密对称加密5.中间人攻击6.引入证书7.非对称加密对称加密证书认证 一、HTTPS协议的认识 HTTP…

【数据库】面试高频问题汇总及详细解答

【C语言部分】面试高频问题汇总及详细解答 【操作系统(Linux)】面试高频问题汇总及详细解答 【计算机网络】面试高频问题汇总及详细解答 本文目录 1. SQL1.1 介绍一下数据库分页1.2 介绍一下SQL中的聚合函数1.3 表跟表是怎么关联的1.4 说一说你对外连接的了解1.5 说说SQL中怎么…

VM虚拟机安装Ubuntu server 22.04网络问题

在使用vm虚拟机安装ubuntu server 22.04的时候会遇到一些网络问题&#xff0c;例如虚拟机内的Ubuntu不能上网&#xff0c;ping www.baidu.com不通&#xff0c;主机使用远程工具不能建立远程连接&#xff0c;Ubuntu ping本地主机不通&#xff0c;本地主机ping虚拟机也不通的问题…

vue3+vite项目优化。

最近开发的一个vue3vitets项目&#xff0c;build后发现体积过大&#xff0c;所以针对于项目体积进行一次优化。 一: 使用rollup-plugin-visualizer 可视化分析包 npm i rollup-plugin-visualizer -S 在vite.config.js中引入 在 plugins里面 然后执行npm run build就自动打开…

最新开源Chatgpt人工智能对话源码系统如何搭建?含详细安装教程分享和源码

人工智能对话系统市场需求正在不断增长。随着人们对智能化、自动化服务的需求不断提高&#xff0c;人工智能对话系统成为越来越多企业和组织的首选解决方案&#xff0c;可以有效提升用户体验、降低成本、提高效率。 一、Chatgpt人工智能对话源码系统定义 ChatGPT是一种基于深…

流量挂机赚钱项目Traffmonetizer

利用闲置电脑/服务器/安卓手机/树莓派来赚点电费 简介 Traffmonetizer是一个来自欧洲的流量挂机平台&#xff0c;类似Peer2profit&#xff0c;满10刀可提现(Paypal、BTC、Payoneer)&#xff0c;注册好像就送5刀&#xff0c;Traffmonetizer不怎么占用CPU和内存以及流量&#x…

初学容器化

1.docker build&#xff0c;ship&#xff0c;run&#xff0c;any app anywhere docker类似运输中的集装箱&#xff0c;可以装任何应用&#xff08;镜像文件&#xff09;&#xff0c;运行到各种服务器上。 docker提供的是进程上的隔离&#xff0c;虚拟机提供的是操作系统资源…

【五一创作】嵌入式Sqlite数据库【基本语法、Sqlite-JDBC、嵌入到Java程序】

目录 前言 基本介绍 Sqlite 对比 MySQL 字段类型 语法 创建表 插入数据 更新数据 查询数据 删除数据 查看建表语句 Sqlite-JDBC 嵌入到Java程序 前言 最近在用JavaFX做一个桌面软件需要用到数据库&#xff0c;但MySQL这种数据库明显只能本地访问&#xff0c;把软…

JVM-0502

垃圾回收 概述 内存的自动分配 垃圾收集&#xff0c;不是J8Va语音的件生产物。早在1968年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题&#xff1a; 哪些内存需要回收&#xff1f;什么时候回收&#xff1f;&#xff08;…

双金属复合圆管层间高温接触热阻测试方法的分析和选择

摘要&#xff1a;双金属复合圆管因其优越的特性在越来越多的领域得到广泛应用&#xff0c;而其层间接触热阻是这种圆管作为换热管时的重要性能指标。本文针对这种双金属复合圆管层间接触热阻的测试需求&#xff0c;分析和对比了现有用于接触热阻测试的各种稳态和瞬态方法&#…

网络应用基础 ——(2023新星计划文章一)

一&#xff0c;网络的概念 1.1网络及其带来的好处 &#xff08;1&#xff09;计算机网络是指通过通信设备和通信线路将多台计算机连接起来&#xff0c;以便实现资源共享、信息传递和协同工作的技术和系统。计算机网络是现代信息技术的重要组成部分&#xff0c;已经深入到我们…

代码随想录算法训练营第三十一天 | 贪心1,想不到怎么找局部最优就做不出来

贪心算法理论基础 代码随想录 (programmercarl.com) 贪心算法理论基础&#xff01;_哔哩哔哩_bilibili 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 例如&#xff0c;有一堆钞票&#xff0c;你可以拿走十张&#xff0c;如果想达到最大的金额&#xff…

代码随想录刷题笔记3

文章目录 回溯细节模板题型组合分割子集排列棋盘问题N皇后问题解数独问题 其他 总结 回溯 本质上&#xff1a;穷举 剪枝。回溯法就是解决这种k层for循环嵌套的问题。 for循环横向遍历&#xff0c;递归纵向遍历&#xff0c;回溯不断调整结果集。 注意画出 解空间树-N叉树。 细…

无云服务器,Linux本地快速搭建web网站,并内网穿透发布上线(1)

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章&#xff1a;Linux CentOS本地搭建…

【QT】 Qt高级——Qt自定义标题栏

【QT】 Qt高级——Qt自定义标题栏 一、Qt自定义标题栏简介 QWidget及其子类窗体组件的标题栏受操作系统的控制&#xff0c;即标题栏的界面风格与操作系统的主题风格相同&#xff0c;工程实践中需要开发者自行定义&#xff0c;达到美化应用程序界面的目的。 二、Qt自定义标题…

每日学术速递5.1

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Putting People in Their Place: Affordance-Aware Human Insertion into Scenes 标题&#xff1a;把人放在他们的位置&#xff1a;可供感知的人类插入场景 作者&#xff1a;Sumit…

项目管理:项目进度跟踪的好处有哪些?

项目进度跟踪主要针对项目计划、任务和项目成员三个方面&#xff0c;即为了了解整个项目计划完成情况、了解项目的实际进展情况、解成员工作完成情况。 项目跟踪可以证明计划是否可执行&#xff0c;可以说明计划是否可以被完成。 在项目执行过程中&#xff0c;我们也可以通过跟…