Macpie:合成数据用于训练大型语言模型
来源:互联网
时间:2026-08-13 14:24:10
今天我们来聊聊一个很有意思的工具——Magpie。它最大的特点是:能自动生成高质量的合成训练数据,而且整个过程完全不需要人工干预。
这听起来可能有点抽象,让我们先看几个核心洞察:
1. **告别手动标注**:Magpie可以完全自动地生成合成数据,你甚至不需要输入任何提示词。
2. **降本增效新思路**:它利用大型语言模型自动创建训练数据,大幅降低了传统人工标注的时间和经济成本。对于训练大模型来说,这无疑是个好消息,因为手动构建高质量数据集一直是件费时费力的苦差事。
3. **效果超越基础模型**:相关实验表明,使用Magpie生成的数据集来微调模型(比如Llama 3),其表现甚至能超越基础模型本身。
那么,Magpie是如何做到这一点的呢?
它的原理有点像“科塔尔综合征”式的自我对话。当你向一个普通的大语言模型提问时,它背后有一套固定的对话模板。Magpie发现,我们只需要提供这个模板的“前半段”——也就是系统指令和代表用户消息开始的标签——模型就会自动接着往下“猜”,生成一个完整的问题。接着,再利用生成的问题和模板的“后半段”,让模型自己给出答案。这个过程可以无限循环,从而自动化地生成海量的问答对。
以Llama 3为例。在它的tokenizer中,所有特殊标签都被赋予了特殊标记。我们只需要提供“<|begin_of_text|><|start_header_id|>user<|end_header_id|>”这样的开头,模型就会自动生成一条用户查询,然后我们再用“<|start_header_id|>assistant<|end_header_id|>”引导它生成答案。
这个循环一旦转起来,训练数据就源源不断地产生了。从最终结果来看,用这种方法训练出的模型,效果确实显著优于基础版本。
接下来,我们手把手演示一下如何使用Magpie来生成类似的数据。这里我们会用一台配置相对较低的机器来演示,以便更多人能进行尝试。
1. **环境准备**:首先,克隆Magpie的代码库,并创建一个独立的虚拟环境,确保项目之间的依赖不冲突,然后安装所需的依赖包。由于演示中使用Llama 3 8B模型,需要先去Hugging Face申请模型访问权限,并生成一个访问令牌。
2. **登录与配置**:在终端使用`huggingface-cli login`命令登录你的Hugging Face账号,并输入刚才获取的令牌。完成后,在代码文件夹中找到`demo.ipynb`文件,打开它并选择我们之前创建的虚拟环境,就可以开始运行了。
3. **开始生成**:在代码中,我们需要初始化模型、配置好生成管道,并提供一个“预查询模板”。这个模板就是触发模型自问自答的“钥匙”。一切就绪后,模型就会根据模板自动生成问题和答案。重复这个过程,就能得到大量合成数据。
这就是使用Magpie生成合成数据的全流程。利用这些数据去训练自己的模型,往往能收获意想不到的效果。
---
### Magpie 官方资源与部署指南
以下内容来自Magpie官方文档,提供更全面的技术支持。
#### Magpie 支持的模型
目前,Magpie已在 **Llama-3** 和 **Qwen2** 系列模型上进行了充分测试。如果你有其他模型需要支持,可以自行将其配置提交到代码库的 `configs/model_configs.json` 文件中。
| 模型系列 | Magpie | Magpie 脚本 | 数据集 |
| :--- | :--- | :--- | :--- |
| Llama 3 | ✅ | 8B, 70B | 8B, 70B |
| Qwen2 | ✅ | 7B, 72B | 72B |
| Phi 3 | ✅ | mini, small, medium | medium |
| Llama 2 | ⭕️ | 7B, 70B | |
| Gemma | ⭕️ | 7B | |
| Mistral | ⭕️ | 7B | |
| Yi | ⭕️ | 34B | |
* ✅: 效果极佳
* ⭕️: 部分有效。可能会得到一些有趣的结果,但可能需要配合强大的过滤器或logits处理器。
* ❌: 无效
* ❓: 未测试
#### 摘要
高质量的指令数据对于大语言模型的对齐至关重要。尽管一些模型(如Llama-3-Instruct)开放了权重,但其用于对齐的源数据仍然是私有的,这在一定程度上阻碍了AI的民主化进程。
现有的开源数据创建方法,要么受限于高昂的人力成本,要么受限于有限的、预定义的提示范围,导致其难以有效扩展,也制约了公共对齐数据集的多样性和质量。为此,我们提出了Magpie,一种用于大规模生成对齐数据的自我合成方法。
其核心发现是:向对齐后的模型(如Llama-3-Instruct)输入仅包含“左侧”模板(即用户消息预留位置之前的部分)时,该模型能够自动生成用户查询。利用这一发现,我们成功生成了400万条指令及其对应的响应。在对数据进行全面分析后,我们从中精选出30万条高质量样本。
为了验证Magpie数据的有效性,我们使用不同的公共指令数据集分别对Llama-3-8B-Base模型进行微调,并对比评估结果。数据显示,在某些任务上,仅用Magpie数据微调的模型,其表现已经能与官方的Llama-3-8B-Instruct模型相媲美。要知道,后者可是通过监督微调并额外使用1000万个数据点进行了后续的强化学习对齐。
更进一步的实验表明,仅使用Magpie数据进行监督微调,其效果甚至优于此前使用UltraFeedback等公开数据进行监督微调后再进行偏好优化的方案。这一优势在AlpacaEval、ArenaHard和WildBench等对齐基准上表现得尤为突出。
#### 安装
**构建环境**
```bash
git clone https://github.com/magpie-align/magpie.git
cd magpie
conda create -n magpie python=3.10
conda activate magpie
pip install -r requirements.txt
```
**从 Hugging Face 获取 Llama-3 模型访问权限**
你可以在这里申请Llama-3的访问权限。在终端登录,输入:
```bash
huggingface-cli login
```
然后输入以 "hf_" 开头的Hugging Face私钥。
#### 示例
**使用 Jupyter Notebook**
示例文件位于 `demo.ipynb`。
#### 批量数据生成
要使用Llama-3-8B-Instruct运行批量数据生成,可以直接运行:
```bash
cd scripts
bash magpie.sh
```
该脚本会在数据文件夹中生成指令和响应。它已在RTX 4090 24G GPU上经过测试。如果你的GPU内存较小,可以考虑开启量化。
我们还为其他模型提供了脚本,位于 `scripts` 文件夹中。请注意,对于超过8B参数量的模型,你可能需要4xA100 GPU才能运行。
#### 数据集标记和去重
**标记**
要标记上一步生成的指令-响应对(例如 `***_ins_res.json`),可以运行:
```bash
cd scripts
bash unitag.sh ***_ins_res.json all
```
该脚本会自动为生成的数据集生成质量、难度、任务类别、安全性和奖励等标签。你也可以一次性只生成一个标签。例如,只想用设备0生成安全标签,可以运行:
```bash
cd scripts
bash unitag.sh ***_ins_res.json safety 0
```
**数据合并和转换以进行微调**
你可以使用不同的生成配置生成多个数据集。官方提供了一个Jupyter notebook,用于将所有数据集合并并转换为ShareGPT格式,该格式被Axolotl完全支持,可直接用于微调。
**去重**
当你拥有一个完整的ShareGPT格式的数据集后,可以计算每条指令的最近邻距离,并去除重复项。运行以下命令即可:
```bash
cd exp
python gen_dis.py --input_file ***_sharegpt.jsonl
```
这里的 `***_sharegpt.jsonl` 是上一步得到的数据集路径。该Python脚本会自动构建FAISS索引并计算最小距离。 -
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名