【AI大模型微调】第 4 章 微调数据准备
第 4 章 微调数据准备
在微调大语言模型时,数据是决定模型性能与适用性的关键因素。模型表现,很大程度上取决于其训练数据的质量。根据数据的来源与可访问性,通常可分为两大类:公共数据源与私有数据源。
4.1 公共数据源
公共数据集易于获取,通常是绝佳的起点,常用的数据共享平台有:
- Hugging Face Hub
Hugging Face Hub 是一个不可或缺的资源,它托管了数千个数据集,这些数据集可以通过 datasets 库轻松访问。用户可以根据任务类型(如文本生成、文本摘要等)、语言以及数据集的许可证进行筛选,从而快速找到符合需求的数据。
- Model Scope
ModelScope 是阿里巴巴旗下的模型开放平台,提供了一系列高质量的开源模型与数据集。ModelScope 的数据集覆盖了多个领域,包括但不限于自然语言处理、计算机视觉和多模态任务。
4.2 私有数据源
私有数据源是指企业或组织内部拥有的数据集,这些数据可能受到版权保护或隐私限制,仅限于内部使用或特定授权范围内使用。以下是常见的私有数据源:
- 企业内部文档: 包括公司的历史文件、报告、邮件、会议记录等,这些数据可以用来训练模型以更好地理解公司业务流程和专业知识。
- 客户反馈数据: 来自客户的评论、投诉、建议等信息,可以帮助企业改进产品和服务质量。
- 专有数据库: 某些行业可能拥有专门构建的数据库,如医疗健康领域的电子病历、金融领域的交易记录等。
私有数据通常并非专为模型微调而准备,因此在使用前往往需要经过清洗、结构化和标注等预处理步骤。为了构建高质量的领域特定训练集,企业可以根据实际需求,由内部专业团队或外部众包平台对原始数据进行系统化整理与标注。
此外,还可以借助自动化工具提升整体效率,例如使用 Easy Dataset 等开源方案。在人机协同的工作模式下,企业能够更高效地将私有知识转化为高质量的微调数据,从而更有力地支撑模型在特定业务场景中的性能提升。
4.3 数据集格式
在大型语言模型的监督微调中,数据集的构建格式至关重要,常见的格式可分为两类:指令式 与 对话式。
4.3.1 指令式
指令式数据集用于训练模型执行明确的单轮任务,如翻译、摘要或问答。其典型格式源自斯坦福大学的 Alpaca 项目,结构简洁、易于使用。
其每条样本包含三个字段:
- instruction:描述模型需要执行的任务;
- input:任务所需的上下文或附加信息;
- output:模型应生成的正确回答。
例如:
{
“instruction”: “将以下英文翻译成中文”,
“input”: “Large language models are transforming AI.”,
“output”: “大语言模型正在改变人工智能。”
}
训练时,这些字段通常会通过一个提示模板(prompt template)组合成结构统一的输入字符串,以帮助模型更好的学习任务指令。
指令:
{instruction}
输入:
{input}
回复:
{output}
4.3.2 对话式
对话式数据集用于训练模型进行多轮对话,例如聊天机器人、虚拟助手等。这类数据通常以消息序列的形式组织,强调发言者角色与对话流程。目前广泛采用的格式主要有 ShareGPT 格式 和 OpenAI 格式。
1)ShareGPT 格式
ShareGPT 格式源于用户在社区中分享的与 ChatGPT 的真实对话记录,常用于保存多轮对话数据集。
每条数据样本由一个名为 conversations 的列表构成,列表中的每个元素代表一次发言,包含两个关键字段:
- from:标识发言者的角色,通常取值为 “human”(表示用户)或 “gpt”(表示模型助手);
- value:该轮对话的具体文本内容。
例如:
{
“conversations”: [
{
“from”: “human”,
“value”: “你能解释一下什么是机器学习吗?”
},
{
“from”: “gpt”,
“value”: “机器学习是人工智能的一个分支,它允许计算机系统通过数据和经验自动改进其性能。”
},
{
“from”: “human”,
“value”: “它主要有哪些类型?”
},
{
“from”: “gpt”,
“value”: “主要类型包括监督学习、无监督学习、半监督学习和强化学习等。”
}
]
}
2)OpenAI 格式
OpenAI 格式是 OpenAI 官方在其 API 微调功能中推广的一种通用消息列表格式,兼具灵活性与表达力,可同时支持单轮和多轮对话。
每个训练样本是一个包含 messages 字段的字典,其中 messages 是一个有序列表,每条消息包含以下字段:
- role:发言者角色,常见值包括:system、user和assistant。
- content:消息的具体文本内容。
例如:
{
“messages”: [
{
“role”: “system”,
“content”: “你是一名专业的营养师。你的回答应基于科学知识,提供务实、健康的建议,并避免提供任何医疗诊断。”
},
{
“role”: “user”,
“content”: “我最近感觉下午很疲惫,有什么健康的零食推荐吗?”
},
{
“role”: “assistant”,
“content”: “下午感到疲惫是常见的现象,选择正确的零食可以帮助稳定能量水平。以下是一些推荐:\n1.一把坚果和干果:提供健康的脂肪、蛋白质和天然糖分,能快速补充能量。\n2.希腊酸奶:富含蛋白质,能提供持久的饱腹感。\n3.一个苹果或一根香蕉:富含维生素和膳食纤维,是方便的天然能量来源。\n请记得结合充足的水分摄入,因为脱水也会导致疲劳。”
}
]
}
在实际训练中,无论采用哪种原始格式,通常都会通过 Chat Template(例如ChatML)将多轮消息组织成结构统一的字符串,确保模型能够正确解析对话结构并学习交互模式。这一标准化步骤对于提升模型的对话理解与生成能力至关重要。