nlp|微调大语言模型初探索(2),训练自己的聊天机器人

前言

  上篇文章记录了具体的微调语言大模型步骤,以及在微调过程中可能遇见的各种报错,美中不足的是只是基于开源数据集的微调,今天来记录一下怎么基于自己的数据集去微调大语言模型,训练自己的智能机器人!!!!

1.微调数据集介绍

  了解数据集的种类及其标注格式对于模型的微调至关重要。不同的数据集有不同的训练目标和标注方式,这些差异决定了模型学习的重点微调策略的选择。通过深入理解数据集的结构和目标,能够帮助我们更精准地制定微调计划,优化模型的表现,并提升其在实际应用中的效果。

1.1 Alpaca 格式

[{"instruction": "输入三支篮球队的名称并生成一个适当的口号。","input": "输入:俄克拉荷马城雷霆队,芝加哥公牛队,布鲁克林网队。","output": "输出: \"雷霆,公牛和网队:各显神通,角逐群雄!\""},...
]

这种格式很好理解,一共就三部分instruction、input和output。
instruction: 任务的指令,告诉模型需要完成什么操作。
input: 任务所需的输入。如果任务是开放式的或者不需要明确的输入,这一字段可以为空字符串。
output: 任务的期望输出,也就是模型在给定指令和输入情况下需要生成的内容。
侧重提升模型各种自然语言处理任务,适合来微调大模型做文本生成、翻译、总结等任务

1.2 DPO 格式

[{"conversations": [{"from": "human","value": "为印度国家投资促进与便利机构的银行、金融服务、保险(BFSI)和金融科技团队的面试候选人创建一个案例研究任务。该团队的使命是支持外国投资进入印度的BFSI领域,并就该领域的产业参与者的政策建议和问题进行工作。"}],"chosen": {"from": "gpt","value": "标题:支持外国投资在BFSI领域:印度国家投资促进和便利机构的案例研究\n\n目标:\n要求候选人创建一个全面的案例研究..."},"rejected": {"from": "gpt","value": "让我们了解为BFSI团队面试候选人创建案例研究作业的要求。"}},...
]

from: 字段指示消息的来源,可以是 “human” 或 “gpt”,表示输入是由人类或模型提供。
value: 字段包含消息的具体内容,可能是输入文本、模型选择的输出或被拒绝的输出。
chosen: 中的内容是模型最终认为最合适的回应。
rejected: 中的内容是模型认为不合适的候选回应。
DPO可以通过调整回答的偏好来生成更符合用户需求的回复,适合微调大模型来做用户偏好回答。

1.3 ShareGPT 格式

[{"conversations": [{"role": "user","content": "What is the capital of France?"},{"role": "assistant","content": "The capital of France is Paris."},{"role": "user","content": "Can you tell me more about Paris?"},{"role": "assistant","content": "Paris is the largest city and the capital of France. It is known for its art, culture, and history..."}]}...
]

role: 表示对话的角色,通常为“user”表示用户,“assistant”表示AI助手。
content: 具体的对话内容
ShareGPT 适合对话场景,更贴近人类与 AI 交互的方式,适用于构建和微调对话模型。
Q1.为什么这么多格式的数据集,统一数据集岂不是更方便?
  我的理解是,不同类型格式的数据集对模型性能的提升不同,比如说DPO 侧重于根据用户偏好调整模型的输出,使其更符合个性化需求,而Alpaca 侧重于通过少量高质量的训练数据提升模型的指令跟随能力和高效训练。

2.制作微调数据集

我这里基于gpt,根据Alpaca 格式去生成json数据集:

from docx import Document
from chat_test import get_response
import json
from tqdm import tqdmdef extract_json_from_string(input_str):# 使用正则表达式提取[]里的内容,包括大括号head_pos = input_str.find("[")tail_pos = input_str.find("]")if head_pos != -1 and tail_pos != -1:return json.loads(input_str[head_pos:tail_pos + 1])  # 包括']',所以尾部索引需要+1else:return None  # 如果没有找到[],返回Nonepath = 'F:/Desktop/docs/xxx.docx'
doc = Document(path)
text = ""
data_json = []
file = open("alpaca_zh_mydata1.json", "w", encoding="utf-8")
for para in tqdm(doc.paragraphs):if para.text == "":# print("=============None")continue# print(para.text)text = text + para.text + "\n"# print(len(text))if len(text) >= 2000:text = text + " 根据上述信息,将其制作成alpaca数据集。包括instruction、input和output"res = get_response(text)# print(res)json_str = Nonetry:json_str = extract_json_from_string(res)except:print("extract_json_from_string run error")if json_str is None:text = ""continuedata_json = data_json + json_strjson.dump(data_json, file, ensure_ascii=False, indent=2)
file.close()

其中get_response函数为chatgpt的api接口,可以根据自己的需求去封装。
如图所示,生成的数据集是这样的:
在这里插入图片描述

3.开始微调数据集

3.1 将生成json文件放到LLaMA-Factory/data/

在这里插入图片描述

3.2 修改LLaMA-Factory/data/dataset_info.json文件

在这里插入图片描述

3.3 修改LLaMA-Factory/data/dataset_info.json文件

开始微调大模型:

conda activate lora-llama
cd LLaMA-Factory
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

在这里插入图片描述

参考文章
大模型微调——训练数据集的格式Alpaca 和 ShareGPT

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

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

相关文章

Java 大视界 -- 量子计算时代 Java 大数据的潜在变革与应对策略(88)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

手机功耗BugReport字段含义介绍

BugReport一般用来分析功耗问题,例如休眠待机,后台待机,游戏,视频,相机场景等 BugReport字段含义介绍 BugReport字段 含义 备注 Reboot 设备的重启事件 CPU running CPU运行状态,休眠 或者 唤醒 只有…

什么是 近端策略优化算法PPO

什么是 近端策略优化算法PPO 近端策略优化算法(Proximal Policy Optimization,PPO)是OpenAI公司于2017年开发的一系列无模型强化学习算法,用于优化策略网络以最大化累计奖励。以下是具体介绍及示例: 算法原理 策略梯度:PPO基于策略梯度算法,通过估计策略网络的梯度来更…

计算机视觉-局部特征

一、局部特征 1.1全景拼接 先用RANSAC估计出变换,就可以拼接两张图片 ①提取特征 ②匹配特征 ③拼接图像 1.2 点的特征 怎么找到对应点?(才能做点对应关系RANSAC) :特征检测 我们希望找到的点具有的特征有什么特…

个人搭建CDN加速服务 特网科技

在互联网快速发展的今天,网站的加载速度对用户体验有着至关重要的影响,传统的网页加载方式依赖于服务器的性能和网络环境,这使得某些网站的页面加载时间过长,用户体验不佳,为了解决这个问题,许多企业开始采…

类型通配符上限

主函数 package typeWildcardTop;import java.util.ArrayList;public class typeWildcardTopTest {/**/public static void main(String[] args) { // test1();test2();}/*测试showList接收ArrayList类型 ArrayList接收各种类型参数创建animals cats mincats集合 传入s…

OpenCV(1):简介、安装、入门案例、基础模块

1 OpenCV 简介 OpenCV 是一个功能强大、应用广泛的计算机视觉库,它为开发人员提供了丰富的工具和算法,可以帮助他们快速构建各种视觉应用。随着计算机视觉技术的不断发展,OpenCV 也将会继续发挥重要的作用。OpenCV 提供了大量的计算机视觉算法…

FTP自动上传/vue打包自动上传

ftp自动上传 在我们平时开发项目时,需要将本地代码编译后上传到服务器,我们可以借助Node.js库中的ssh2来实现自动上传 首先我们先来说下ssh2的安装和使用 安装ssh2 npm install ssh2创建ssh2实例 const { Client } require(ssh2);连接服务器 const c…

SQL复习

SQL复习 MySQL SQL介绍 SQL SQL的全拼是什么? SQL全拼:Structured Query Language,也叫结构化查询语言。 SQL92和SQL99有什么区别呢? SQL92和SQL99分别代表了92年和99年颁布的SQL标准。 在 SQL92 中采用(&#xff…

nlp|微调大语言模型初探索(1),LLaMA-Factory

前言 微调模型通常比从零开始训练一个模型的技术要求低。公司不需要拥有大量的深度学习专家,利用现有的开源工具和库(如Hugging Face的Transformers等),中小型公司可以轻松地使用和微调大型模型,从而快速实现AI能力的集…

软件定义汽车时代的功能安全和信息安全

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下,企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构,通过统一的内容资源池与智能化管理工具,重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒,…

【探商宝】:大数据与AI赋能,助力中小企业精准拓客引

引言:在数据洪流中,如何精准锁定商机? 在竞争激烈的商业环境中,中小企业如何从海量信息中快速筛选出高价值客户?如何避免无效沟通,精准触达目标企业? 探商宝——一款基于大数据与AI技术的企业信…

springboot接入ShardingJDBC

ShardingJDBC 是 Apache ShardingSphere 的一个子项目,它是一个开源的分库分表中间件,提供了透明化的数据分片、分布式事务和数据库治理等功能。ShardingJDBC 以 JDBC Driver 的形式提供,支持任何基于 JDBC 的 ORM 框架、持久层框架和数据库连…

Dify平台搭建面试机器人

无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能…

Django创建一个非前后端分离平台

1.pub_blog前端创立 1.blog/pub路由 注意两个路由的区别 2.完善页面 用表单实现 3.加载wangeditor的几个文件 4.配置样式 5.配置js代码,单独放在js文件夹中,js文件夹pub_blog onload事件,加载完成后会再加载 5.提交按钮

什么情况下索引会失效

一、索引创建的原则 1、针对数据量较大,且查询比较频繁的表建立索引。 单表超过10万数据,即可增加索引 2、使用经常作为查询条件(where)、排序(order by)、分组(group by)操作的字…

内容中台重构企业内容管理流程驱动智能协作升级

内容概要 内容中台作为企业数字化转型的核心基础设施,通过技术架构革新与功能模块整合,重构了传统内容管理流程的底层逻辑。其核心价值在于构建动态化、智能化的内容生产与流转体系,将分散的创作、存储、审核及分发环节纳入统一平台管理。基…

用deepseek学大模型04-模型可视化与数据可视化

deepseek.com: pytorch可视化工具 生成神经网络图 在 PyTorch 中,可视化神经网络结构的常用工具和方法有以下几种,以下将详细介绍它们的用法: 1. TensorBoard (PyTorch 官方集成) PyTorch 通过 torch.utils.tensorboard 支持 TensorBoard&a…

JavaScript设计模式 -- 外观模式

在实际开发中,往往会遇到多个子系统协同工作时,直接操作各个子系统不仅接口繁琐,还容易导致客户端与内部实现紧密耦合。**外观模式(Facade Pattern)**通过为多个子系统提供一个统一的高层接口,将复杂性隐藏…