【大模型原理与微调实战13】SFT数据集代码实战:数据清洗、格式转换、标准化构建(微调零报错前置)

📅 2026/7/6 2:59:00
【大模型原理与微调实战13】SFT数据集代码实战:数据清洗、格式转换、标准化构建(微调零报错前置)
专辑专栏大模型原理与微调实战从Transformer底层到大模型定制落地文章标签#大模型 #LLM #SFT数据集 #数据清洗 #微调实战 #LoRA微调 #数据集构建阅读前置上一篇我们完成了大模型微调专属环境的零基础搭建配齐了所有训练依赖解决了环境报错、版本不兼容、显卡不识别等核心问题。本篇聚焦微调核心前置工作手把手代码实战搭建标准SFT数据集。上节回顾前文我们从理论层面讲透了优质数据集的标准、配比规则、避坑要点。本节落地代码实操解决新手常见问题数据集格式错乱、脏数据过多、模型读取不到、训练不收敛、过拟合等问题全程代码可直接复制运行。前言老话重提微调效果80%取决于数据集质量代码和参数只是辅助。很多新手环境搭建成功、参数照搬万能模板最后微调翻车核心原因全是数据问题原始数据杂乱、存在大量空格换行、问答不匹配、长短差异过大、存在重复脏数据、格式不被微调框架识别。理论看懂不算会能手动清洗、标准化生成合格SFT数据集才是微调落地的关键能力。本篇全程零基础代码实战无需复杂工具纯Python实现手把手完成原始数据整理→数据清洗→去重过滤→格式标准化→生成可用SFT数据集适配所有主流微调框架。一、实战核心认知微调框架只认一种格式不管是Qwen、LLaMA、ChatGLM所有LoRASFT微调框架只统一认可 prompt-response 键值对格式。标准格式模板prompt用户提问/指令行业问题、通用问题、任务指令response标准唯一答案专业、规范、无废话、格式统一所有CSV、Excel、TXT原始数据最终都必须转换成该格式否则训练直接报错、学不到有效特征。绝对禁止一问多答、多问一答、问答错位、空问题、空答案、超长冗余内容。二、实战场景说明本次实战模拟企业最常用场景行业知识库问答数据集制作原始素材零散问答文本、Excel问答数据最终输出干净、标准化、可直接用于LoRA微调的JSON格式SFT数据集全程代码兼容Windows/Linux可直接复制运行。三、完整代码实战数据集清洗与标准化构建3.1 核心功能说明本次代码实现五大核心功能一次性解决所有数据问题1. 批量清洗去除空格、换行、特殊乱码、无效符号2. 数据过滤剔除空问题、空答案、过短无效样本3. 智能去重剔除重复问题避免过拟合4. 长度均衡过滤极端长短样本保证模型训练稳定5. 格式标准化统一输出微调专用JSON格式3.2 完整可运行代码import json import re # 1. 原始问答数据可替换为自己的行业问答数据、Excel读取数据 raw_data [ {prompt: 什么是基金净值, response: 基金净值是每份基金单位的净资产价值是基金交易价格的核心依据能够真实反映基金的当前资产水平。}, {prompt: 劳动合同试用期最长多久, response: 根据劳动法相关规定劳动合同试用期最长不得超过6个月。}, {prompt: Python怎么定义函数 , response: Python使用def关键字定义函数可传入参数通过return返回执行结果。}, {prompt: , response: 无效空样本需要过滤}, # 空问题脏数据 {prompt: 什么是大模型微调, response: }, # 空答案脏数据 {prompt: 什么是大模型微调, response: 大模型微调是在预训练通用模型基础上通过行业专属数据集小幅更新模型参数让模型适配垂直业务场景的训练方式。}, ] # 2. 数据清洗函数 def clean_text(text): # 去除首尾空格、换行、制表符 text text.strip().replace(\n, ).replace(\t, ) # 去除多余连续空格 text re.sub(r\s, , text) # 过滤特殊乱码字符 text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\\。\\\、\\\\], , text) return text # 3. 数据过滤与标准化处理 def process_sft_data(data_list): processed [] prompt_set set() # 用于去重 for item in data_list: # 清洗问答文本 prompt clean_text(item[prompt]) response clean_text(item[response]) # 过滤规则空内容、过短内容 if len(prompt) 2 or len(response) 5: continue # 去重重复问题直接跳过 if prompt in prompt_set: continue prompt_set.add(prompt) processed.append({ prompt: prompt, response: response }) return processed # 4. 执行数据处理 sft_data process_sft_data(raw_data) # 5. 保存为微调专用JSON格式 with open(sft_train_data.json, w, encodingutf-8) as f: json.dump(sft_data, f, ensure_asciiFalse, indent2) print(f数据集处理完成有效样本数量{len(sft_data)}) print(样本预览) for i in sft_data[:3]: print(i)3.3 代码运行结果解读1. 自动剔除所有空问答、无效脏数据2. 自动清洗多余空格、换行、乱码特殊符号3. 自动去除重复问题避免模型死记硬背4. 输出标准JSON文件可直接用于LoRA-SFT微调。四、适配Excel大批量数据实战企业常用实际项目中我们的问答数据大多存放在Excel表格中下面补充Excel批量读取清洗生成SFT数据集代码适配千条万条批量数据。import pandas as pd import json import re # 文本清洗函数复用 def clean_text(text): if pd.isna(text): return text str(text).strip().replace(\n, ).replace(\t, ) text re.sub(r\s, , text) text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9\\。\\\、\\\\], , text) return text # 读取Excel数据两列prompt、response df pd.read_excel(sft_raw_data.xlsx) raw_list [] for index, row in df.iterrows(): raw_list.append({ prompt: str(row[prompt]), response: str(row[response]) }) # 数据处理与保存 def process_sft_data(data_list): processed [] prompt_set set() for item in data_list: prompt clean_text(item[prompt]) response clean_text(item[response]) if len(prompt) 2 or len(response) 5: continue if prompt in prompt_set: continue prompt_set.add(prompt) processed.append({prompt: prompt, response: response}) return processed sft_data process_sft_data(raw_list) with open(excel_sft_train_data.json, w, encodingutf-8) as f: json.dump(sft_data, f, ensure_asciiFalse, indent2) print(fExcel批量处理完成有效样本数{len(sft_data)})使用说明新建Excel表格设置两列表头为 prompt、response填入所有问答数据和代码同目录放置即可一键生成标准数据集。五、数据集终极优化配比实战必用前文理论讲到的黄金配比本节落地执行70% 垂直行业专业数据 30% 通用对话数据代码实操小技巧1. 行业数据业务问答、专业知识、固定话术、结构化输出数据2. 通用数据日常聊天、常识问答、基础指令数据3. 混合后再次去重清洗保证数据均衡杜绝模型死板、失忆。六、数据集合格的5个验收标准运行代码生成数据集后对照以下标准自查合格再训练1.无脏数据无空问答、无乱码、无多余符号空格2.无重复数据所有问题唯一避免过拟合3.问答一一对应一个问题对应唯一标准答案4.长度均衡答案长短差距不大输出风格统一5.格式标准标准prompt-response JSON格式。七、本节实战总结1. 所有大模型SFT微调统一使用prompt-response问答格式2. 数据清洗核心是去空、去重、去乱码、均衡长度从根源杜绝过拟合、不收敛3. 支持手动录入小批量数据、Excel大批量数据两种生成方式适配所有项目场景4. 严格遵循7:3数据配比兼顾模型专业性和通用对话能力。八、下节预告下一篇为第十四篇LoRA微调完整代码实战使用本节生成的标准数据集从零运行完整训练代码手把手配置参数、启动训练、查看loss日志、保存LoRA权重完成端到端微调落地。专辑订阅提示全套大模型原理实战闭环教程零基础可复现持续更新微调、融合、量化、部署全流程实战内容