中文基于Qwen3-235B-2507蒸馏数据集的操作

flyfish

方式1

from datasets import load_dataset
from transformers import AutoTokenizer# -------------------------- 配置参数 --------------------------
TOKENIZER_PATH = "/media/models/models/Qwen/Qwen3-8B/"
# 数据集存放路径
DATASET_PATH = "/media/user/datasets/swift/Chinese-Qwen3-235B-2507-Distill-data-110k-SFT/qwen3_235b_2507_distill_110k.jsonl"# 最大序列长度(文本截断/填充的目标长度)
MAX_SEQ_LENGTH = 1024
# 训练集/验证集大小(按需调整)
TRAIN_SIZE = 128
VAL_SIZE = 32# -------------------------- 加载分词器 --------------------------
# 加载模型对应的分词器(负责文本→token转换)
tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH)
# 设置填充符号(Qwen等模型通常用eos_token作为pad_token)
tokenizer.pad_token = tokenizer.eos_token
# 设置填充方向为右侧(语言模型通常右侧填充更合理)
tokenizer.padding_side = "right"# -------------------------- 加载原始数据集 --------------------------
def load_raw_dataset(path):"""加载JSONL格式的原始数据集"""# 使用datasets库加载JSONL文件(split="train"表示加载全部数据为训练集)dataset = load_dataset("json",               # 数据集格式为JSONdata_files=path,      # 数据集文件路径split="train"         # 加载为"train"拆分(后续可再划分))print(f"原始数据集加载完成,共 {len(dataset)} 条样本")return dataset# -------------------------- 验证数据格式 --------------------------
def check_data_format(dataset):"""验证数据集是否包含正确的对话格式(messages字段)"""# 查看第一条样本,确认结构是否正确sample = dataset[0]print("\n===== 样本格式示例 =====")print(sample)# 检查是否包含"messages"字段(对话数据核心)if "messages" not in sample:raise ValueError("数据集必须包含'messages'字段,格式应为[{role:..., content:...}, ...]")# 检查messages内部结构(需包含role和content)for msg in sample["messages"]:if not all(key in msg for key in ["role", "content"]):raise ValueError("messages中的每条消息必须包含'role'和'content'字段")# -------------------------- 数据预处理(核心) --------------------------
def preprocess_dataset(dataset):"""对原始数据集进行预处理:1. 将对话格式化为模型可接受的文本(应用聊天模板)2. 转换为token(input_ids)和标签(labels)3. 过滤无效样本"""def process_single_sample(example):"""处理单条样本:格式化→tokenize"""try:# 1. 提取对话消息(如[{"role": "user", "content": "你好"}, {"role": "assistant",...}])messages = example["messages"]# 2. 应用聊天模板(将对话转换为模型输入格式)# 不同模型的聊天模板不同(如Qwen的格式为"<|im_start|>user...<|im_end|>assistant...")formatted_text = tokenizer.apply_chat_template(messages,tokenize=False,        # 先不tokenize,仅生成格式化文本add_generation_prompt=False  # 不添加生成提示(SFT训练用))# 3. Tokenize:将文本转换为模型可处理的整数序列(input_ids)tokenized = tokenizer(formatted_text,padding="max_length",  # 填充到MAX_SEQ_LENGTHtruncation=True,       # 超过长度则截断max_length=MAX_SEQ_LENGTH,return_tensors="pt"    # 返回PyTorch张量)# 4. 准备labels(与input_ids相同,自回归训练中用input_ids作为标签)return {"input_ids": tokenized["input_ids"].squeeze(),  # 去除多余维度"labels": tokenized["input_ids"].squeeze().clone()  # 复制作为标签}except Exception as e:# 跳过格式错误的样本print(f"跳过无效样本:{e}")return None# 批量处理所有样本(使用多进程加速)processed = dataset.map(process_single_sample,remove_columns=dataset.column_names,  # 移除原始字段(只保留处理后的结果)num_proc=4  # 4个进程并行处理)# 过滤处理失败的样本(返回None的样本)processed = processed.filter(lambda x: x is not None)print(f"\n预处理完成,有效样本数:{len(processed)}")return processed# -------------------------- 划分训练集与验证集 --------------------------
def split_train_val(dataset, train_size, val_size):"""将预处理后的数据集划分为训练集和验证集"""# 计算划分比例(确保能截取到目标数量的样本)split_ratio = (val_size + 1) / (train_size + val_size + 2)# 随机划分(seed确保结果可复现)split_data = dataset.train_test_split(test_size=split_ratio,seed=42)# 截取目标大小的样本train_dataset = split_data["train"].select(range(train_size))val_dataset = split_data["test"].select(range(val_size))print(f"\n数据集划分完成:训练集 {len(train_dataset)} 条,验证集 {len(val_dataset)} 条")return train_dataset, val_dataset# -------------------------- 主流程 --------------------------
if __name__ == "__main__":# 1. 加载原始数据集raw_dataset = load_raw_dataset(DATASET_PATH)# 2. 验证数据格式是否正确check_data_format(raw_dataset)# 3. 预处理(格式化→tokenize)processed_dataset = preprocess_dataset(raw_dataset)# 4. 划分训练集和验证集train_data, val_data = split_train_val(processed_dataset,train_size=TRAIN_SIZE,val_size=VAL_SIZE)# 查看处理后的样本示例(input_ids的前10个token)print("\n===== 处理后样本示例 =====")print("input_ids(前10个):", train_data[0]["input_ids"][:10])print("labels(前10个):   ", train_data[0]["labels"][:10])

输出

Generating train split: 110000 examples [00:01, 74385.42 examples/s]
原始数据集加载完成,共 110000 条样本

===== 样本格式示例 =====
{‘messages’: [{‘role’: ‘user’, ‘content’: ‘能给我讲一个寓意深刻的故事吗?’}, {‘role’: ‘assistant’, ‘content’: ‘当然可以。下面是一个寓意深刻的小故事,名为《石匠与神像》:\n\n很久以前,在一座深山里,有一位技艺精湛的石匠,名叫阿岩。他一生都在雕刻石头,作品精美绝伦,远近闻名。但他从不雕刻神像,别人问他为什么,他总是沉默不语。\n\n一天,村里要修建一座庙宇,村长请他雕刻一尊守护神像。阿岩犹豫了很久,终于答应了。他选了一块巨大的青石,开始日复一日地凿刻。每一锤、每一凿,他都极为专注,仿佛在与石头对话。\n\n三年过去了,神像终于完成。它面容庄严,目光深邃,仿佛能看透人心。村民们都惊叹不已,纷纷跪拜,称其为“活的神”。\n\n落成典礼那天,村长对阿岩说:“你创造了神,你就是神的化身。”\n\n阿岩却摇了摇头,轻声说:“不,我不是创造者,我只是唤醒了它。”\n\n众人不解。阿岩走到神像前,指着一处细微的裂痕说:“你们看,这块石头原本有一道裂纹,藏在深处。我本想避开它,可无论怎么雕,那裂痕总会出现在神像的眉心。最后我明白——它不是瑕疵,而是它本来的样子。”\n\n他顿了顿,望向群山:“这石头在山中沉睡了千年,经历了风雨雷电,才有了这道伤痕。我所做的,不是塑造完美,而是让伤痕也成为神圣的一部分。”\n\n众人沉默。\n\n阿岩又说:“人总想雕刻出完美的神,可真正的神,不是无瑕的偶像,而是包容伤痕、接纳残缺的存在。我们每个人心中都有一块石头,有裂痕,有沉重,有沉默。但正是这些,让我们真实,让我们值得被唤醒。”\n\n说完,他放下刻刀,走进山林,再也没有回来。\n\n——\n\n寓意: \n这个故事告诉我们,真正的美与力量,不在于完美无缺,而在于接纳自己的伤痕与不完美。每个人都有裂痕,但那不是缺陷,而是经历的印记,是灵魂的深度。我们不必成为别人眼中的“完美神像”,而是要勇敢地“唤醒”真实的自己——带着伤痕,依然庄严站立。’}]}

Map (num_proc=4): 100%|110000/110000 [01:01<00:00, 1775.05 examples/s]
Filter: 100%|
110000/110000 [01:17<00:00, 1416.82 examples/s]预处理完成,有效样本数:110000数据集划分完成:训练集 128 条,验证集 32 条===== 处理后样本示例 =====
input_ids(前10个): [151644, 872, 198, 100344, 107735, 77172, 41299, 110319, 33108, 112398]
labels(前10个):    [151644, 872, 198, 100344, 107735, 77172, 41299, 110319, 33108, 112398]

方式2

from modelscope.msdatasets import MsDataset
dataset = MsDataset.load('swift/Chinese-Qwen3-235B-2507-Distill-data-110k-SFT')
print(f'dataset[0]: {dataset[0]}')

dataset[0]: {‘messages’: [{‘role’: ‘user’, ‘content’: ‘能给我讲一个寓意深刻的故事吗?’}, {‘role’: ‘assistant’, ‘content’: ‘当然可以。下面是一个寓意深刻的小故事,名为《石匠与神像》:\n\n很久以前,在一座深山里,有一位技艺精湛的石匠,名叫阿岩。他一生都在雕刻石头,作品精美绝伦,远近闻名。但他从不雕刻神像,别人问他为什么,他总是沉默不语。\n\n一天,村里要修建一座庙宇,村长请他雕刻一尊守护神像。阿岩犹豫了很久,终于答应了。他选了一块巨大的青石,开始日复一日地凿刻。每一锤、每一凿,他都极为专注,仿佛在与石头对话。\n\n三年过去了,神像终于完成。它面容庄严,目光深邃,仿佛能看透人心。村民们都惊叹不已,纷纷跪拜,称其为“活的神”。\n\n落成典礼那天,村长对阿岩说:“你创造了神,你就是神的化身。”\n\n阿岩却摇了摇头,轻声说:“不,我不是创造者,我只是唤醒了它。”\n\n众人不解。阿岩走到神像前,指着一处细微的裂痕说:“你们看,这块石头原本有一道裂纹,藏在深处。我本想避开它,可无论怎么雕,那裂痕总会出现在神像的眉心。最后我明白——它不是瑕疵,而是它本来的样子。”\n\n他顿了顿,望向群山:“这石头在山中沉睡了千年,经历了风雨雷电,才有了这道伤痕。我所做的,不是塑造完美,而是让伤痕也成为神圣的一部分。”\n\n众人沉默。\n\n阿岩又说:“人总想雕刻出完美的神,可真正的神,不是无瑕的偶像,而是包容伤痕、接纳残缺的存在。我们每个人心中都有一块石头,有裂痕,有沉重,有沉默。但正是这些,让我们真实,让我们值得被唤醒。”\n\n说完,他放下刻刀,走进山林,再也没有回来。\n\n——\n\n寓意: \n这个故事告诉我们,真正的美与力量,不在于完美无缺,而在于接纳自己的伤痕与不完美。每个人都有裂痕,但那不是缺陷,而是经历的印记,是灵魂的深度。我们不必成为别人眼中的“完美神像”,而是要勇敢地“唤醒”真实的自己——带着伤痕,依然庄严站立。’}]}

方式3

from swift.llm import load_datasetdataset, val_dataset = load_dataset('swift/Chinese-Qwen3-235B-2507-Distill-data-110k-SFT')
print(f'dataset: {dataset}')
print(f'dataset[0]: {dataset[0]}')

输出

dataset: Dataset({features: ['messages'],num_rows: 110000
})

dataset[0]: {‘messages’: [{‘role’: ‘user’, ‘content’: ‘能给我讲一个寓意深刻的故事吗?’}, {‘role’: ‘assistant’, ‘content’: ‘当然可以。下面是一个寓意深刻的小故事,名为《石匠与神像》:\n\n很久以前,在一座深山里,有一位技艺精湛的石匠,名叫阿岩。他一生都在雕刻石头,作品精美绝伦,远近闻名。但他从不雕刻神像,别人问他为什么,他总是沉默不语。\n\n一天,村里要修建一座庙宇,村长请他雕刻一尊守护神像。阿岩犹豫了很久,终于答应了。他选了一块巨大的青石,开始日复一日地凿刻。每一锤、每一凿,他都极为专注,仿佛在与石头对话。\n\n三年过去了,神像终于完成。它面容庄严,目光深邃,仿佛能看透人心。村民们都惊叹不已,纷纷跪拜,称其为“活的神”。\n\n落成典礼那天,村长对阿岩说:“你创造了神,你就是神的化身。”\n\n阿岩却摇了摇头,轻声说:“不,我不是创造者,我只是唤醒了它。”\n\n众人不解。阿岩走到神像前,指着一处细微的裂痕说:“你们看,这块石头原本有一道裂纹,藏在深处。我本想避开它,可无论怎么雕,那裂痕总会出现在神像的眉心。最后我明白——它不是瑕疵,而是它本来的样子。”\n\n他顿了顿,望向群山:“这石头在山中沉睡了千年,经历了风雨雷电,才有了这道伤痕。我所做的,不是塑造完美,而是让伤痕也成为神圣的一部分。”\n\n众人沉默。\n\n阿岩又说:“人总想雕刻出完美的神,可真正的神,不是无瑕的偶像,而是包容伤痕、接纳残缺的存在。我们每个人心中都有一块石头,有裂痕,有沉重,有沉默。但正是这些,让我们真实,让我们值得被唤醒。”\n\n说完,他放下刻刀,走进山林,再也没有回来。\n\n——\n\n寓意: \n这个故事告诉我们,真正的美与力量,不在于完美无缺,而在于接纳自己的伤痕与不完美。每个人都有裂痕,但那不是缺陷,而是经历的印记,是灵魂的深度。我们不必成为别人眼中的“完美神像”,而是要勇敢地“唤醒”真实的自己——带着伤痕,依然庄严站立。’}]}

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

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

相关文章

论文阅读笔记:《Dataset Distillation by Matching Training Trajectories》

论文阅读笔记&#xff1a;《Dataset Distillation by Matching Training Trajectories》1.动机与背景2.核心方法&#xff1a;轨迹匹配&#xff08;Trajectory Matching&#xff09;3.实验与效果4.个人思考与启发主体代码算法逻辑总结一句话总结&#xff1a; 这篇论文通过让合成…

STM32标准库的工程创建

一.所需文件说明 1.启动文件startup_xxxx.s 作用&#xff1a;初始化堆栈指针、复位向量、中断向量表&#xff0c;执行 SystemInit() 后跳转到 main()。 位置&#xff1a;Libraries/CMSIS/Device/ST/STM32Fxx/Source/Templates/arm/ 文件名&#xff1a; startup_stm32f10x_l…

k8s ceph sc 设置文件系统格式化参数

前言 默认的 sc 文件系统 inode 太少,对于小文件场景,往往会出现容量没满,inode 已经用尽的情况,本文说明如何设置 inode。 说明 本文使用的是 rook-ceph 部署的 ceph 作为存储后端。 xfs 文件系统 sc 创建带格式化参数的 xfs 文件系统的 sc allowVolumeExpansion: t…

关于Npm和Nvm的用法

npm是个什么东西 npm是什么 node package managernodejs包管理工具处理复杂的包的管理的问题那么使用npm以后就不需要从前端引入相应的代码和文件等。 npm相关的命令 查看版本npm -v 更新npm install npm5.4.0 更新到最新版本npm install npmlatest 初始化项目 npm ini…

MyBatis高效查询:简化JDBC开发实战

Mybatis MyBatis 是一款优秀持久层(DAO)框架&#xff0c;用于简化 JDBC 开发 &#xff0c;原是 Apache 开源项目 iBatis&#xff0c;经历迁移改名&#xff0c;2010 年从 Apache 迁到 Google Code 并改名&#xff0c;2013 年 11 月迁至 GitHub&#xff0c;官网为 https://mybati…

系统信息及进程管理命令

系统信息及进程管理 一、系统信息查看 常用命令&#xff1a;uname、hostnam、hostnamectl、uptime、df、du、free、lscpu 1、uname (1)、命令简介 uname 是一个在 Unix 和类 Unix 系统&#xff08;如 Linux、macOS&#xff09;中常用的命令行工具&#xff0c;用于显示系统信息。…

【Z字形变换】

代码思路分析&#xff1a;Z 字形变换 1. 边界情况处理 if (r 1 || r > n) return s;r 1&#xff1a;只有一行&#xff0c;直接返回原字符串&#xff08;无需变换&#xff09;。r > n&#xff1a;行数大于等于字符串长度&#xff0c;每行只有一个字符&#xff0c;直接返…

VBA中类的解读及应用第二十五讲:把源数据赋给类利用类完成查找

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0c;…

Vue3核心语法进阶(Hook)

Vue3 自定义 Hook&#xff1a;让你的代码像乐高一样“可复用”&#xff01;大家好&#xff0c;我是你们的前端小伙伴&#xff01;上一篇我们聊了 Vue3 的生命周期&#xff0c;今天咱们继续深入 Vue3 的核心利器——自定义 Hook&#xff08;Custom Hook&#xff09;。如果你已经…

工控领域协议之Modbus

Modbus 是一种通信协议&#xff0c;用于工业自动化领域中的设备之间的通信。它是一种串行通信协议&#xff0c;广泛应用于连接不同设备、传感器和执行器的工业控制系统。 Modbus 在工业控制系统、自动化设备、能源管理系统等领域得到广泛应用。 Modbus 协议的基本特点&#xff…

大件垃圾识别 mAP↑28%:陌讯多模态融合算法实战解析

一、行业痛点&#xff1a;大件垃圾识别的现实困境在城市环卫智能化转型过程中&#xff0c;大件垃圾&#xff08;如废旧家具、电器等&#xff09;的自动化识别与分拣成为关键环节。据住建部《城市环境卫生发展报告》显示&#xff0c;传统人工分拣模式下大件垃圾识别准确率不足 6…

vk框架或者普通函数封装的一些函数可以拿取使用【会持续更新】

1.身份证校验【通用】/*** function isIDCard* description 判断是否为有效的身份证号码。* param {string} idCard - 待验证的身份证号码。* returns {boolean} 返回验证结果。*/ pubFun.isIDCard function (idCard) {// 身份证号码为15位或者18位&#xff0c;15位时全为数字…

如何给Word和WPS文档添加密码或取消密码

要保护Word和WPS文档&#xff0c;可以为它们加密&#xff0c;加密有两类&#xff1a;打开密码和修改密码。密码设置有两个入口&#xff0c;一个是在另存为&#xff0c;一个是在文件菜单。Word和WPS文字的路径略有不同&#xff0c;微软Office和WPS的其他套件也是如此操作。一、W…

uni-app项目gitignore文件示例

uni-app 忽略以下文件和目录 DS_Store 忽略 UniApp 编译生成的小程序相关目录 unpackage/ uni_modules/ 忽略编辑器自动生成的文件 idea/ vscode/ 忽略日志文件 logs/ 忽略临时文件 temp/ 忽略构建工具自动生成的文件 build/ 忽略 npm 安装的包文件 package-lock.json yarn.loc…

LeetCode 135:分糖果

LeetCode 135&#xff1a;分糖果问题本质与核心挑战 给定孩子的评分数组&#xff0c;需满足 “每个孩子至少1颗糖果&#xff0c;相邻评分高的孩子糖果更多”&#xff0c;求最少糖果总数。核心挑战&#xff1a; 相邻约束是双向的&#xff08;左→右和右→左都需满足&#xff09;…

【QT】安装与配置

个人主页&#xff1a;Guiat 归属专栏&#xff1a;QT 文章目录1. QT简介与准备工作1.1 什么是QT1.2 QT的版本选择1.3 系统要求检查2. QT安装方式详解2.1 官方在线安装器2.2 离线安装包2.3 包管理器安装3. Windows平台安装配置3.1 Windows安装步骤3.2 环境变量配置3.3 Visual Stu…

Java从入门到精通 - 算法、正则、异常

算法、正则、异常 此笔记参考黑马教程&#xff0c;仅学习使用&#xff0c;如有侵权&#xff0c;联系必删 文章目录算法、正则、异常1. 常见算法1.1 简单认识算法1.1.1 什么是算法&#xff1f;1.1.2 为什么要学习算法&#xff1f;1.2 排序算法1.2.1 冒泡排序1.2.1.1 实现冒泡排…

题单【排序】

P1271 【深基9.例1】选举学生会 P1271 【深基9.例1】选举学生会 - 洛谷 【方法一】快速排序 使用sort()&#xff0c;注意数组的范围&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std;int a[2000000],n,m;int main() {cin>>n>&g…

【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度

文章目录一、 AdaBoost&#xff1a;自适应提升算法1、AdaBoost数学原理详解1.1、 目标函数1.2、 样本权重更新的逻辑1.3、 模型权重计算的含义1.4、 AdaBoost的核心思想2、为什么AdaBoost如此有效&#xff1f;二、 随机梯度提升算法&#xff1a;梯度优化下更精细的优化1、随机梯…

力扣 hot100 Day65

75. 颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函…