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.rhkb.cn/news/20607.html

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

相关文章

剑指 Offer II 025. 链表中的两数相加

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20025.%20%E9%93%BE%E8%A1%A8%E4%B8%AD%E7%9A%84%E4%B8%A4%E6%95%B0%E7%9B%B8%E5%8A%A0/README.md 剑指 Offer II 025. 链表中的两数相加 题目描述 给定两个 非…

numpy(02 数据类型和数据类型转换)

numpy(01 入门) 目录 一、Python NumPy 数据类型 1.1 NumPy 基本类型 1.2 数据类型对象 (dtype) 1.3 具体实例 二、Numpy数据类型转换 2.1 浮点数据转换 2.2 整型数据转换 2.3 浮点数转整数 一、Python NumPy 数据类型 1.1 NumPy 基本类型 下表列举了常用 NumPy 基…

python: SQLAlchemy (ORM) Simple example using SQLite

领域层(Domain):定义了 School 实体类和 SchoolRepository 抽象基类,明确了业务实体和数据访问的契约。基础设施层(Infrastructure):通过 SQLAlchemy 实现了 SchoolRepository 类,负…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 1

第01章_Linux下MySQL的安装与使用 首先在vmware中下载centos7,实际上8更好一点,不过centos已经是时代的眼泪了,我之前已经教过了,不过是忘了,所以重新说一遍,看文档即可 2.开机前修改mac地址 &#xff0…

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

前言 ES 7.10 可能是现在比较常见的 ES 版本。但是对于一些相迭代比较慢的早期业务系统来说,ES 6.8 是一个名副其实的“钉子户”。 借着工作内升级调研的任务东风,我整理从 ES 6.8 到 ES 7.10 ELastic 重点列出的新增功能和优化内容。将分为 6 个篇幅给…

Vue前端开发-Vant组件之Button组件

Vant 有丰富的UI组件,而基础组件是全部组件的核心,基础组件中将常用的元素做了二次的开发,封装成Vant格式组件,如按钮、图片和布局等,这些封装后的Vant组件,提供了更多面向实际应用的属性和事件&#xff0c…

《机器学习数学基础》补充资料:求解线性方程组的克拉默法则

《机器学习数学基础》中并没有将解线性方程组作为重点,只是在第2章2.4.2节做了比较完整的概述。这是因为,如果用程序求解线性方程组,相对于高等数学教材中强调的手工求解,要简单得多了。 本文是关于线性方程组的拓展,供…

力扣 买卖股票的最佳时机

贪心算法典型例题。 题目 做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…

idea无法联网,离线安装插件

插件地址:https://plugins.jetbrains.com/ JetBrains Marketplace 如果无法进入,可以试试 配置hosts 3.163.125.103 plugins.jetbrains.com ip 变了,可以查询个最新的: https://tool.chinaz.com/speedtest/plugins.jetbrai…

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构,包含一系列功能要素,被分为大约20个模块 Spring核心容器:包含Core、Bean、Context、Expression Language模块 Core :其他组件的基本核心&#xff…

Spring Boot 定时任务:轻松实现任务自动化

在现代应用开发中,定时任务是一个常见的需求。比如,我们可能需要定时清理过期数据、定时发送邮件通知等。 操作流程 开启定时任务注解 在启动类添加注解EnableScheduling 设置时间(固定时间间隔) 使用 Scheduled 注解创建定时…

DeepSeek R1生成图片总结2(虽然本身是不能直接生成图片,但是可以想办法利用别的工具一起实现)

DeepSeek官网 目前阶段,DeepSeek R1是不能直接生成图片的,但可以通过优化文本后转换为SVG或HTML代码,再保存为图片。另外,Janus-Pro是DeepSeek的多模态模型,支持文生图,但需要本地部署或者使用第三方工具。…

燧光 XimmerseMR SDK接入Unity

官网SDK文档连接: RhinoX Unity XR SDK 一:下载SDK 下载链接:RhinoX Unity XR SDK 二:打开Unity项目,添加Package 1、先添加XR Core Utilties包和XR Interaction Toolkit包 2、导 2、再导入下载好的燧光SDK 三&…

vue学习笔记

结合目录,点击阅读 文章目录 案例1:第一行vue代码App.vue引入Person.vue案例:改变变量的值案例:改变对象属性值案例:toRefs进行解包案例:给名字首字母大写案例:监视变量值的变化案例&#xff1…

初学PADS使用技巧笔记(也许会继续更新)

操作意图:网上找某个芯片封装又不想自己画,再加上没经验,怎么办? 就以AC-DC芯片PN8036为例,打开嘉立创的的DFM,打开立创商城,输入PN8036,点击数据手册,然后点击直接打开…

解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器

一、引言 在机器学习的广阔领域中,算法的选择犹如为一场冒险挑选趁手的武器,至关重要。面对海量的数据和复杂的任务,合适的算法能够化繁为简,精准地挖掘出数据背后隐藏的模式与价值。机器学习领域有十大核心算法,而随…

LeetCode每日精进:225.用队列实现栈

题目链接:225.用队列实现栈 题目描述: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x…

二.数据治理流程架构

1、数据治理流程架构核心思想: 该图描绘了一个以数据标准规范体系为核心,大数据生命周期管理为主线,数据资源中心为依托,并辅以数据质量管理和大数据安全与隐私管理的数据治理流程架构。它旨在通过规范化的流程和技术手段&#x…

java_使用Spring Cloud Gateway + nacos实现跨域访问

Spring Cloud Gateway简介 Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生…

Linux中安装open-webui报sqlite版本低的解决办法

almalinux中安装好open-webui,启动服务时报如下错: RuntimeError: [91mYour system has an unsupported version of sqlite3. Chroma requires sqlite3 > 3.35.0.[0m [94mPlease visit https://docs.trychr…