外观
LLM自动生成SFT数据方法
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. SFT 数据集如何生成?
SFT 数据集构建通常有两种方法:
| 方法 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 人工标注 | 减少有偏数据,质量高 | 成本略高 | 垂直领域 |
| LLM 生成(如 GPT-4) | 短时间内生成大量数据 | 可能有偏 | 通用场景,快速扩充 |
2. Self-Instruct 方法
2.1 什么是 Self-Instruct?
Self-Instruct(论文)是一个通过预训练语言模型自己引导自己来提高指令遵循能力的框架。
2.2 Self-Instruct 处理流程
| 步骤 | 操作 | 说明 |
|---|---|---|
| 步骤 1 | 种子采样 | 从 175 个种子任务中随机抽取 8 条自然语言指令作为示例,提示 InstructGPT 生成更多任务指令 |
| 步骤 2 | 判断任务类型 | 确定步骤 1 生成的指令是否为分类任务 |
| 步骤 3 | 生成输入输出 | 基于步骤 2 结果,用 InstructGPT 生成对应的"输入"和"输出" |
| 步骤 4 | 后处理 | 过滤类似指令,去除输入输出重复数据,最终得到 52K 条英文指令 |
2.3 分类任务与非分类任务的处理策略
| 任务类型 | 输出选项 | 生成策略 |
|---|---|---|
| 分类任务 | 有限的选项 | 根据指令生成所有可能选项 → 随机选择特定类别 → 生成对应"输入"内容 |
| 非分类任务 | 无数选项 | 输入优先策略:先生成"输入",再根据指令和输入生成"输出" |
Self-Instruct 流程:
种子指令 (8条) → InstructGPT → 生成新指令
↓
判断是否为分类任务?
↓ ↓
是(分类) 否(非分类)
↓ ↓
生成选项列表 输入优先策略
随机选类别 先生成输入
生成输入 再生成输出
↓ ↓
└──────┬───────┘
↓
后处理过滤去重
↓
52K 条英文指令3. Backtranslation 方法
3.1 什么是 Backtranslation?
回译在传统机器学习中是一种数据增强方法:
中文 → 英文 → 中文(语义一致,文本不同)3.2 SFT 数据生成中的回译
与传统回译不同,SFT 数据生成的回译(论文)是通过输出来生成指令,即反向构造:
| 回译类型 | 传统机器学习 | SFT 数据生成 |
|---|---|---|
| 方向 | 语言翻译:中文→英文→中文 | 任务反转:输出→指令 |
| 目的 | 数据增强 | 利用输出反推指令 |
4. 两种方法对比
| 对比维度 | Self-Instruct | Backtranslation |
|---|---|---|
| 核心思路 | 模型自生成指令+输出 | 从输出反推指令 |
| 数据来源 | 种子指令 + 模型生成 | 已有输出 + 模型反推 |
| 适用场景 | 从零构建指令数据集 | 利用已有输出扩充指令 |
| 论文 | arxiv:2212.10560 | arxiv:2308.06259 |
两种方法可以结合使用:Self-Instruct 生成初始数据,Backtranslation 扩充指令多样性。