这是“通过提示对齐的大规模语言模型从零开始合成对齐数据”的官方仓库。Magpie 通过给对齐的大规模语言模型(LLM)提供预查询模板来生成高质量的对齐数据。与许多现有的合成数据生成方法不同,Magpie 不依赖于提示工程或种子问题来生成合成数据,而是使用对齐 LLM 的提示模板生成用户查询和 LLM 响应。
- 🤗 Huggingface(模型和数据集)
- 🕸️ 网站
- 📄 技术报告
- 🤗 Magpie 演示(感谢 @davanstrien 的实现!)
- 🐦 与 Magpie 聊天
新闻
- [2024/07/25] Magpie Llama-3.1 数据集发布!1M 来自 Meta-Llama-3.1-70B-Instruct!比 Llama-3 许可证更友好😃!
- [2024/07/21] Magpie Gemma2 数据集发布!534K 来自 Gemma-2-27b-it!
- [2024/07/19] Llama-3-8B-Magpie-Align-v0.3 发布,增强了中文问答能力,感谢我们的新中文指令数据集!
- [2024/07/14] Llama-3-8B-Magpie-Align-v0.2 发布,增强了推理能力,感谢我们的新推理增强数据集!
- [2024/07/04] Magpie Qwen2 数据集发布!1M 来自 Qwen2 72B 和 3M 来自 Qwen2 7B。
- [2024/07/03] 🏆 我们的开放对齐模型,Llama-3-8B-Magpie-Align-v0.1 发布了!它是 AI2 WildBench 排行榜中🏆最佳<30B模型!甚至比官方的 Meta-Llama-3-8B-Instruct 模型还要好!
- [2024/06/24] Magpie Phi 3 数据集发布!1M 来自 Phi 3 中型。
- [2024/06/12] Magpie Llama-3 数据集发布!1M 来自 Llama-3 70B 和 3M 来自 Llama-3 8B。
- [2024/06/12] Magpie 技术报告发布!让我们一起让高质量的对齐数据对所有人开放!
Magpie 支持
目前,Magpie 已在 Llama-3、Qwen2、Phi 3 和 Gemma-2 系列上进行了测试。如需更多模型支持,请提交问题。
模型系列 | Magpie | Magpie 脚本 | 数据集 | 大小 | 备注 |
---|---|---|---|---|---|
Llama 3.1 | ⭕️ | 8B,70B | 70B | 1M | 应用 logits 处理器来抑制 Markdown。 |
Llama 3 | ✅ | 8B,70B | 8B,70B | 3M + 1M | |
Qwen2 | ✅ | 7B,72B | 7B,72B | 3M + 1M | |
Phi 3 | ✅ | mini,small,medium | medium | 1M | |
Gemma-2 | ⭕️ | 9B,27B | 27B | 534K | 在生成响应之前应用一个过滤器。 |
Gemma-1.1 | ⭕️ | 7B | |||
Llama 2 | ⭕️ | 7B,70B | |||
Mistral | ⭕️ | 7B | |||
Yi | ⭕️ | 34B | |||
DeepSeek Coder | ⭕️ | Coder V2 Lite |
- ✅: 运行效果非常好!
- ⭕️: 部分工作。我们可以获得一些有趣的东西,但需要应用强大的过滤器和/或 logits 处理器。
- ❌: 不工作。
- ❓: 未测试。 我们希望 Magpie 能够通过加强模型对齐过程的透明性,推动 AI 的民主化!
摘要
点击这里
高质量的指令数据对于对齐大型语言模型(LLM)至关重要。虽然一些模型(如 Llama-3-Instruct)开放了权重,但其对齐数据仍然是私有的,这阻碍了 AI 的民主化。高昂的人力成本和有限的预定义提示范围,阻碍了现有开源数据创建方法的有效扩展,可能限制了公共对齐数据集的多样性和质量。是否可能通过从已对齐的 LLM 中直接提取数据,在大规模上合成高质量的指令数据?我们提出了一种用于生成大规模对齐数据的自合成方法,命名为 Magpie。我们的主要观察是,像 Llama-3-Instruct 这样的已对齐 LLM 可以在我们输入仅到为用户消息保留的位置的左侧模板时,生成用户查询,这得益于其自回归特性。我们使用这种方法提示 Llama-3-Instruct,并生成 400 万条指令及其相应的响应。我们对提取的数据进行了全面分析并选择了 30 万高质量实例。为了将 Magpie 数据与其他公共指令数据集进行比较,我们用各数据集微调 Llama-3-8B-Base,并评估微调模型的性能。我们的结果表明,在某些任务中,使用 Magpie 微调的模型在性能上与官方的 Llama-3-8B-Instruct 相当,尽管后者通过监督微调(SFT)和后续反馈学习增强了 1000 万个数据点。我们还表明,仅使用 Magpie 进行 SFT 可以超越以前用于 SFT 和偏好优化的公共数据集的性能,例如直接偏好优化的 UltraFeedback。这种优势在 AlpacaEval、ArenaHard 和 WildBench 等对齐基准上是显而易见的。概述
安装
构建环境
git clone https://github.com/magpie-align/magpie.git
cd magpie
conda create -n magpie python=3.10 -y
conda activate magpie
pip install -r requirements.txt
从 🤗 Huggingface 获取 Llama-3 模型的访问权限
你可以在 这里 申请 Llama-3 模型访问权限。要在终端登录,请输入:
huggingface-cli login
然后输入以 "hf_" 开头的 Huggingface 私钥。
示例
使用 Jupyter Notebook 进行操作
示例可以在 demo.ipynb
中找到。玩得开心!
批量数据生成
我们以 Llama-3-8B-Instruct 为例,演示批量数据生成过程。要运行批量生成,只需运行:
cd scripts
bash magpie.sh
脚本将在数据文件夹中生成指令和响应。该脚本已在 RTX 4090 24G GPU 上进行了测试。如果你使用的是内存较少的 GPU,请考虑实现 量化。
我们还在 scripts
文件夹中为其他模型提供了脚本。你可以使用 这个 导航找到特定的 Magpie 脚本。请注意,对于大于 8B 的模型,你可能需要 4*A100 GPU 来运行脚本。
批量多轮数据生成 [可选]
在生成指令-响应对后,你可以将其扩展为多轮对话。为此,只需运行以下命令:
bash magpie-multi-turn.sh ***_ins_res.json
其中 ***_ins_res.json
为上一步生成的单轮指令-响应对。
数据集过滤
1. 标记
要标记生成的指令-响应对,可以运行:
cd scripts
bash unitag.sh ***_ins_res.json all
此脚本将自动为生成的数据集生成质量、难度、任务类别、安全性、奖励和语言标签。你也可以一次生成一个标签。例如,如果你只想使用设备 0 生成安全标签,可以运行:
cd scripts
bash unitag.sh ***_ins_res.json safety 0
2. 数据拼接和转换
你可以使用不同的生成配置生成数据集。我们提供了一个 Jupyter notebook 这里 来拼接所有数据集并将其转换为 ShareGPT 格式,Axolotl 完全支持该格式进行微调。
3. 删除重复
一旦你有一个转换为 ShareGPT 格式的完整数据集,可以计算每个指令的最小邻近距离并删除重复项。为此,运行:
cd exp
python gen_dis.py --input_file ***_sharegpt.jsonl
其中 ***_sharegpt.jsonl
是上一步中获得的数据集路径。Python 脚本将负责构建 FAISS 索引并计算最小距离。
4. 设计并应用你的过滤器
我们提供了一个 Jupyter notebook here 来进行简单过滤。你可以根据需要调整过滤参数以设计和应用自己的过滤器。
微调
请参阅 fine-tune 目录中的说明。
引用
如果你发现模型、数据或代码有用,请引用我们的论文 🤩:
@article{xu2024magpie,
title={Magpie: Alignment Data Synthesis from Scratch by Prompting Aligned LLMs with Nothing},
author={Zhangchen Xu and Fengqing Jiang and Luyao Niu and Yuntian Deng and Radha Poovendran and Yejin Choi and Bill Yuchen Lin},
journal={ArXiv},
year={2024},
volume={abs/2406.08464},
url={https://api.semanticscholar.org/CorpusID:270391432}
}