1. 什么是数据集

对于大型语言模型(LLMs),数据集是用于训练模型的数据集合。为了训练有效,文本数据需要能够被分词(tokenized)。创建数据集的关键部分之一是聊天模板(chat template)的设计,分词也很重要,它将文本分解为单词、子单词或字符,以便LLMs能有效处理。这些分词随后被转化为嵌入向量(embeddings),帮助模型理解含义和上下文。

2. 数据格式

数据集需要是分词器能够读取的格式,常见的数据格式和对应的训练类型如下:

格式描述训练类型
原始语料(Raw Corpus)来自网站、书籍或文章的原始文本持续预训练(Continued Pretraining, CPT)
指令(Instruct)模型要遵循的指令及期望的输出示例监督式微调(Supervised fine-tuning, SFT)
对话(Conversation)用户与AI助手之间的多轮对话监督式微调(SFT)
强化学习人类反馈(RLHF)用户与AI助手的对话,助手的回答由脚本、其他模型或人工评估者排名强化学习(Reinforcement Learning, RL)

3. 入门指南

在格式化数据之前,需要确定以下几点:

3.1 数据集的目的

明确数据集的用途有助于确定所需的数据和格式。例如:

  • 聊天式对话 :问答、学习新语言、客户支持、日常对话等。
  • 结构化任务 :分类、总结、生成任务等。
  • 特定领域的数据 :医学、金融、技术等。

3.2 输出风格

输出风格决定了我们将使用哪些数据源来达到期望的输出。输出类型可以是JSON、HTML、文本或代码,也可以是特定语言,如西班牙语、英语或德语等。

3.3 数据来源

确定数据集的用途和风格后,需要分析数据的质量和数量。Hugging Face和维基百科是优质的数据集来源,尤其是维基百科,对于训练模型学习语言非常有用。数据来源可以是CSV文件、PDF文件,甚至是网站。也可以合成生成数据,但需要确保每个示例的质量和相关性。将数据集与Hugging Face上的通用数据集(如ShareGPT)结合,可以使模型更智能、更多样化。此外,还可以添加合成生成的数据。

4. 格式化数据

在确定了相关标准并收集了必要的数据后,可以将数据格式化为机器可读的格式,以便进行训练。

4.1 常见的LLM训练数据格式

  • 持续预训练 :使用无特定结构的原始文本格式。例如:
"text": "Pasta carbonara is a traditional Roman pasta dish. The sauce is made by mixing raw eggs with grated Pecorino Romano cheese and black pepper. The hot pasta is then tossed with crispy guanciale (cured pork cheek) and the egg mixture, creating a creamy sauce from the residual heat. Despite popular belief, authentic carbonara never contains cream or garlic. The dish likely originated in Rome in the mid-20th century, though its exact origins are debated..."

这种格式保留了自然语言的流畅性,使模型能够从连续文本中学习。

  • 指令格式(Alpaca风格) :如果要让模型根据特定指令在单轮对话中输出文本,可以使用以下格式:
"Instruction": "Task we want the model to perform."
"Input": "Optional, but useful, it will essentially be the user's query."
"Output": "The expected result of the task and the output of the model."
  • ShareGPT格式 :如果需要多轮对话,可以使用以下格式:
{
"conversations": [
{
"from": "human",
"value": "Can you help me make pasta carbonara?"
},
{
"from": "gpt",
"value": "Would you like the traditional Roman recipe, or a simpler version?"
},
{
"from": "human",
"value": "The traditional version please"
},
{
"from": "gpt",
"value": "The authentic Roman carbonara uses just a few ingredients: pasta, guanciale, eggs, Pecorino Romano, and black pepper. Would you like the detailed recipe?"
}
]
}

这种模板格式使用“from”/“value”属性键,消息在“human”和“gpt”之间交替,使对话流程自然。

  • ChatML格式 :这是OpenAI的格式,也是Hugging Face默认的格式,可能是使用最广泛的格式,消息在“user”和“assistant”之间交替。例如:
{
"messages": [
{
"role": "user",
"content": "What is 1+1?"
},
{
"role": "assistant",
"content": "It's 2!"
},
]
}

4.2 使用Unsloth应用聊天模板

对于通常遵循ChatML格式的数据集,准备数据集以用于训练或微调的过程包括以下四个简单步骤:

  1. 检查Unsloth目前支持的聊天模板
from unsloth.chat_templates import CHAT_TEMPLATES
print(list(CHAT_TEMPLATES.keys()))

这将打印出Unsloth目前支持的模板列表。例如:

['unsloth', 'zephyr', 'chatml', 'mistral', 'llama', 'vicuna', 'vicuna_old', 'vicuna old', 'alpaca', 'gemma', 'gemma_chatml', 'gemma2', 'gemma2_chatml', 'llama-3', 'llama3', 'phi-3', 'phi-35', 'phi-3.5', 'llama-3.1', 'llama-31', 'llama-3.2', 'llama-3.3', 'llama-32', 'llama-33', 'qwen-2.5', 'qwen-25', 'qwen25', 'qwen2.5', 'phi-4', 'gemma-3', 'gemma3']
  1. 使用get_chat_template为分词器应用正确的聊天模板
from unsloth.chat_templates import get_chat_template
tokenizer = get_chat_template(
tokenizer,
chat_template = "gemma-3", # 根据需要更改聊天模板名称
)
  1. 定义格式化函数 :以下是一个示例:
def formatting_prompts_func(examples):
convos = examples["conversations"]
texts = [tokenizer.apply_chat_template(convo, tokenize = False, add_generation_prompt = False) for convo in convos]
return { "text" : texts, }

这个函数会遍历数据集,将定义的聊天模板应用到每个样本上。

  1. 加载数据集并应用所需的修改
# 导入并加载数据集
from datasets import load_dataset
dataset = load_dataset("repo_name/dataset_name", split = "train")
# 使用map方法将格式化函数应用到数据集上
dataset = dataset.map(formatting_prompts_func, batched = True,)

如果数据集使用ShareGPT格式的“from”/“value”键,而不是ChatML格式的“role”/“content”键,可以使用standardize_sharegpt函数进行转换。修改后的代码如下:

# 导入数据集
from datasets import load_dataset
dataset = load_dataset("mlabonne/FineTome-100k", split = "train")
# 如果需要,将数据集转换为“role”/“content”格式
from unsloth.chat_templates import standardize_sharegpt
dataset = standardize_sharegpt(dataset)
# 使用map方法将格式化函数应用到数据集上
dataset = dataset.map(formatting_prompts_func, batched = True,)

4.3 数据格式化Q&A

  • 如何使用Alpaca指令格式 :如果数据集已经是Alpaca格式,则按照Llama3.1笔记本中显示的格式化步骤操作。如果需要将数据转换为Alpaca格式,可以创建Python脚本处理原始数据。如果是总结任务,可以使用本地LLM为每个示例生成指令和输出。
  • 是否总是使用standardize_sharegpt方法 :只有当目标数据集是ShareGPT格式,但模型期望ChatML格式时,才使用standardize_sharegpt方法。
  • 为什么不使用分词器自带的apply_chat_template函数 :模型所有者首次上传模型时,chat_template属性有时会包含错误,可能需要时间更新。相比之下,Unsloth在将量化版本上传到我们的仓库时,会彻底检查并修复每个模型的`

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

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

相关文章

【码蹄杯】2025年本科组省赛第一场

个人主页:Guiat 归属专栏:算法竞赛 文章目录1. MC0455 四大名著-西游签到2. MC0456 斩断灵藤3. MC0457 符咒封印4. MC0458 移铁术5. MC0459 昆仑墟6. MC0460 星空迷轨阵7. MC0461 排队8. MC0462 最后一难正文 总共8道题。 1. MC0455 四大名著-西…

CentOS 10安装Ollama

前置说明 linux服务器版本:CentOS10 ollama版本:v0.11.6 下载安装包 下载安装包 官网地址:Ollama 下载地址:Download Ollama 选择linux平台,由于使用官网提供的脚本直接安装容易失败,这里选择手动下…

手机、电脑屏幕的显示坏点检测和成像原理

如今,手机和电脑屏幕已成为人们日常生活和工作中不可或缺的一部分。无论是处理文档、观看视频,还是进行专业设计,屏幕的显示质量都直接影响着用户体验。本文将介绍屏幕显示的基本原理,包括RGB色素构成和成像机制,并进一…

文件与fd

文件与fd一、前置预备二、复习c语言文件三、系统文件认识3.1 系统层面有关文件的接口(open):![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b15577967d1445b08cd5252f2009683a.png)3.2 简单使用open参数3.3 语言vs系统3.4 进一步理…

语义通信高斯信道仿真代码

1️⃣ 代码 def AWGN(coding, snr, devicecpu):"""为输入张量添加高斯白噪声(AWGN),根据指定的 SNR(分贝)控制噪声强度。参数:coding (torch.Tensor): 输入张量,形状为 [batch_s…

unity中实现机械臂自主运动

目的:导入机械臂的fbx模型,利用C#编写脚本实现机械臂的自主运动步骤1.在 Unity 中,右键点击 “Assets” 文件夹,选择 “Create” -> “C# Script” 来创建一个新的 C# 脚本命名为 “ArmController”。2.双击打开脚本&#xff0…

Python 版本与 package 版本兼容性检查方法

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…

深入剖析分布式事务的Java实现:从理论到Seata实战

文章目录深入剖析分布式事务的Java实现:从理论到Seata实战引言:分布式事务的现实挑战1. 分布式事务理论基础1.1 从ACID到CAP/BASE1.2 典型业务场景分析2. 主流分布式事务解决方案对比2.1 技术方案全景图2.2 选型建议3. Seata框架深度解析3.1 Seata架构设…

自建知识库,向量数据库 (十一)之 量化对比余弦——仙盟创梦IDE

向量比对:开启企业经营自动化搜索新视野在当今数字化时代,企业经营自动化已成为提升竞争力的关键。其中,搜索功能作为企业获取信息、连接用户与资源的重要入口,其效率和准确性直接影响企业的运营效率和用户体验。向量比对在企业经…

Spring Cloud系列—SkyWalking告警和飞书接入

上篇文章: Spring Cloud系列—SkyWalking链路追踪https://blog.csdn.net/sniper_fandc/article/details/149948321?fromshareblogdetail&sharetypeblogdetail&sharerId149948321&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目…

【问题】解决docker的方式安装n8n,找不到docker.n8n.io/n8nio/n8n:latest镜像的问题

问题概览 用docker方式安装n8n,遇到错误,安装不了的问题: Unable to find image docker.n8n.io/n8nio/n8n:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request can…

机器人控制基础:串级PID控制算法的参数如何整定?

目录 一、整定前的准备 二、内环(副环)参数整定(核心步骤) 1. 断开主环,单独测试内环 2. 内环参数整定(按 “比例→积分→微分” 顺序) (1)比例系数(kp)整定 (2)积分系数(ki)整定 (3)微分系数(kd)整定(可选) 3. 验证内环抗扰动能力 三、外环(主…

HTTP性能优化实战指南(含代码/图表/案例)

HTTP性能优化实战指南(含代码/图表/案例)一、性能优化关键指标TTFB(Time To First Byte): 服务器响应时间FCP(First Contentful Paint): 首内容渲染时间LCP(Largest Contentful Paint&#xff0…

QT代码框架小案例:一个简单的时间类(Time)及其实例化程序,模拟了时间的设置、显示和自动流逝功能,类似一个简易电子时钟。

一、代码框架二、运行终端显示三、代码详细注释test.pro# 指定项目类型为应用程序(而非库或其他类型) TEMPLATE app# 配置项目:启用控制台输出,使用C11标准 CONFIG console c11# 移除配置:不生成应用程序捆绑包&…

Nacos-11--Nacos热更新的原理

在Nacos中,当监听到配置变化后,Nacos提供了相关机制(长轮询或gRPC)让客户端能够监听到配置的变化,并触发相应的监听器(Listener),但具体的处理逻辑需要根据实际需求来实现。 1、热更…

fastapi 的BackgroundTasks

什么是 BackgroundTasks?BackgroundTasks 是 FastAPI 提供的一个强大工具,它允许你将一些非紧急的、耗时的操作(例如发送邮件、处理数据、调用第三方 API 等)放到“后台”去执行,而不是让用户一直等待这些操作完成。它…

Python 十进制转二进制

在 Python 中,将十进制整数转换为二进制有多种方法。以下是几种常见的方式:1. 使用 bin() 函数bin() 是 Python 内置函数,可以将十进制整数转换为二进制字符串。语法bin(n)示例n 13 binary_str bin(n) print(binary_str) # 输出: 0b1101说…

合并工作表,忽略手动隐藏行超简单-Excel易用宝

同事小丽有一个工作簿,文件中有多个工作表,每个工作表中有多行数据,这些表格中数据是有手动隐藏行的,她想把这些表格的数据忽略隐藏行合并到一个工作表中,但是使劲浑身解数,各种折腾,都会把隐藏…

我从零开始学习C语言(14)- 基本类型 PART1

今天学习第7章-基本类型,主要内容如下:7.1 整数类型这里的整数的整数值就是数学意义上的整数。C语言支持两种本质上(存储形式)不同的数值类型:整数类型(简称整型)和浮点类型(简称浮点…

Flutter - UI布局

一、容器Widget1. ScaffoldScaffold 作为页面的脚手架,基础区域包含顶部导航栏 appBar、主体内容区 body、侧边抽屉 drawer、悬浮按钮 floatingActionButton、底部导航栏 bottomNavigationBar。Scaffold(appBar: AppBar( // 顶部导航栏title: Text(首页),),body: Ce…