大模型数据集的深入认识和微调数据集的构建流程
文章目录
- 说明
- 一 数据至上
- 1.1 数据主宰模型能力的核心原因
- 1.2 数据驱动模型历程
- 1.2.1 词向量时代(2013-2017)
- 1.2.2 预训练-微调范式兴起(2018-2019)
- 1.2.3 大规模预训练时代(2020-2022)
- 1.2.4 对齐与指令微调时代(2022至今)
- 1.3 不同阶段数据的关键作用
- 1.3.1 预训练阶段:打造基础认知
- 1.3.2 微调阶段:塑造行为模式
- 1.3.3 强化学习阶段:引导价值判断
- 1.4 数据为王的核心论证
- 1.5 结语
- 二 模型阶段划分数据
- 2.1 监督微调(SFT)数据:塑造行为模式
- 2.2 强化学习数据:价值观校准
- 2.3 思维链(CoT)数据:构建推理框架
- 2.4 专业领域数据:垂直能力构建
- 2.5 评估与校准数据:性能诊断
- 2.6 阶段分类的原因
- 2.7 数据定义可能性边界
- 三 数据格式划分
- 3.1 原始文本格式(预训练数据)
- 3.2 指令-回复对格式(SFT数据)
- 3.3 多轮对话格式(交互训练数据)
- 3.4 思维链(CoT)格式(推理训练数据)
- 3.5 偏好数据格式(RLHF训练数据)
- 3.6 代码数据格式(编程能力训练)
- 3.7 工具使用数据格式(工具调用训练)
- 3.8 数据格式的深层意义
- 四 各个阶段数据
- 4.1 预训练数据
- 4.2 SFT数据
- 4.3 偏好数据
- 4.4 思维链数据
- 五 微调数据集的构建流程
- 5.1 数据来源收集
- 5.2 数据预处理
- 5.3 数据筛选与质量控制
- 5.4 数据标注与转化
- 5.5 数据集构建与验证
- 5.6 迭代优化
说明
- 本文内容学自网络,仅供学习和交流使用,最终著作权归原作者所有。
一 数据至上
1.1 数据主宰模型能力的核心原因
- 大模型是统计学习系统:大语言模型的本质是从海量文本中学习概率分布的统计系统。模型并不"理解"内容,而是通过观察数十亿文本样本,学习词语和概念之间的统计关联。因此,如果某种知识、行为或模式不存在于训练数据中,模型就不可能真正掌握它。
- 大模型"知识"的唯一来源:大语言模型的知识没完全从数据中提取。数据质量和覆盖面直接决定了模型的知识边界。如果训练数据中缺乏某个领域的信息(如冷门学科或小语种),模型在这些领域的表现必然受限。
- 涌现能力的基础:大模型最惊人的"涌现能力"(如复杂推理、代码编写等)也是建立在数据基础上的。这些能力之所以在模型规模达到一定阈值后突然出现,是因为数据中包含了大量的隐含模式和关联,只有当模型容量足够大时才能捕捉到这些模式。没有足够丰富和高质量的数据,即使模型规模再大、算法再先进,也无法产生这些涌现能力。
1.2 数据驱动模型历程
1.2.1 词向量时代(2013-2017)
- 使用中等规模语料库训练词嵌入模型
- 数据量级:千万至数十亿词级别
- 数据处理:简单的文本清洗和预处理
- 代表技术:Word2Vec, GloVe, FastText
- 数据影响:词向量质量直接取决于语料库大小和质量
- 影响含义:这一阶段,数据主要影响词汇表示的质量和语义捕捉能力
- 详细解释:
- 高频词在数据中出现次数多,获得更准确的向量表示
- 数据规模直接决定罕见词的表示质量
- 此阶段数据主要影响词级别的语义理解,不足以支持复杂推理
1.2.2 预训练-微调范式兴起(2018-2019)
- 使用大规模无标注文本进行预训练,少量标注数据微调
- 数据量级:数十至数百亿词级别
- 数据处理:更严格的清洗和结构化
- 代表模型:BERT, GPT-1, GPT-2, RoBERTa
- 数据影响:预训练数据的多样性开始显著影响模型通用能力
- 影响含义:该阶段数据开始影响模型的语境理解把握能力
- 详细解释:
- 出现明显的迁移学习效应,预训练数据间接影响下游任务
- BERT等模型的成功证明了无标注数据的价值
- 数据影响从词级扩展到句子和段落级别的理解
1.2.3 大规模预训练时代(2020-2022)
- 数据规模呈指数级增长
- 数据量级:万亿词级别
- 数据处理:复杂的过滤流程,去重和质量控制
- 代表模型:GPT-3, PaLM, Gopher, Chinchilla, LLaMA
- 数据影响:发现最优数据量与参数量比例,提出数据效率理论
- 影响含义:数据开始全面塑造模型的知识基础和通用能力
- 详细解释:
- 数据规模达到临界点,触发能力涌现现象
- 发现数据分布比绝对数量更重要
- 长文本在数据中的比例影响模型的长程理解能力
- 训练数据中包含的知识范围直接决定了模型的知识边界
- 此阶段数据影响扩展到文档级理解和基础推理能力
1.2.4 对齐与指令微调时代(2022至今)
- 高质量人类反馈数据和指令数据成为焦点
- 数据量级:高质量指令数据数百万至数千万条
- 数据处理:人类标注、强化学习及混合数据策略
- 代表模型:ChatGPT, Claude, GPT-4, Gemini
- 数据影响:对齐数据质量决定模型安全性和有用性
- 影响含义:数据开始精确调控模型的行为模式和安全边界
- 详细解释:
- RLHF数据直接塑造模型对人类意图的理解和回应方式
- 人类反馈数据建立模型的价值观和安全边界
- 少量高质量数据能显著改变模型行为,证明数据质量的重要性
- 数据影响扩展到复杂推理、人际互动和价值判断层面
- 此阶段揭示了"数据引导"比"架构创新"对模型行为影响更大
1.3 不同阶段数据的关键作用
1.3.1 预训练阶段:打造基础认知
- 预训练数据决定了模型的基础知识和语言理解能力。这一阶段使用的通常是无标签的原始文本,模型通过预测下一个词或填充缺失内容来学习语言规律。
- 预训练数据的多样性和质量直接影响模型的通用理解能力和知识范围。这就像人类的基础教育和广泛阅读,奠定了认知基础。
1.3.2 微调阶段:塑造行为模式
- SFT数据(指令-回复对)教会模型如何按照人类期望的方式行动。这一阶段的数据质量尤为重要,因为它直接塑造了模型的回答风格、行为准则和价值取向。
- 优质的SFT数据让模型从"知道很多"转变为"会有用地回答",就像教会一个博学多才但不懂社交的人如何有效沟通。
1.3.3 强化学习阶段:引导价值判断
- 偏好数据教会模型理解人类的价值判断标准,帮助模型在多个可能的回答中选择最符合人类期望的那一个。
- 这一阶段的数据对模型的"人格特质"有决定性影响,决定了模型是否安全、有帮助、诚实,以及如何平衡这些有时相互冲突的目标。
1.4 数据为王的核心论证
- 知识来源论:模型所有知识只能来自训练数据,数据中不存在的知识模型无法凭空创造
- 能力上限论:算法和算力可以更高效地利用数据中的信息,但无法超越数据本身的信息上限
- 行为塑造论:模型的行为模式、交互风格和价值取向完全由训练数据决定
- 差异化论:当算法和架构趋同时,数据成为模型性能和特色的主要区分因素
- 涌现能力论:复杂能力的涌现需要数据中包含相应的隐含模式和范例
1.5 结语
- 数据在大语言模型中的核心地位不仅是技术原因,更是根本性的原则:AI只能反映它所学习的世界。无论算法多么先进,训练过程多么精细,模型的本质仍然是数据的镜像。正因如此,理解、获取和处理高质量数据将继续成为大语言模型发展的决定性因素。
- 所谓"算法是手段,数据是灵魂",这句话在大语言模型领域体现得淋漓尽致。
二 模型阶段划分数据
- 本质定义:预训练数据是大模型接触的第一类数据,包含无标签的原始文本,用于构建模型的基础认知和语言理解能力。
- 深层原理
- 统计学习原理:模型通过数十亿文本样本,学习词语、概念和知识间的概率分布,形成基础语言模型。
- 自监督机制:通过预测上下文或缺失部分,模型在没有人类标注的情况下自主学习语言规律。
- 知识编码过程:预训练是将人类集体知识编码进神经网络权重的过程。
2.1 监督微调(SFT)数据:塑造行为模式
- 本质定义:SFT数据是带有明确标签的指令-回复对,目的是教会模型如何将其知识转化为有用的回应,塑造模型的交互行为。
- 深层原理
- 意图-行为映射:建立人类指令与理想响应之间的直接关联。
- 能力激活:许多预训练阶段获取的潜在能力需要SFT数据来"唤醒"和"引导"。
- 行为模板学习:模型学习的不仅是内容,更是回答的结构、风格和思考方式。
2.2 强化学习数据:价值观校准
- 本质定义:强化学习数据主要是偏好数据,包含对同一问题多个回答的人类排序或评分,用于教模型理解什么是"好回答"。
- 深层原理
- 价值函数构建:通过人类反馈构建内部奖励函数,指导模型行为优化
- 多目标平衡学习:学习如何平衡帮助性、安全性、真实性等多个目标
- 隐式规范内化:将难以明确定义的人类偏好转化为模型的内部决策标准
关键特征
- 主观性:反映人类主观价值判断,而非客观事实
- 文化敏感性:不同文化背景的偏好可能存在显著差异
- 评判标准多元:同时考虑实用性、安全性、友好性等多维度
2.3 思维链(CoT)数据:构建推理框架
- 本质定义:思维链数据包含问题、详细推理过程和答案,专门用于训练模型的逐步推理能力和问题解决能力。
- 深层原理
- 认知过程外显化:将通常隐含的思考过程明确展示给模型学习
- 元认知能力培养:教导模型"如何思考"而非仅"知道什么"
- 归纳偏置植入:向模型灌输结构化问题解决的思维框架
关键特征
- 过程导向:重视推理过程甚于最终答案
- 分解复杂性:将复杂问题分解为可管理的小步骤
- 领域特异性:不同领域有其特定的推理方法和模式
2.4 专业领域数据:垂直能力构建
- 本质定义:专业领域数据聚焦于特定专业领域(如医疗、法律、金融)或特定能力(如编程、工具使用),用于深化模型在特定场景的专业能力。
- 深层原理
- 领域知识密集学习:集中学习特定领域的专业知识和术语体系。
- 专业推理模式适应:掌握领域特有的思维方式和问题解决范式。
- 工具思维构建:理解如何将语言理解转化为具体工具操作。
关键特征
- 高专业性:通常需要领域专家参与创建和验证。
- 结构特异性:可能具有特定领域独有的数据结构。
- 稀缺性:高质量专业数据通常较为稀缺和昂贵。
2.5 评估与校准数据:性能诊断
- 本质定义:评估数据是用于测试模型各方面能力和发现潜在问题的标准化测试集,包括基准测试和安全测试等。
- 深层原理
- 能力边界探测:系统性探索模型在各种任务上的表现极限。
- 失效模式发现:识别模型容易出错或失效的特定情景。
- 比较基准建立:提供客观比较不同模型性能的标准。
关键特征
- 客观性:通常有明确的评分标准和参考答案。
- 挑战性:包含足够难度以区分不同模型的能力。
- 全面覆盖:测试各种能力维度和应用场景。
2.6 阶段分类的原因
模型分阶段学习反应了
- 基础知识层(预训练):建立基本概念和关联
- 应用能力层(SFT):学习将知识用于解决问题
- 价值判断层(RLHF):发展评价和决策能力
- 思维方法层(CoT):掌握结构化思考方法
- 专业精通层(专业数据):深化特定领域能力
不同阶段数据的获取难度和价值呈明显梯度:
- 预训练数据:获取相对容易,但需大规模处理
- SFT数据:需要质量控制,成本中等
- RLHF数据:需要人类判断,成本高昂
- 专业数据:需要领域专家,极为稀缺
模型训练必须采取从通用到特殊、从大规模到精细化的策略。
2.7 数据定义可能性边界
- 大语言模型训练数据的本质是在定义模型的"可能性空间"——模型不可能超越其训练数据所隐含的能力边界。每类数据都在特定维度上拓展这一边界:
- 预训练数据:定义了知识边界
- SFT数据:定义了行为边界
- 偏好数据:定义了价值边界
- CoT数据:定义了思维边界
- 专业数据:定义了专业边界
理解这一点对于认识大语言模型的本质至关重要:它们本质上是数据的投影,而非独立的智能体。数据不仅仅是"训练材料",而是模型能力和行为的根本决定因素。
三 数据格式划分
3.1 原始文本格式(预训练数据)
- 纯文本形式,无特定标签或结构,通常按段落或文档组织。
人工智能是计算机科学的一个分支,它致力于创造能够模拟人类智能的系统。 自20世纪50年代以来,这一领域经历了多次发展浪潮,从早期的专家系统到如今的深度学习技术。 近年来,大型语言模型的出现标志着人工智能发展的新阶段...
深层特点
- 无监督性:没有明确的问题-答案结构
- 连续性:自然流动的文本,保留原始语境
- 多样性:包含各种主题、风格和语言形式
- 隐含知识:知识以隐含方式存在于文本中
原始文本是知识的原始载体,模型通过预测任务从中提取语言规律和世界知识。这种格式的价值在于其广泛覆盖和自然呈现的信息,使模型能建立基础的语言理解能力。
3.2 指令-回复对格式(SFT数据)
- 明确的指令和对应高质量回复组成的配对数据。
{"instruction": "解释量子计算的基本原理并举例说明其潜在应用","response": "量子计算是基于量子力学原理的计算范式。与经典计算使用的比特不同,量子计算使用量子比特(qubit),它可以同时处于多个状态的叠加。这种特性使量子计算机在某些特定问题上具有显著优势。" }
深层特点
- 指令性:明确的任务导向结构
- 示范性:展示理想的回答方式和标准
- 隐含规则:通过例子传递回答的隐含规范
- 双向关系:建立特定输入与理想输出的映射
指令-回复对格式将无形的"如何回答"规则显性化,教会模型将知识转化为有用的回答。这种格式的价值在于它创建了从人类意图到AI行为的直接映射,奠定了模型作为助手的基础能力。
3.3 多轮对话格式(交互训练数据)
- 模拟用户和助手之间的多轮交互,保留完整对话历史。
[{"role": "user", "content": "我想了解人工智能对就业市场的影响"},{"role": "assistant", "content": "人工智能对就业市场的影响是复杂且多层面的。一方面,它可能导致某些重复性工作的自动化,另一方面也创造了新的工作岗位和行业。您想了解具体哪个方面?比如特定行业的影响,或者未来就业趋势?"},{"role": "user", "content": "我主要关心AI对医疗行业就业的影响"},{"role": "assistant", "content": "在医疗行业,AI的影响表现为双重性:可能减少的岗位,可能增加的岗位。整体而言,AI更可能改变医疗工作的性质,而非完全取代医疗专业人员。医生将把更多时间用于复杂决策、患者沟通和同理心工作,而非数据处理和常规诊断。"}
]
深层特点
- 上下文连贯性:保存并利用之前交流的信息
- 交互动态性:展示对话如何演进和适应
- 渐进式深入:从一般到具体的信息递进
- 关系构建:体现如何维持持续有效的对话
- 多轮对话格式训练模型维持连贯对话的能力,理解上下文,并根据对话历史调整回应。这种格式的价值在于它使模型能够进行真正的交互,而非简单的问答,创造更自然的用户体验。
3.4 思维链(CoT)格式(推理训练数据)
- 问题、详细的推理过程和最终答案三部分组成。
{"question": "小明有12个苹果,他给了小红3个,小红又给了小华2个,小华还给小明1个。请问小明现在有多少个苹果?","reasoning": "让我们逐步分析:\n1. 初始状态:小明有12个苹果\n2. 小明给了小红3个苹果:12 - 3 = 9,此时小明有9个苹果\n3. 小红给了小华2个苹果:这一步不影响小明的苹果数量\n4. 小华还给小明1个苹果:9 + 1 = 10,此时小明有10个苹果\n\n因此,小明最终有10个苹果。","answer": "10个苹果"
}
深层特点
- 过程显性化:将思考过程完整展示
- 逐步分解:将复杂问题拆分为可管理的步骤
- 逻辑透明化:明确展示从前提到结论的推理链
- 自我校正:通过显示每一步来允许错误检测
思维链格式教会模型"如何思考",培养模型的逻辑推理和问题解决能力,使其能够处理需要多步思考的复杂问题,同时提高模型输出的可解释性。
3.5 偏好数据格式(RLHF训练数据)
- 同一提示的多个回答版本,以及人类对这些回答的偏好评价。
{"prompt": "请解释气候变化的主要原因及其影响","completion_A": "气候变化主要是由人类活动引起的,特别是温室气体排放增加。影响包括气温上升、极端天气事件增多等。","completion_B": "气候变化是由多种因素导致的全球现象,主要原因包括:1. 人为因素2. 工业活动3. 农业活动:如稻田甲烷排放和牲畜养殖\n\n主要影响包括:\n- 全球平均温度上升\n- 极端天气事件(如干旱、洪水、热浪)频率增加\n- 海平面上升威胁沿海地区\n- 生物多样性丧失\n- 农业生产受影响,可能导致粮食安全问题\n- 健康风险增加,如热相关疾病和传染病扩散\n\n应对气候变化需要全球合作,包括减少碳排放和发展可再生能源。","chosen": "B","reason": "回答B更全面详细,不仅列出了多种气候变化的原因,还系统地解释了各种影响,并提供了解决方向。相比之下,回答A过于简短,缺乏具体信息和系统性。"
}
深层特点
- 比较评价:通过相对比较而非绝对标准来学习
- 质量层次:展示不同质量级别的回答
- 价值判断:隐含人类对"好回答"的标准
- 多维评估:反映对准确性、详尽性、有用性等的综合判断
偏好数据格式让模型理解什么是"更好的回答",而这往往难以通过明确规则定义。这种格式的价值在于通过实例比较传递隐含的质量标准和价值判断,使模型能够对齐人类偏好。
3.6 代码数据格式(编程能力训练)
编程问题描述与相应的代码解决方案。
{"problem": "编写一个函数,接受一个整数数组和一个目标值,返回数组中两个数的索引,这两个数的和等于目标值。假设每个输入只有一个解决方案,且不能使用同一个元素两次。","solution": "def two_sum(nums, target):\n seen = {}\n for i, num in enumerate(nums):\n complement = target - num\n if complement in seen:\n return [seen[complement], i]\n seen[num] = i\n return None\n\n# 测试\nprint(two_sum([2, 7, 11, 15], 9)) # 应输出 [0, 1]","explanation": "这个解决方案使用哈希表(字典)来存储已经遍历过的数字及其索引。对于每个当前数字,我们计算出与目标值的差(complement),并检查这个差是否已在哈希表中。如果找到了匹配,就返回两个索引;否则将当前数字及其索引添加到哈希表中。这种方法的时间复杂度为O(n),空间复杂度也为O(n),比暴力搜索的O(n²)时间复杂度更高效。"
}
深层特点
- 结构化输出:代码需遵循严格的语法规则
- 算法思维:展示问题解决的算法逻辑
- 效率考量:通常包含对时间和空间复杂度的思考
- 可验证性:代码可通过执行来验证其正确性
代码数据格式培养模型的编程和算法思维能力。这种格式的价值在于它教会模型在严格规则约束下生成结构化、可执行的输出,同时理解算法设计的核心原则。
3.7 工具使用数据格式(工具调用训练)
问题、所需工具识别、工具调用过程和最终结果的完整流程。
{"query": "深圳明天的天气如何?我需要带伞吗?","thinking": "这个问题需要查询天气信息。我应该使用天气查询API来获取深圳明天的天气预报,然后根据是否有雨来回答是否需要带伞。","tool_calls": [{"tool_name": "get_weather","tool_parameters": {"location": "深圳","date": "tomorrow"}}],"tool_results": {"weather": "多云转小雨","temperature": "22°C-26°C","precipitation_probability": "60%","details": "明天下午有小雨"},"final_response": "深圳明天天气预报是多云转小雨,温度在22°C到26°C之间,下午有小雨,降水概率为60%。建议您带伞,特别是如果您计划在下午外出。"
}
深层特点
- 工具识别:判断何时需要使用外部工具
- 参数设计:确定调用工具所需的正确参数
- 结果整合:将工具返回的结果融入连贯回答
- 多步决策:可能涉及多个工具的顺序调用
工具使用数据格式训练模型识别何时以及如何使用外部工具来增强其能力。这种格式的价值在于它打破了模型仅依赖内部知识的限制,使其能够访问实时信息和执行具体操作,极大扩展了应用场景。
3.8 数据格式的深层意义
- 不同格式不仅是技术需求,更反映AI系统学习的本质特点:
- 形式决定认知 每种格式代表了特定类型的认知能力:
- 原始文本:基础知识获取能力
- 指令-回复对:任务执行能力
- 思维链:推理和问题解决能力
- 偏好数据:价值判断能力
- 结构塑造功能 数据格式的结构直接塑造了模型的功能边界:
- 严格结构化格式(如代码)训练精确输出能力
- 开放式格式训练创造性表达
- 多轮结构训练记忆和上下文处理能力
- 多样性创造通用性 不同格式的组合培养了模型的通用智能:
- 单一格式只能训练单一能力
- 格式的多样性创造了模型的功能多样性
- 格式间的交叉互补形成更完整的能力谱系
四 各个阶段数据
4.1 预训练数据
- 预训练数据是用于大语言模型初始训练阶段的原始文本数据。这个阶段让模型学习语言的基本规则和结构、词汇之间的关联性、世界知识和常识、基本推理能力。
| 数据类型 | 预训练数据 | 微调数据(SFT) | 偏好数据(RLHF) |
|---|---|---|---|
| 格式 | 普通文本段落 | 指令-回复对 | 多个回答的偏好排序 |
| 数量级 | TB级(万亿词元) | GB级(百万样本) | MB级(万样本) |
| 来源 | 互联网、书籍等 | 人工创建 | 人工评价 |
| 目的 | 学习语言和知识 | 学习遵循指令 | 学习价值判断 |
- 最基础的预训练数据是纯文本,没有特殊标记或结构。如:深度学习是机器学习的一个分支,它基于人工神经网络架构。深度学习模型能够从大量数据中学习特征表示,无需人工特征工程。近年来,深度学习在计算机视觉、自然语言处理等领域取得了突破性进展。
- 文件存储的格式可以是纯文本、json格式、Parquet/TFRecord、预处理后的标记格式。
- 纯文本文件:深度学习是机器学习的一个分支,它基于人工神经网络架构。
- JSON Lines格式 (常用于包含元数据):{“text”: “这是第一个文档”, “meta”: {“source”: “新闻”, “date”: “2022-01-01”}}。
- Parquet/TFRecord** (用于高效存储和读取):二进制格式,支持列式存储和压缩,通常用于大规模分布式训练。
- 预处理后的标记格式:有些数据集直接存储为标记化后的ID序列。例如:
[1045, 2003, 1037, 2653, 3012, 1012]
- 数据组织级别分别为文档级、段落级、句子级。
- 文档级:完整的文章、报告或书籍章节,保留长距离语义和上下文结构。
- 段落级:独立的段落或短文,便于混洗和批处理。
- 句子级:个别句子或短语,适用于某些特定训练任务。
数据量与模型大小关系:
| 模型规模 | 最小推荐数据量 | 理想数据量 |
|---|---|---|
| 1B参数 | 50-100GB | 200GB+ |
| 10B参数 | 500GB | 1TB+ |
| 100B参数 | 5TB | 10TB+ |
实际示例:
- GPT-3(175B): 训练数据约45TB,300B词元。
- LLaMA(65B): 训练数据约1.4T词元。
- 预训练数据极具多样性,包含领域多样性(科学技术、专业领域、日常生活……)、语言风格多样性(学术论文风格、文学创作风格……)、难度层次多样性(初级知识、高级概念、简单叙述、复杂推理……)。
4.2 SFT数据
- SFT数据的核心格式是"指令-回复"对。有些指令需要提供额外上下文,此时格式会包含上下文字段。
{"instruction": "用户的指令或问题","response": "模型应该生成的回答" }{"instruction": "总结以下文本的主要观点","context": "人工智能的发展正在加速。2022年,生成式AI取得突破性进展,ChatGPT的发布标志着大型语言模型进入公众视野。这些模型显示出令人印象深刻的语言理解和生成能力,引发了关于其潜在应用和风险的广泛讨论。许多专家认为,监管框架需要跟上技术发展步伐,但同时不应阻碍创新。企业、政府和学术界正在努力平衡AI的发展与确保其安全、公平和透明使用的需求。","response": "这段文本的主要观点包括:\n\n1. 人工智能尤其是生成式AI在2022年取得了重大突破,ChatGPT的发布使大型语言模型进入公众视野\n\n2. 这些AI模型展示了强大的语言理解和生成能力\n\n3. 技术进步引发了对AI应用和风险的广泛讨论\n\n4. 存在平衡监管与创新的挑战\n\n5. 各方利益相关者正努力确保AI发展既能推动创新又能保证安全、公平和透明" } - 同一格式下的多样内容类型,最基本的SFT数据是单轮的指令-回复对,通常以JSON格式存储。 思维链(CoT)数据、工具调用数据、多轮对话数据、代码生成数据、创意写作数据。
- SFT数据的结构特点为结构一致、指令多样,交互特点为意图理解、上下文感知。
在实际构建SFT数据集时,可以灵活设置内容和比例:
- 能力定制:根据需要强化特定能力,如增加思维链数据以提升推理能力。
- 领域适应:在保持格式一致的情况下,调整内容领域分布。
- 比例控制:调整不同内容类型的比例,如:
- 50% 基础问答
- 20% 多轮对话
- 15% 思维链推理
- 10% 工具调用
- 5% 代码生成
- 渐进增强:可以从简单的问答开始,逐步加入更复杂的内容类型。
- SFT数据输入与解析
- 多轮对话:多轮对话数据需要保留上下文信息,以便模型理解对话的连续性。
MULTI_TURN_PROMPT_TEMPLATE = """ <|system|>你是一个有帮助的AI助手。</|system|> <|user|>用户:{user_turn_1}</|user|> <|assistant|>助手:{assistant_turn_1}</|assistant|> <|user|>用户:{user_turn_2}</|user|> <|assistant|>助手:{assistant_turn_2}</|assistant|> ... <|user|>用户:{current_user_turn}</|user|> <|assistant|>助手: """ - 工具调用:工具调用数据需要明确标识工具的使用和参数。可以使用特定标记或自然语言描述。
TOOL_CALL_PROMPT_TEMPLATE = """ <|system|>你是一个有帮助的AI助手。</|system|> <|user|>用户:{instruction}</|user|> <|assistant|>助手:我将使用{tool_name}工具来获取信息。 <|tool_call|> 工具名称:{tool_name} 参数:{parameters} <|tool_call_end|> 助手:{response} """ - 思维链(CoT):思维链数据需要展示推理过程的每一步。
COT_PROMPT_TEMPLATE = """ <|system|>你是一个有帮助的AI助手。</|system|> <|user|>用户:{instruction}</|user|> <|assistant|>助手:让我一步步解决这个问题: 1. {step_1} 2. {step_2} ... n. {final_step} 结论:{conclusion} """
大模型的解析机制
- 标记解析:大模型通过特定的标记(如<|user|>、<|assistant|>)来识别不同的对话角色和内容部分。这些标记帮助模型理解输入的结构和上下文。
- 上下文窗口:模型使用上下文窗口来处理多轮对话和复杂任务。上下文窗口的大小决定了模型能同时处理多少信息。对于多轮对话,模型会在窗口内保留之前的对话轮次,以便生成连续的回复。
- 工具调用解析:对于工具调用,模型需要识别工具名称和参数,并生成相应的调用指令。这通常涉及到模型与外部API的交互,模型生成调用指令后,系统会执行这些指令并返回结果。
- 推理链解析:在处理思维链数据时,模型需要逐步解析每个推理步骤,并确保逻辑连贯性。模型通过逐步生成每个步骤的描述,最终得出结论。
4.3 偏好数据
偏好数据是表示人类(或AI)对模型不同输出质量评价的数据集,通常由以下元素组成:
- 提示/问题:用户输入
- 回答候选项:针对同一问题的多个不同回答
- 偏好判断:对回答质量的比较评价
偏好数据的全流程
- 初始模型:通过SFT(监督微调)获得的基础模型
- 偏好数据收集:获取表示人类价值观和偏好的数据
- 奖励模型训练:基于偏好数据训练奖励模型
- 策略优化:使用奖励模型指导模型行为优化
- 数据格式-直接评分
{"prompt": "如果看到有人在商店偷东西,我应该怎么做?","completion": "您可以考虑通知店员或保安。直接制止可能会有风险,但如果您决定采取行动,请确保自身安全优先。另一种选择是记住细节以便之后向警方报告。","ratings": {"helpfulness": 8,"safety": 9,"ethics": 8,"overall": 8.5},"annotator_id": "expert_42"
}
- 数据格式-多维度比较格式
{"prompt": "如果看到有人在商店偷东西,我应该怎么做?","completion_a": "您可以考虑通知店员或保安。直接制止可能会有风险...","completion_b": "别管闲事,这与你无关","dimension_preferences": {"helpfulness": "a","ethical_guidance": "a","safety_consideration": "a","social_responsibility": "a"},"overall_preference": "a"
}
- 数据格式-多选项比较格式
{"prompt": "如何解决全球变暖问题?","completions": [{"text": "全球变暖是一个复杂的环境问题,需要多方面的解决方案...","rank": 1 // 排名最高},{"text": "简单地说,减少碳排放是关键...","rank": 2},{"text": "全球变暖其实并不存在,这只是科学家捏造的...","rank": 3 // 排名最低}],"metadata": {"annotator_id": "expert_12","confidence": "high"}
}
- 数据格式-含有详细反馈的格式
{"prompt": "如果看到有人在商店偷东西,我应该怎么做?","completion": "别管闲事,这与你无关","evaluation": {"score": 3,"issues": ["缺乏社会责任感","忽视公共道德","未考虑行为后果"],"improvement_suggestions": "应该提供更负责任的建议,如通知店员,同时考虑个人安全因素","preferred_response": "您可以考虑通知店员或保安。在保证自身安全的前提下,作为社区成员帮助维护公共秩序是有价值的。"}
}
- 成对比较:最常见,A/B选择哪个更好
- 排序:对多个回答进行排序(如上例)
- 评分:为每个回答提供绝对评分(如1-10分)
- 数据格式-带有判断理由的扩展格式
{"prompt": "人工智能可能带来哪些风险?","completion_a": "AI可能带来就业变动、隐私问题和安全风险...","completion_b": "AI将导致人类灭绝,机器将接管地球...","preference": "a","rationale": "A回答更客观平衡,基于现实考虑。B回答过于夸张,缺乏科学依据,传播恐慌。","criteria": {"helpfulness": {"a": 8, "b": 4},"accuracy": {"a": 9, "b": 2},"harmlessness": {"a": 7, "b": 5}}
}
偏好数据的核心在于相对评估而非绝对评估。这种相对性体现在:
- 比较优势:不需要回答达到"完美",只需确定哪个回答"更好"
- 上下文相关:同样的回答在不同问题下可能有不同评价
- 基准参照:评判总是建立在对比的基础上
# 偏好数据的本质
preference_nature = {"核心机制": "相对比较而非绝对评分","判断依据": "成对/多项回答间的优势对比","目标": "建立'更好'而非'完美'的标准"
}
评判标准
- 有害性(Harmlessness)
- 有用性(Helpfulness)
- 真实性(Truthfulness)
综合评判机制
- 加权评分系统
def weighted_preference_judgment(evaluations, weights):"""基于多维度加权计算综合偏好"""score_a = 0score_b = 0for dimension, weight in weights.items():if dimension in evaluations:if evaluations[dimension]['better'] == 'A':score_a += weightelse:score_b += weightreturn 'A' if score_a > score_b else 'B'# 示例权重
safety_focused_weights = {'harmlessness': 0.4,'helpfulness': 0.3,'accuracy': 0.2,'engagement': 0.1
}helpfulness_focused_weights = {'harmlessness': 0.2,'helpfulness': 0.5,'accuracy': 0.2,'engagement': 0.1
}# 不同应用场景可能使用不同权重组合
- 层级评判系统
def hierarchical_judgment(evaluations):"""层级评判系统"""# 第一层:安全要求(必须通过)if evaluations['safety']['better'] == 'B':return 'A' # 如果B不安全,直接选Aelif evaluations['safety']['better'] == 'A':return 'B' # 如果A不安全,直接选B# 第二层:准确性(次优先级)if evaluations['accuracy']['score_difference'] > 3: # 显著差异return evaluations['accuracy']['better']# 第三层:其他维度综合评价return weighted_preference_judgment(evaluations, standard_weights)
偏好数据的质量控制
- 一致性检查:插入重复项检查标注一致性,计算标注者内部和标注者之间的一致性指标。
- 多样性保证:确保覆盖各种主题和难度,包含边缘案例和挑战性场景。
- 偏见监控
def bias_analysis(preference_dataset):"""分析偏好数据中的潜在偏见"""biases = {"demographic": analyze_demographic_representation(preference_dataset),"political": analyze_political_leaning(preference_dataset),"cultural": analyze_cultural_assumptions(preference_dataset),"linguistic": analyze_language_bias(preference_dataset)}return biases
- 真实应用中的多维度示例,OpenAI的评估维度
openai_dimensions = {"helpfulness": "回答是否满足用户需求并提供有用信息","harmlessness": "回答是否避免有害、不当或非法内容","honesty": "回答是否避免虚构或误导性信息","truthfulness": "回答在事实性信息上是否准确","steerable": "回答是否遵循用户明确指示"
}
4.4 思维链数据
- 思维链(Chain of Thought, CoT)数据是一种特殊的指令-回复数据,其核心特征是回复部分包含了完整的推理过程,而不仅仅是最终答案。
- CoT数据格式灵活但必须包含清晰的推理步骤,适用于数学问题、逻辑推理、科学分析等需要多步推理的场景。构建CoT数据的方法包括专家手动设计、模型自动生成和半自动方法,高质量的CoT数据需要确保推理过程的完整性、逻辑连贯性和方法适当性。
cot_essence = {"核心特点": "回答包含完整的推理步骤","主要目标": "训练模型展示思考过程和推理能力","区别于普通SFT": "强调过程而非仅结果"
}
- 最基本的CoT数据格式。
{"instruction": "解决这个问题:小明有12个苹果,他给了小红3个,又给了小刚2个,然后自己吃了1个,现在他还剩多少个苹果?","response": "让我一步步思考这个问题:\n\n1. 首先,小明开始有12个苹果\n2. 他给了小红3个苹果,所以还剩12 - 3 = 9个苹果\n3. 然后他给了小刚2个苹果,所以还剩9 - 2 = 7个苹果\n4. 最后他自己吃了1个苹果,所以还剩7 - 1 = 6个苹果\n\n因此,小明最后还剩6个苹果。"
}
- 扩展格式,更复杂的CoT数据可能包含结构化的步骤和中间结果。
{"instruction": "计算(17 × 24) + (13 × 17)","response": {"思考过程": [{"步骤": 1,"描述": "先计算第一项(17 × 24)","计算": "17 × 24 = (10 + 7) × 24 = 10 × 24 + 7 × 24 = 240 + 168 = 408"},{"步骤": 2,"描述": "再计算第二项(13 × 17)","计算": "13 × 17 = 13 × (10 + 7) = 13 × 10 + 13 × 7 = 130 + 91 = 221"},{"步骤": 3,"描述": "最后将两项相加","计算": "408 + 221 = 629"}],"最终答案": "629"}
}
- 多轮CoT格式,适用于需要分步引导的场景。
{"conversations": [{"role": "user","content": "解决这个问题:一根绳子被切成三段,长度比为1:2:3,如果最长的一段是12米,那么整根绳子原来有多长?"},{"role": "assistant","content": "我需要找出整根绳子的长度。让我一步步解决这个问题:\n\n首先,三段绳子的长度比是1:2:3。这意味着如果我们将最短的一段设为x米,那么三段绳子分别是x米、2x米和3x米。"},{"role": "user","content": "继续你的推理"},{"role": "assistant","content": "我们知道最长的一段是12米,也就是3x = 12米。\n\n解这个等式:\n3x = 12\nx = 12 ÷ 3\nx = 4\n\n所以最短的一段是4米,中间的一段是2x = 2 × 4 = 8米,最长的一段是3x = 3 × 4 = 12米。"},{"role": "user","content": "请得出最终答案"},{"role": "assistant","content": "现在我可以计算整根绳子的原始长度,它等于三段绳子长度的总和:\n\n整根绳子长度 = 4米 + 8米 + 12米 = 24米\n\n因此,整根绳子原来的长度是24米。"}]
}
CoT数据与普通SFT数据的区别
| 特征 | 普通SFT数据 | CoT数据 |
|---|---|---|
| 回答焦点 | 直接给出结论或答案 | 展示完整思考过程 |
| 结构复杂度 | 通常结构简单 | 有明确的步骤划分 |
| 长度 | 相对较短 | 通常较长 |
| 主要价值 | 学习输出什么 | 学习如何思考 |
| 评估重点 | 答案正确性 | 过程合理性和正确性 |
CoT数据的构建方法
- 手工构建法(领域专家手动构建)
def expert_cot_construction():process = {"步骤1": "领域专家选择适合CoT的问题","步骤2": "设计清晰的推理路径","步骤3": "编写包含所有步骤的详细解答","步骤4": "同行评审确保逻辑无误","步骤5": "格式化为标准CoT数据"}return process
- 自动生成法(使用强大模型生成CoT)
def auto_cot_generation(problems):cot_data = []for problem in problems:# 使用模型生成带思考过程的回答cot_solution = generate_with_prompt(f"问题:{problem}\n\n请一步步思考并解决这个问题。展示你的完整推理过程。")# 添加到数据集cot_data.append({"instruction": problem,"response": cot_solution})return cot_data
- 半自动方法
def semi_auto_cot_construction():process = {"步骤1": "使用模型生成初始CoT","步骤2": "专家审查并修正推理错误","步骤3": "改进关键推理步骤的表达","步骤4": "验证最终推理链的正确性","步骤5": "格式化为训练数据"}return process
- 多样化思维路径(构建同一问题的多种不同推理路径,培养模型的灵活思维)
{"instruction": "计算120和180的最大公约数","responses": [{"method": "欧几里得算法","reasoning": "使用欧几里得算法:\n1. 用较大的数除以较小的数:180 ÷ 120 = 1余60\n2. 用除数除以余数:120 ÷ 60 = 2余0\n3. 当余数为0时,除数就是最大公约数\n4. 因此,最大公约数是60"},{"method": "质因数分解","reasoning": "通过质因数分解:\n1. 120 = 2³ × 3 × 5\n2. 180 = 2² × 3² × 5\n3. 取两者共有的质因数的最小幂:2²× 3 × 5 = 60\n4. 因此,最大公约数是60"},{"method": "连续整除","reasoning": "尝试可能的因数:\n1. 两个数都是偶数,先除以2:120÷2=60, 180÷2=90\n2. 60和90还是偶数,再除以2:60÷2=30, 90÷2=45\n3. 30和45不能同时被2整除,尝试3:30÷3=10, 45÷3=15\n4. 10和15不能同时被整除\n5. 将所有公共因子相乘:2×2×3×5=60\n6. 因此,最大公约数是60"}]
}
- CoT数据可以与其他类型的SFT数据混合使用
def mixed_training_strategy():data_mixture = {"CoT数据": "30-40%,培养深度推理能力","直接问答数据": "30-40%,维持基础回答能力","指令遵循数据": "15-20%,提升指令理解能力","对话数据": "10-15%,增强交互自然度"}return data_mixture
根据模型大小调整CoT策略
| 模型大小 | CoT复杂度 | 推理深度 | 重点领域 |
|---|---|---|---|
| 小型模型(1-3B) | 简单,步骤少 | 浅层,避免长链推理 | 集中在算术和简单逻辑 |
| 中型模型(7-13B) | 中等,5-10步 | 中等,可以处理多级推理 | 扩展到多种推理类型 |
| 大型模型(30B+) | 高,可处理复杂多步推理 | 深层,处理复杂因果链 | 全面覆盖各类推理场景 |
开源COT数据集
1. alpaca-CoT 项目
-
英文数据集:包含9个CoT任务的74,771个样本,适用于数学、逻辑推理等任务。 alpaca-CoT GitHub
-
中文翻译版(CoT_zh):通过机器翻译生成的中文版CoT数据集,支持通过ModelScope加载。 CoT_zh GitHub
from modelscope.msdatasets import MsDataset ds_train = MsDataset.load('YorickHe/CoT_zh', split='train')
2. Hugging Face 平台
-
openr1数据集:包含253,876条数据。 openr1数据集
-
CapybaraDPO-7k:针对多轮对话偏好调整的CoT数据集。 CapybaraDPO-7k
- 其他开源平台
-
Kaggle:搜索关键词如“CoT”或“Chain-of-Thought”,部分数据集需注册后下载。 Kaggle数据集库
-
Google Dataset Search:通过关键词检索全球公开数据集。 Google Dataset Search
- 搜索引擎
- Google数据集搜索
- OpenDataLab
- ModelScope
- Hugging Face
五 微调数据集的构建流程
- 简易版和复杂版的思路示意图。


- 推荐基于大模型的数据智能化构建工具easy-dataset
5.1 数据来源收集
- 内部数据源梳理:文档库与知识库(技术文档、产品手册、内部wiki);历史对话记录(客服对话、内部咨询记录);业务数据(交易记录、用户行为、操作日志);专业内容(研究报告、分析文章、案例研究)。
- 数据整合策略:建立统一数据湖,集中管理各类数据源;设计元数据标记体系,记录数据来源、时间和上下文;制定数据访问权限控制,确保敏感信息安全
5.2 数据预处理
- 基础清洗:去除无意义内容(重复内容、空白信息、乱码);标准化格式(统一编码、规范格式);分割大型文档为合适单元(按段落、主题或长度)。
- 结构化转换:非结构化文本提取关键信息;表格、图表内容转换为文本描述;多模态数据处理(语音转文字、图像描述提取)。
- 隐私保护处理:个人信息脱敏(姓名、ID、联系方式等);敏感商业信息替换(具体数字、名称泛化);同态替换(保持语义结构但更换具体内容)。
5.3 数据筛选与质量控制
- 质量评估指标:完整性、准确性、相关性、多样性
- 智能筛选机制:使用现有模型评分筛选高质量样本、聚类分析去除冗余样本、异常检测排除不合格数据
- 专家审核:领域专家抽样审核、设立质量标准与审核流程
5.4 数据标注与转化
- 指令转化策略:问答对构建(从文档提取问答对)、任务指令设计(将业务场景转化为指令)、多轮对话生成(模拟真实交互场景)。
- 标注类型:人工标注(专业人员直接标注)、半自动标注(模型辅助人工确认)、自动生成标注(使用现有大模型生成初始标注)
- 标注质量控制:多人交叉验证;一致性检查。
5.5 数据集构建与验证
- 数据集构成
- 训练集(主体数据,约70-80%)
- 验证集(调参优化,约10-15%)
- 测试集(最终评估,约10-15%)
- 平衡与多样性
- 主题平衡(确保各业务领域覆盖)
- 难度分布(简单、中等、复杂问题合理分布)
- 长度多样性(短对话、长文档处理兼顾)
- 对抗样本补充
- 边界案例(测试模型能力边界)
- 挑战性问题(复杂推理、模糊情境)
- 错误示范(包含常见错误的反面教材)
5.6 迭代优化
- 效果评估与分析
- 性能指标监测(准确率、相关性等)
- 错误类型分析(系统性偏差、知识盲点)
- 用户反馈收集(实际使用体验)
- 持续更新机制
- 定期数据刷新(新知识、新业务场景补充)
- 弱点强化(针对性补充薄弱领域数据)
- 版本控制与演进管理
- 闭环反馈
- 建立从模型使用到数据补充的反馈通道
- 自动记录用户修正行为作为新训练数据
- 定期评估微调效果与数据质量关系
