Skip to content

大模型训练数据构建与微调策略

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 各阶段训练数据格式

训练阶段数据格式说明
SFT(有监督微调)一问一答指令 + 期望输出
RM(奖励模型)一个问题 + 一条好回答 + 一条差回答偏好对比数据
PPO(强化学习)理论上不需要新增数据提供一些 prompt 即可,可用 SFT 阶段的问题;限制模型不要偏离原模型(ptx loss),也可直接用 SFT 数据

2. 数据集从哪里找?

推荐 Alpaca-CoT,数据集整理非常全面,包括常用的 alpaca、CoT 等数据集,且有中文版本。

3. 微调需要多少条数据?

数据分布情况所需数据量说明
与预训练数据分布一致~100 条即可达到效果
分布差异较大千条~万条以上需要更多数据
任务复杂/冷门行业需要较多监督数据如药品名称识别任务

注意:微调大模型时,一遍是记不住的。100 条微调数据,epochs=20 才能稳定拟合任务要求。

4. 有哪些大模型的训练集?

4.1 预训练数据集

RedPajama-Data-1T(红睡衣)开源计划:

项目说明
子集数量7 个子集
Token 数量大致匹配 Meta 在原始 LLaMA 论文中报告的数量
存储容量压缩后 3TB,解压后 5TB
预处理脚本已开源

4.2 CoT 微调数据集

Alpaca-CoT:包括常用的 alpaca、CoT 等数据集,包含中文数据。

5. 领域大模型预训练选用什么数据?

通过分析现有开源大模型的预训练过程,发现会加入数据、论文等内容,主要因为:

数据特性说明
数据质量高论文等数据质量较高
领域相关性强与目标领域高度相关
知识覆盖度大密度大,让模型更适应"考试"

同时,领域相关的网站内容、新闻内容也是比较重要的数据来源。

领域大模型构建三要素

  1. 高质量、大规模、高覆盖度的预训练数据集
  2. 在预训练数据集上训练出的基础模型
  3. 指令调优数据集和模型,比基本模型更安全、可靠

6. 如何选取和构建大模型微调数据?

6.1 问题背景

数据分布通常符合长尾分布:主要类别占据 90% 数据量,剩余 90% 的类别只有 10% 数据量。

例如:小红书上 query 的意图识别里,美食、穿搭、旅游攻略类非常多,技术类较少。直接采样线上数据标注会导致攻略类数据远多于技术类,人力成本浪费且模型效果因数据不平衡而不佳。

6.2 主动学习的两个基本原则

原则核心思想实现方法
数据多样性去重,避免重复数据相似度度量 + 聚类过滤
数据不确定性选取模型学得不好的数据过滤 PPL 差或概率低的数据

6.3 数据多样性的实现

去重方法

方法说明
对比学习语义向量基于 contrastive learning 构造的语义相似度(主流)
词袋/TF-IDF简单的基于词频的相似度度量
One-pass 聚类简单的聚类过滤方法
K-Center-Greedy在最大化多样性情况下使指令数据集最小

寻找与已有数据不同的数据

一个简单实用的半监督方案

步骤1: 已有高质量数据打标签 1,待筛选数据打标签 0
步骤2: 用 DeBERTa 构建二分类模型
步骤3: 进行 K-fold 交叉验证
步骤4: 选出每个 fold 测试集中概率接近于 0 的样本
→ 这些就是与已有数据"长得不一样"的数据

该方案可广泛应用于其他场景:只要有种子数据,就能选出"长得像"或"长得不像"的数据。

6.4 数据不确定性的实现

方法说明
PPL 过滤选出模型 PPL 值较差的数据
概率和过滤计算所有选项的概率之和,过滤概率和低的数据

副作用:选出的数据可能质量本身就差,而非模型学得不好。因此需要借助 Reward Model(广义的质量二分类模型,如 DeBERTa)进行数据质量判断。

6.5 构建方法总结

方法类别核心思路
Self-Instruct自生成从语言模型生成指令、输入和输出样本,清洗后微调
主动学习人工+模型辅助数据多样性 + 数据不确定性

监督学习中主动学习的核心:寻找多样性的数据和模型不确定性的数据。实践中使用的聚类去重、对抗半监督过滤、自建 reward 二分类等方法虽然学术上并不高深,但都是实践中总结出的有效方法。