【AGI】大模型微调数据集准备
【AGI】大模型微调数据集准备
- (1)模型内置特殊字符及提示词模板
- (2)带有系统提示和Function calling微调数据集格式
- (3)带有思考过程的微调数据集结构
- (4)Qwen3混合推理模型构造微调数据集基本方法
如何创建和选取模型微调数据集,是决定模型微调效果成败的最关键因素,截止目前,已经诞生了各类不同的微调框架和海量的微调数据集,在绝大多数情况下,我们只需要选择不同的微调框架并搭配不同的数据集即可。但伴随着模型能力越来越复杂,包括现阶段很多模型具备了Function calling功能,甚至是具备了推理或者混合推理能力,此时如果希望进行一些复杂功能模型的微调,例如围绕Qwen3模型进行Function calling能力微调、同时还需保留其混合推理能力,此时很多公开数据集或许就无法满足要求了。此外,如果我们希望给模型进行特定领域的知识关注,或者提升模型对于特殊工具组的工具调用准确率,此时就需要手动创建微调数据集了。
而要手动合并或者创建微调数据集,就必须深入了解微调数据集构造背后的原理。本小节内容,就为大家详细介绍创建微调数据集背后的底层原理。
(1)模型内置特殊字符及提示词模板
其实最快速了解构造数据集的方法,是从模型底层原理入手。对于当代大模型来说,普遍需要通过一些特殊字符来标记用户的不同类型输入、系统提示词、以及工具调用或者多模态输入等。而在实际对话过程中,模型对于用户的输入输出是这么进行识别的(以Qwen3为例),一次简答的问答,模型的真实输入和输出如下所示:
其中<|im_start|>
代表文本开始,而user
则代表消息身份,用于构建多轮对话,而<|im_end|>
则代表文本结束,即用户输入结束,而<|im_start|>
代表新一段文本开始,assistant
代表接下来由模型创建消息,而<|im_end|>
同样代表模型创建消息的结束。
而模型其实是通过这样一组特殊字符标记来规范自己的行为,判断当前消息类型,以及通过输出特殊标记来确定停止时间。对于绝大多数模型,我们可以在模型的tokenizer_config.json
中看到完整的特殊标记符(以及系统提示词模板):
而在实际微调过程中,我们都知道需要有监督的数据集、也就是需要输入QA对来进行微调。以著名的alpaca_zh中文微调数据集来说,其基本格式如下:
其中的input和output就是输入和输出。例如如下对话:
就可以表示为下列json格式数据集:
{"instruction": "","input": "输入:你好。","output": "输出:你好,有什么可以帮到你的?"},
而在真实的微调过程中,如果是针对Qwen3进行微调,微调脚本会将这条数据集(无论什么格式)转化为如下格式:
<|im_start|>user\n你好<|im_end|>\n<|im_start|>assistant\n你好,有什么可以帮到你的?<|im_end|>
而在实际训练过程中,模型就会根据assistant前的内容,学习assistant后面的输出内容。
(2)带有系统提示和Function calling微调数据集格式
在很多场景下,我们还会发现一些带有instruction
字段的微调数据集,那instruction
字段是如何带入到微调过程中的呢?
答案非常简单,还是依靠特殊字符。例如有一个对话内容如下:
- 系统提示词(instruction):你是一名助人为乐的助手。
- 用户输入(input):你好,好久不见。
- 助手回复(output):是的呀,好久不见,最近有什么有趣的事情要和我分享么?
此时模型的输入和输出如下:
<|im_start|>system
你是一名助人为乐的助手。<|im_end|>
<|im_start|>user
你好,好久不见。<|im_end|>
<|im_start|>assistant
是的呀,好久不见,最近有什么有趣的事情要和我分享么?<|im_end|>
即会通过<|im_start|>system...<|im_end|>
来标记系统提示词。实际进行微调时,模型会根据assistant为界,学习assistant之前的文本输入情况下应该如何输出。
更进一步的,如果对话过程中带入了Function calling,此时首先模型会读取提前准备好的tool schema(也可能是自动生成的,例如MCP即可自动创建tool schema):
tool_schema = [{"name": "get_weather","description": "查询指定城市的天气信息","parameters": {"type": "object","properties": {"location": {"type": "string","description": "要查询天气的城市名称"}},"required": ["location"]}
}]
而假设我们的对话内容如下:
- 系统提示词(instruction):你是一名助人为乐的助手。当用户查询天气的时候,请调用get_weather函数进行天气信息查询。
- 用户输入(input):你好,请帮我查询下北京天气。
- 助手回复(output):{“name”: “get_weather”, “arguments”: {“location”: “北京”}}
此时回复内容就是一条Function call message
而此时模型真实的输入和输出内容如下:
<|im_start|>system
你是一名助人为乐的助手。当用户查询天气的时候,请调用get_weather函数进行天气信息查询。# ToolsYou may call one or more functions to assist with the user query.You are provided with function signatures within <tools></tools> XML tags:
<tools>
{"name": "get_weather", "description": "查询指定城市的天气信息", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "要查询天气的城市名称"}}, "required": ["location"]}}
</tools>For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
<|im_end|>
<|im_start|>user
你好,请帮我查询下北京天气。<|im_end|>
<|im_start|>assistant
<tool_call>
{"name": "get_weather", "arguments": {"location": "北京"}}
</tool_call><|im_end|>
接下来在进行训练时,模型同样根据assistant前的内容,学习assistant后面的输出内容。不过需要注意的是,由于高效微调调整的参数量较少,因此只能优化模型的Function calling能力,并不能从无到有让模型学会Function calling。
(3)带有思考过程的微调数据集结构
而如果是带有思考链,则一个简单的问答数据如下:
- 系统提示词(instruction):你是一名助人为乐的助手。
- 用户输入(input):你好,好久不见。
- 助手回复(output):好的,用户发来“你好,好久不见!”,我需要回应。首先,用户可能希望得到亲切的回应,所以应该用友好的语气。/n是的呀,好久不见,最近有什么有趣的事情要和我分享么?
此时模型真实的内部输入和输出结果如下:
<|im_start|>system
你是一名助人为乐的助手。<|im_end|>
<|im_start|>user
你好,好久不见。<|im_end|>
<|im_start|>assistant
<think>
好的,用户发来“你好,好久不见!”,我需要回应。首先,用户可能希望得到亲切的回应,所以应该用友好的语气。
</think>是的呀,好久不见,最近有什么有趣的事情要和我分享么?<|im_end|>
模型同样根据assistant前的内容,学习assistant后面的输出内容。也就是说,所谓的思考过程,本质上其实是一种文本响应格式,通过模型训练而来。
最后难度升级,假设是带有思考过程、系统提示词的Function calling流程呢?此时一次对话的基本数据结构如下:
内容如下:
- 系统提示词(instruction):你是一名助人为乐的助手。当用户查询天气的时候,请调用get_weather函数进行天气信息查询。
- 用户输入(input):你好,请帮我查询下北京天气。
- 助手回复(output):好的,用户问北京今天的天气,我应该尝试调用工具get_weather,并将参数设置为北京。/n{“name”: “get_weather”, “arguments”: {“location”: “北京”}}
而此时模型的真实输入和输出如下:
<|im_start|>system
你是一名助人为乐的助手。当用户查询天气的时候,请调用get_weather函数进行天气信息查询。# ToolsYou may call one or more functions to assist with the user query.You are provided with function signatures within <tools></tools> XML tags:
<tools>
{"name": "get_weather", "description": "查询指定城市的天气信息", "parameters": {"type": "object", "properties": {"location": {"type": "string", "description": "要查询天气的城市名称"}}, "required": ["location"]}}
</tools>For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
<|im_end|>
<|im_start|>user
你好,请帮我查询下北京天气。<|im_end|>
<|im_start|>assistant
<think>
好的,用户问北京今天的天气,我应该尝试调用工具 get_weather,并将参数设置为北京。
</think><tool_call>
{"name": "get_weather", "arguments": {"location": "北京"}}
</tool_call><|im_end|>
模型同样根据assistant前的内容,学习assistant后面的输出内容。由此可见,模型拥有不同功能的背后,其实源于不同格式的训练数据集的训练。而对于Qwen3这种模型来说,同时拥有Function calling、混合推理等功能,属于功能非常复杂的模型了。在实际微调过程中,稍有不慎就会令其丧失原有能力。
(4)Qwen3混合推理模型构造微调数据集基本方法
在了解了微调数据集结构背后的基本原理后,接下来的问题是应该如何构造微调数据集呢?一般来说我们可以在huggingface、ModelScope或llama-factory中挑选合适的数据集,并根据实际情况进行组装。例如围绕Qwen3模型的高效微调,为了确保其仍然保留混合推理能力,我们可以考虑在微调数据集中加入如普通对话数据集FineTome(https://huggingface.co/datasets/mlabonne/FineTome-100k),以及带有推理字段的数学类数据集OpenMathReasoning(https://huggingface.co/datasets/nvidia/OpenMathReasoning),并围绕这两个数据集进行拼接,从而在确保能提升模型的数学能力的同时,保留非推理的功能。同时还需要在持续微调训练过程中不断调整COT数学数据集和普通文本问答数据集之间的配比,以确保模型能够在提升数学能力的同时,保留混合推理的性能。
相关文章:

【AGI】大模型微调数据集准备
【AGI】大模型微调数据集准备 (1)模型内置特殊字符及提示词模板(2)带有系统提示和Function calling微调数据集格式(3)带有思考过程的微调数据集结构(4)Qwen3混合推理模型构造微调数据…...

新能源汽车制动系统建模全解析——从理论到工程应用
《纯电动轻卡制动系统建模全解析:车速-阻力拟合、刹车力模型与旋转质量转换系数优化》 摘要 本文以纯电动轻卡为研究对象,系统解析制动系统建模核心参数优化方法,涵盖: 车速-阻力曲线拟合(MATLAB实现与模型验证&…...
【Linux驱动】Linux 按键驱动开发指南
Linux 按键驱动开发指南 1、按键驱动开发基础 1.1. 按键驱动类型 Linux下的按键驱动主要有两种实现方式: 输入子系统驱动:最常用,通过input子系统上报按键事件 字符设备驱动:较少用,需要自己实现文件操作接口 1.…...
湖北理元理律师事务所:债务管理的社会价值探索
债务问题从来不是孤立的经济事件,其背后牵涉家庭稳定、社会信用体系乃至区域经济发展。湖北理元理律师事务所通过五年服务数据发现:科学债务规划可使单个家庭挽回约23%的可支配收入,间接降低离婚率、心理健康问题发生率等社会成本。 债务优化…...

【Bluedroid】蓝牙HID DEVICE 报告发送与电源管理源码解析
本文基于Android蓝牙协议栈代码,深度解析HID设备(如键盘、鼠标)从应用层发送输入报告到主机设备的完整流程,涵盖数据封装、通道选择、L2CAP传输、电源管理四大核心模块。通过函数调用链(send_report → BTA_HdSendRepo…...
04、基础入门-SpringBoot官方文档架构
04、基础入门-SpringBoot官方文档架构 # Spring Boot官方文档架构 Spring Boot官方文档是学习和使用Spring Boot的重要资源,其架构清晰,内容全面,帮助用户从入门到精通。以下是官方文档的主要架构: ## 1. 引言 - **关于文档**&…...

第9章 组件及事件处理
9.1 Java Swing概述 图像用户界面(GUI) java.awt包,即Java抽象窗口工具包,Button(按钮)、TextField(文本框)、List(列表) javax.swing包 容器类(…...
三、高级攻击工具与框架
高级工具与框架是红队渗透的核心利器,能够实现自动化攻击、权限维持和隐蔽渗透。本节聚焦Metasploit、Cobalt Strike及企业级漏洞利用链,结合实战演示如何高效利用工具突破防御并控制目标。 1. Metasploit框架深度解析 定位:渗透测试的“瑞…...

用golang实现二叉搜索树(BST)
目录 一、概念、性质二、二叉搜索树的实现1. 结构2. 查找3. 插入4. 删除5. 中序遍历 中序前驱/后继结点 一、概念、性质 二叉搜索树(Binary Search Tree),简写BST,又称为二叉查找树 它满足: 空树是一颗二叉搜索树对…...
10.13 LangChain工具调用实战:@tool装饰器+小样本提示,日处理10w+调用秘籍
LangChain 工具调用(Tool Calling)深度解析 关键词:LangChain工具调用, 函数调用与工具调用区别, @tool装饰器, ToolMessage机制, 小样本提示工程 1. Function Calling vs Tool Calling LangChain 中的工具调用系统经历了从函数调用(Function Calling)到工具调用(Tool …...
C++跨平台开发经验与解决方案
在当今软件开发领域,跨平台开发已成为一个重要的需求。C作为一种强大的系统级编程语言,在跨平台开发中扮演着重要角色。本文将分享在实际项目中的跨平台开发经验和解决方案。 1. 构建系统选择 CMake的优势 跨平台兼容性好 支持多种编译器和IDE 强大…...
【以及好久没上号的闲聊】Unity记录8.1-地图-重构与优化
最近几年越来越懒,要是能分身多好哇,大家教教我 懒得更CSDN了,所以不是很常上号,而CSDN的两周前私信显示的灰灰的 也就是虽然我每次上号都有看私信,但是搞笑的是前面四个明显的消息全是CSDN的广告,我压根没…...
C# 活动窗体截图:基于 Win32 API 的实现
1. 核心功能与技术栈 该截图功能类 ScreenShotClass 基于 Win32 API 实现了两种截图方式: CopyFromScreen 方法:利用 Graphics.CopyFromScreen 直接截取屏幕区域。BitBlt 方法:通过 GDI 的位图块传输(BitBlt)实现窗口…...

服务器防文件上传手写waf
一、waf的目录结构,根据自己目录情况进行修改 二、创建文件夹以及文件 sudo mkdir -p /www/server/waf-monitor sudo mkdir -p /www/server/waf-monitor/quarantine #创建文件夹 chmod 755 /www/server/waf-monitor #赋权cd /www/server/waf-monitor/touch waf-m…...
大模型为什么学新忘旧(大模型为什么会有灾难性遗忘)?
字数:2500字 一、前言:当学霸变成“金鱼” 假设你班上有个学霸,数学考满分,英语拿第一,物理称霸全校。某天,他突然宣布:“我要全面发展!从今天起学打篮球!” 一周后&am…...

计算机的基本组成与性能
1. 冯诺依曼体系结构:计算机组成的金字塔 1.1. 计算机的基本硬件组成 1.CPU - 中央处理器(Central Processing Unit)。 2.内存(Memory)。 3.主板(Motherboard)。主板的芯片组(Ch…...

linux下编写shell脚本一键编译源码
0 前言 进行linux应用层编程时,经常会使用重复的命令对源码进行编译,然后把编译生成的可执行文件拷贝到工作目录,操作非常繁琐且容易出错。本文编写一个简单的shell脚本一键编译源码。 1 linux下编写shell脚本一键编译源码 shell脚本如下&…...

【深度学习】#12 计算机视觉
主要参考学习资料: 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李沐学AI 目录 目标检测锚框交并比(IoU)锚框标注真实边界框分配偏移量计算损失函数 非极大值抑制预测 多尺度目标检测单发多框检测(S…...

Baklib赋能企业知识资产AI化升级
AI驱动知识管理革新 在数字化转型浪潮中,企业知识管理的范式正经历AI技术的深度重构。传统知识库受限于静态存储与人工维护,而Baklib通过构建知识中台架构,将多模态数据处理与语义理解引擎深度融合,实现知识资产的动态聚合与智能…...

【C++】模板上(泛型编程) —— 函数模板与类模板
文章目录 一、啥是泛型编程二、函数模板2.1、函数模板的概念2.2、函数模板的格式2.3、函数模板的原理2.4、函数模板的实例化2.4.1、隐式实例化:让编译器根据实参推演模板参数的实际类型2.4.2、显示实例化:在函数名后的<>中指定模板参数的实际类型 …...
软件架构之--论微服务的开发方法1
论微服务的开发方法1 摘要 2023年 2月,本人所在集团公司承接了长三角地区某省渔船图纸电子化审查系统项目开发,该项目旨在为长三角地区渔船建造设计院、以及渔船图纸审查机构提供一个便捷的渔船图纸电子化审查服务平台。在此项目中,我作为项目组成员参与项目的建设工作,并…...

【大模型系列】logprobs(对数概率)参数
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

C语言内存函数与数据在内存中的存储
一、c语言内存函数 1、memcpy函数是一个标准库函数,用于内存复制。功能上是用来将一块内存中的内容复制到另一块内存中。用户需要提供目标地址、源地址以及要复制的字节数。例如结构体之间的复制。 memcpy函数的原型是:void* memcpy(void* …...
代码案例分析
以下是一个使用线性回归进行简单房价预测的机器学习代码案例分析: 代码示例 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 生成一些示例数据…...

通过MCP让LLM调用系统接口
场景 MCP的出现大大丰富了LLM的功能,对于存量系统,我们希望能让模型调用已有的接口,以最小的成本让AI能够获取系统内部数据。因此我们开发了一个名为http-api-call的MCP Server,来支持模型到内部API的调用 实现方案 使用用标准…...
如何利用Redis实现延迟队列?
延迟队列概念解析 延迟队列(Delay Queue)是一种特殊的消息队列,核心特性是允许消息在指定的延迟时间后被消费者处理,而非立即消费。它解决了传统队列(FIFO)无法处理“定时任务”或“超时任务”的问题&…...

【刚下赛场!】2025年江西省电子专题赛 - 现场制作:简易数控直流电流源原题
一、题目要求 二、赛场注意事项 1、一定要用铜柱将板子升起来,不然我们剪下来的引脚在测试的时候放在桌子上非常容易导致我们的板子短路(记得把铜柱卸下来再上交作品,不然会被认为是做标记判0分); 2、发下来器件之后…...

材料×工艺×AI:猎板PCB重构汽车电子四层板技术逻辑
一、汽车电子四层板的三大核心挑战 1. 极端环境下的可靠性保障 汽车电子需在-40℃至150℃的剧烈温变、高湿振动等环境中稳定运行。例如,电池管理系统(BMS)要求PCB在高温下阻抗漂移率低于8%,且镀层需具备抗腐蚀能力。猎板PCB通…...

MCP(一)——QuickStart
目录 1. MCP简介2. MCP的优势3. MCP核心4. QuickStart For Server Developers(仅具参考)4.1 MCP核心概念4.2 构建MCP服务器的代码4.2.1 设置MCP服务器实例4.2.2 辅助函数4.2.3 实现工具执行4.2.4 在Cherry-Studio中添加MCP服务器4.2.5 演示4.2.5.1 测试工具get_alerts4.2.5.2 测…...
GCC 版本与C++ 标准对应关系
GCC 版本 与支持的 C 标准(C11、C14、C17、C20、C23) 的对应关系 GCC 版本与 C 标准支持对照表 GCC 版本默认 C 标准C11C14C17C20C23GCC 4.8C98✅ (部分支持)❌❌❌❌GCC 4.9C98✅ (完整支持)❌❌❌❌GCC 5.1C98✅✅ (完整支持)❌❌❌GCC 6.1C14✅✅✅ …...