微调数据集(主流开源模型) 本文系统梳理模型微调SFT 偏好对齐领域的核心数据格式从 ShareGPT、Alpaca 到 ChatML、DPO涵盖格式设计哲学、最小化案例、推荐测试数据集并深入讲解如何脱离高级框架基于原生 Hugging Face API 手动准备“裸数据”。最后针对 Llama、Qwen、Mistral 等主流模型给出适配要点并提供企业级落地的商业建议。一、主流微调数据格式全景概览当前业界主要采用四种核心格式其本质差异在于任务抽象粒度与对齐目标侧重点的不同。格式名称核心字段结构适用场景商业价值Alpacainstruction,input,output指令微调经典范式。适合单轮、任务边界清晰的场景如信息抽取、格式化输出工程实现最简单但缺乏多轮上下文表达能力ShareGPTconversations列表fromvalue多轮对话系统。天然模拟真实对话流适用于聊天机器人、客服等场景保留上下文连续性但需处理角色映射ChatML (Messages)messages列表rolecontent当前行业事实标准。完美兼容多轮对话、System Prompt 设定及 Tool Calling连接业务逻辑与模型能力的最佳桥梁易与 OpenAI API 对接DPO / ORPOprompt,chosen,rejected偏好对齐训练。用于 RLHF 的替代方案直接优化模型对优质/劣质回答的偏好提升模型安全性、遵循复杂指令具有决定性商业价值核心认知现代微调框架如 Hugging Facetransformers已逐渐收敛于ChatML (Messages)格式。Alpaca 和 ShareGPT 通常作为原始数据格式存在在送入模型前都会被统一转换为 Messages 格式再通过 Tokenizer 的 Chat Template 进行最终序列化。二、核心格式详解与最小化案例为了快速验证数据管道以下提供各格式的最小化案例并推荐 Hugging Face 上体量极小、适合本地快速跑通流程的测试数据集。2.1 Alpaca 格式以“指令-输入-输出”三元组为核心强调任务定义的清晰性。当没有额外上下文时input字段可为空字符串。最小化案例单轮{instruction:将以下财务数据转换为 JSON 格式。,input:2025年营收5000万净利润800万。,output:{\revenue\: 50000000, \net_profit\: 8000000}}多轮扩展通过history字段{instruction:今天的天气怎么样,input:,output:今天的天气不错是晴天。,history:[[今天会下雨吗,今天不会下雨是个好天气。],[今天适合出去玩吗,非常适合空气质量很好。]]}推荐测试数据集数据集规模说明tatsu-lab/alpaca52K原始 Alpaca 英文数据集yahma/alpaca-cleaned52K清洗版 AlpacaHuggingFaceH4/no_robots~7K极轻量测试集高质量指令数据适合验证数据管道shibing624/alpaca-zh52K中文 Alpaca 指令数据2.2 ShareGPT 格式以“对话流”为核心强调角色交互的连续性。conversations数组平铺所有轮次通过from区分角色human/gpt/system等。详见前期调研。最小化案例{id:sample_001,conversations:[{from:human,value:什么是机器学习},{from:gpt,value:机器学习是AI的一个分支...}]}扩展角色支持函数调用{conversations:[{from:human,value:这件200块的裙子打8折后多少钱},{from:function_call,value:{\name\: \calculate_discount\, \arguments\: {\original_price\: 200, \discount_percentage\: 20}}},{from:observation,value:{\discounted_price\: 160}},{from:gpt,value:打8折后是160元。}]}推荐测试数据集数据集规模说明anon/ShareGPT_Vicuna_unfiltered90K原始 ShareGPT 数据mychen76/ShareGPT_V3_unfiltered_cleaned_small_9k9K清洗后小规模版本极适合快速实验2.3 ChatML (Messages) 格式这是目前最推荐的“中间态”裸数据格式。它通过role明确区分系统设定、用户输入与助手回复且兼容 OpenAI 标准。最小化案例{messages:[{role:system,content:你是一个专业的财务 AI 助手回答需严谨。},{role:user,content:解释一下 ROE 的计算公式。},{role:assistant,content:ROE净资产收益率 净利润 / 平均净资产 × 100%。它衡量了公司运用股东资本创造利润的效率。}]}推荐测试数据集数据集规模说明mlabonne/FineTome-100k100K标准 Messages 格式多样化场景可切片使用前1000条DataCreatorAI/Multi-Turn-Conversational-SFT~1.3K多轮对话极轻量pacozaa/alpaca-cleaned-chatml52KAlpaca 清洗版转换为 ChatML 格式2.4 DPO 偏好对齐格式包含同一提示词下的两个不同回复明确标注哪个是被选择的优质哪个是被拒绝的劣质。标准格式{prompt:如何优化 Python 爬虫的并发性能,chosen:建议使用 asyncio 结合 aiohttp 库实现异步并发或使用 concurrent.futures.ThreadPoolExecutor 进行多线程池管理注意控制并发量以避免被封禁。,rejected:你可以写一个 while True 循环里面不断发起 requests.get 请求这样速度最快。}对话式偏好格式适用于多轮{prompt:[{role:user,content:解释什么是量子计算}],chosen:[{role:assistant,content:量子计算是利用量子力学原理...}],rejected:[{role:assistant,content:量子计算就是很快的计算。}]}推荐测试数据集数据集规模说明Anthropic/hh-rlhf160K经典 RLHF 偏好数据集argilla/ultrafeedback-binarized-preferences-cleaned~60K推荐数据清洗二值化适合验证 DPO 损失计算建议切片使用前500条openai/summarize_from_feedback—OpenAI 摘要偏好数据三、格式选型建议速查表场景推荐格式理由通用单轮指令微调Alpaca结构简单生态最广几乎所有框架都支持多轮对话系统聊天机器人、客服ShareGPT或ChatML天然支持多轮角色清晰偏好对齐DPO/RLHFPreference (DPO)标准 chosen/rejected 结构与 OpenAI API 兼容或生产环境ChatML (Messages)可直接用于 GPT 系列微调易与业务逻辑对接快速验证数据管道小规模 Alpaca / ShareGPT / ChatML如 no_robots, 9K ShareGPT, FineTome-1000数据量小下载快速格式简单四、脱离高级框架手动准备微调裸数据的标准流程如果不使用 LLaMA-Factory 等封装工具您需要基于 Hugging Facetransformers原生 API 构建数据管道。核心目标是将原始 JSON 转换为模型可理解的input_ids并确保只有 Assistant 的回复部分参与 Loss 计算。以下是标准的四步工程化流程4.1 数据清洗与标准化无论原始数据是 ShareGPT、Alpaca 还是其他格式第一步必须是编写脚本将其统一映射为标准的messages列表格式即 ChatML。这是解耦数据源与模型架构的最佳实践。示例转换函数Alpaca → Messagesdefalpaca_to_messages(example):messages[]ifsysteminexampleandexample[system]:messages.append({role:system,content:example[system]})user_contentexample[instruction]ifexample.get(input):user_content\nexample[input]messages.append({role:user,content:user_content})messages.append({role:assistant,content:example[output]})return{messages:messages}ShareGPT → Messagesdefsharegpt_to_messages(example):role_map{human:user,gpt:assistant,system:system}messages[]forturninexample[conversations]:rolerole_map.get(turn[from],turn[from])messages.append({role:role,content:turn[value]})return{messages:messages}4.2 应用 Chat Template对话模板现代模型如 Llama 3, Qwen 2.5的 Tokenizer 内部已内置了专属的 Chat Template。切勿手动拼接字符串如硬编码|user|应始终调用apply_chat_template。fromtransformersimportAutoTokenizer tokenizerAutoTokenizer.from_pretrained(Qwen/Qwen2.5-7B-Instruct)messages[{role:user,content:你好},{role:assistant,content:你好有什么我可以帮你的}]# tokenizeFalse 返回拼接后的纯文本字符串用于检查模板是否正确texttokenizer.apply_chat_template(messages,tokenizeFalse,add_generation_promptFalse)print(text)# 输出Qwen|im_start|user\n你好|im_end|\n|im_start|assistant\n你好有什么我可以帮你的|im_end|4.3 Tokenization 与标签掩码Label Masking这是手动微调最关键的步骤。模型在训练时需要预测下一个 Token。但我们只希望模型学习如何生成 Assistant 的回复而不是学习如何复述用户的输入。因此必须将 User 和 System 部分的 Token ID 替换为-100PyTorchCrossEntropyLoss会默认忽略该值。实现方式一使用apply_chat_template的return_dict并手动掩码推荐importtorchdefpreprocess_function(examples):# 1. 应用模板并直接 tokenizedmodel_inputstokenizer.apply_chat_template(examples[messages],tokenizeTrue,return_dictTrue,add_generation_promptFalse)# 2. 创建 labels 副本labelsmodel_inputs[input_ids].clone()# 3. 掩码非 Assistant 部分# 更稳健的方法在应用模板时使用 return_tensorspt 并计算每个消息的 token 长度# 或采用官方的 mask_user_turns 逻辑。# 简化版基于角色标记位置需依据具体模型的特殊 token# 以 Qwen 为例assistant 回复通常以 |im_start|assistant\n 开始# 工程上建议使用 transformer 库提供的辅助函数transformers.models.llama.processing_llama.mask_user_turns# 此处仅为示意实际生产请参考官方实现。return{input_ids:model_inputs[input_ids],attention_mask:model_inputs[attention_mask],labels:labels}更稳健的实践使用datasets的map配合自定义函数精确掩码deftokenize_and_mask(examples):# 对每条消息分别 tokenize累加长度从而精准定位 assistant 的起始位置# 伪代码逻辑# 对于 messages 中的每条消息计算其 token 数量不含特殊标记# 累加得到每个 turn 在完整序列中的位置# 将 assistant 之前的 token 置为 -100pass实际生产中推荐参考 Hugging Face 官方示例中的mask_user_turns函数位于transformers/examples/pytorch/language-modeling/run_clm.py等或使用DataCollatorForSeq2Seq并配合tokenizer的return_special_tokens_mask参数来辅助掩码。4.4 构建 PyTorch Dataset将处理后的数据封装为标准 Dataset供 DataLoader 批量读取。fromtorch.utils.dataimportDatasetclassSFTDataset(Dataset):def__init__(self,encoded_data):self.encoded_dataencoded_data# 字典input_ids, attention_mask, labelsdef__len__(self):returnlen(self.encoded_data[input_ids])def__getitem__(self,idx):return{input_ids:torch.tensor(self.encoded_data[input_ids][idx]),attention_mask:torch.tensor(self.encoded_data[attention_mask][idx]),labels:torch.tensor(self.encoded_data[labels][idx])}五、针对不同主流模型的裸数据适配策略不同厂商的模型在底层 Tokenizer 和特殊 Token 设计上存在差异。准备裸数据时必须严格遵循目标模型的规范。模型系列特殊 Token适配要点Llama 3 / 3.1(Meta)begin_of_textQwen 2.5 / 3(阿里)im_startMistral(Mistral AI)无显式特殊分隔符依赖 Chat Template推荐使用 OpenAI Messages 格式通过apply_chat_template处理。官方示例为 JSONL 格式。Baichuan 2(百川)用户令牌、助手令牌内部推荐类 ShareGPT 格式human和assistant角色被自动映射。需参考官方脚本处理模板。DeepSeek(深度求索)Alpaca 格式官方推荐instruction和input拼接后作为输入output作为标签。需手动编写预处理函数。通用建议始终使用目标模型的Instruct/Chat 版本的 Tokenizer该版本已经内置了正确的 Chat Template。调用tokenizer.apply_chat_template时确保设置正确的参数并检查生成的文本是否符合预期。六、商业与工程视角的落地建议在企业级 AI 落地中数据准备不仅是技术活更是战略环节。以下建议有助于提升微调项目的投资回报率ROI6.1 数据质量远胜于数量Data-Centric AI在垂直领域如财务、医疗1,000 条由领域专家精心标注、逻辑严密的高质量数据其微调效果往往碾压 100,000 条从网上爬取的通用噪音数据。应将资源倾斜于数据清洗、去重和人工校验环节。6.2 严格的数据脱敏与合规审查微调数据极易包含企业机密或个人身份信息PII。在构建数据集前必须引入自动化脱敏管道如使用正则或小型 NER 模型替换姓名、账号、金额避免模型在推理时发生“训练数据记忆泄露”引发合规风险。6.3 构建“数据飞轮”迭代闭环微调不应是一次性工程。应建立线上 Bad Case 收集机制将用户在生产环境中对模型回答的“点踩”或“修改”记录自动转化为新的 DPO 或 SFT 训练样本。通过持续的小步快跑式微调使模型能力与业务需求动态对齐。6.4 优先评估 RAG谨慎选择微调如果业务需求仅仅是让模型“知道”最新的财报数据或内部规章制度检索增强生成RAG是成本更低、更新更灵活的方案。微调应保留用于改变模型的“行为模式”、“输出格式”或“学习特定领域推理逻辑”等 RAG 无法解决的场景。七、总结要点说明格式收敛ChatML (Messages) 正成为事实标准Alpaca 和 ShareGPT 可转换为此格式手动准备的核心标准化 → 应用 Chat Template → 掩码非 Assistant 部分 → 构建 Dataset模型适配不同模型有不同特殊 token务必使用其 Instruct 版 Tokenizer 的apply_chat_template测试数据集使用no_robotsAlpaca、ShareGPT_V3_..._9kShareGPT、FineTome-100k切片、ultrafeedback-binarizedDPO快速验证商业智慧质量数量脱敏不可少数据飞轮持续迭代RAG 与微调各司其职通过掌握上述从原始数据到 Token 掩码的完整底层逻辑您将不再受限于任何特定的微调框架能够针对企业独特的业务场景灵活构建高效、可控的模型迭代管道。2026-07-21二