Alpaca-CoT
Alpaca-CoT 是一个面向大语言模型(LLM)指令微调的一站式开源平台,统一整合了指令数据(如思维链 CoT 数据)、多种主流大模型以及参数高效微调方法(如 LoRA、P-tuning)的接口。它解决了研究人员在尝试不同微调策略时需要反复适配数据格式和模型接口的繁琐问题,大幅降低实验门槛。平台特别适合对大模型微调感兴趣的开发者和科研人员使用,无需从零搭建复杂训练流程,即可快速验证想法。其核心亮点在于高度模块化的设计,支持灵活组合数据、模型与微调技术,并鼓励社区贡献新功能或集成更多 LLM 相关技术。通过 Alpaca-CoT,用户能更专注于算法创新而非工程适配,加速大模型研究与应用探索。
使用场景
某高校 NLP 实验室的研究员正在尝试基于开源大模型(如 LLaMA)进行指令微调,目标是构建一个能生成高质量思维链(Chain-of-Thought, CoT)推理的问答系统。
没有 Alpaca-CoT 时
- 需要手动整合来自不同来源的 CoT 指令数据(如 FLAN、Alpaca、Self-Instruct),格式不统一,清洗和对齐耗时费力。
- 尝试 LoRA、P-tuning 等参数高效微调方法时,每换一种方法都要重写训练脚本,代码复用率极低。
- 切换不同大模型(如从 LLaMA 换到 Bloom)需重新适配整个训练流程,接口差异大,调试成本高。
- 团队成员各自维护不同版本的微调代码,协作困难,难以复现彼此结果。
使用 Alpaca-CoT 后
- 内置统一格式的 CoT 指令数据集接口,一行配置即可加载多种来源数据,省去繁琐预处理。
- 支持 LoRA、P-tuning 等主流参数高效方法的即插即用,只需修改配置文件即可切换,无需重写训练逻辑。
- 提供标准化的大模型接入层,LLaMA、Bloom 等模型只需指定名称即可自动适配,训练流程完全一致。
- 整个团队基于同一套代码库开发,PR 可直接贡献回主干,实验可复现性显著提升。
Alpaca-CoT 通过统一数据、模型与微调方法的接口,大幅降低大模型指令微调的技术门槛和工程成本。
运行环境要求
- Linux
- macOS
- Windows
需要 NVIDIA GPU,显存 8GB+(用于 4bit 量化训练如 QLoRA),CUDA 版本需与 PyTorch >=1.13 兼容(建议 CUDA 11.7+)
未说明

快速开始

Alpaca-CoT:一个统一接口的指令微调平台,支持指令收集、参数高效方法和大语言模型(Large Language Models, LLMs)
这是 Alpaca-CoT 项目的代码仓库,旨在构建一个指令微调(Instruction Finetuning, IFT)平台,该平台包含丰富的指令数据集(尤其是思维链(Chain-of-Thought, CoT)数据集),并为多种大语言模型(Large Language Models, LLMs)和参数高效微调方法提供统一接口。我们正在不断扩充我们的 指令微调数据集,并集成更多的大语言模型和参数高效方法。此外,我们创建了一个新分支 tabular_llm,用于构建面向表格智能任务(Table Intelligence Tasks)的表格大语言模型(Tabular LLM)。
我们诚挚欢迎各位贡献尚未被我们收集的指令微调数据集(或其来源)。我们将统一格式化这些数据,使用它们训练 Alpaca 模型(以及未来早期阶段的其他大语言模型),开源相应的 模型检查点,并开展广泛的实证研究。我们希望本项目能为大语言模型的开源进程做出微薄贡献,并降低自然语言处理(NLP)研究人员的入门门槛。
您也可以选择加入我们的微信群聊,与更多志同道合的人交流。目前群成员人数较多,无法直接通过群二维码入群,需要先联系我才能加入。
最新动态
⚠ 如果您想使用除 LoRA 以外的其他方法,请安装本项目中修改后的版本:
pip install -e ./peft。🚀12.8:已集成大语言模型
InternLM。🚀8.16:
lora、qlora和adalora均支持4bit 量化。🚀8.16:已集成参数高效方法
Qlora、Sequential adapter和Parallel adapter。🚀7.24:已集成大语言模型
ChatGLM v2。🚀7.20:已集成大语言模型
Baichuan。6.25:新增模型评估代码,包括 belle 和 MMCU。
- 更多
- 5.20:修复模型保存中的 bug,并增加 wandb 支持。
- 5.15:新增更多数据集,如
GPT4Tools、Auto CoT、pCLUE。 - 🚀5.5:创建新分支
tabular_llm以构建表格大语言模型。我们收集了面向表格相关任务(如表格问答)的指令微调数据,并使用这些数据在本仓库中微调大语言模型。 - 🚀5.4:已集成 PEFT 中的所有参数高效方法(例如 p-tuning),可通过超参数直接设置。
- 🚀5.4:已集成大语言模型
MOSS。 - 4.21:已收集并格式化数据集
GAOKAO、camel、FLAN-Muffin、COIG。 - 4.15:已收集并格式化数据集
webGPT、dolly、baize、hh-rlhf、OIG(part)。 - 4.12:现在您可以在 Google Colab 上尝试 Alpaca-CoT。
- 4.11:由 @paulcx 新增
多轮对话功能。 - 4.9:已收集并格式化数据集
firefly、instruct、Code Alpaca,可在 此处 找到。 - 4.7:由 @weberr 新增
参数合并、本地聊天、批量预测和Web 服务构建功能。 - 4.4:已收集并格式化数据集
GPTeacher、Guanaco、HC3、prosocial-dialog、belle-chat&belle-math、xP3和natural-instructions。 - 4.3:中文 CoT 数据集
CoT_CN_data.json可在 此处 找到。
概览

LLaMA [1] 是一项杰出的工作,展示了强大的零样本(zero-shot)和少样本(few-shot)能力。它显著降低了训练、微调和使用具有竞争力的大语言模型的成本,例如 LLaMA-13B 的性能优于 GPT-3(175B),而 LLaMA-65B 则可与 PaLM-540B 相媲美。近期,为了提升 LLaMA 的指令遵循能力,Stanford Alpaca [2] 使用 Self-Instruct [3] 技术生成的 52K 条指令数据对 LLaMA-7B 进行了微调。然而,当前大语言模型研究社区仍面临三大挑战:1. 即使是 LLaMA-7B 对计算资源仍有较高要求;2. 开源的指令微调数据集较少;3. 缺乏对不同类型指令(如中文指令和 CoT 推理)对模型能力影响的实证研究。
为此,我们提出了本项目,整合了后续提出的多种改进方法,具有以下优势:
- 本仓库包含基于 此处 和 此处 修改的代码,通过使用 低秩自适应(Low-Rank Adaptation, LoRA) [4]、PEFT 和 bitsandbytes,能够**以低成本高效地微调 LLaMA**(性能不逊于 Stanford Alpaca)。LLaMA 的
7b、13b和30b版本均可在单张 80G A100 上轻松训练。
- 本仓库包含基于 此处 和 此处 修改的代码,通过使用 低秩自适应(Low-Rank Adaptation, LoRA) [4]、PEFT 和 bitsandbytes,能够**以低成本高效地微调 LLaMA**(性能不逊于 Stanford Alpaca)。LLaMA 的
- 本仓库发布的模型显著**提升了 CoT(推理)能力**。
- 本仓库发布的模型显著**提升了中文指令遵循能力**。
- 本仓库包含**_持续扩充的指令微调数据集集合_**,目前已涵盖英文、中文及 CoT 指令。此外,还提供了使用各类指令数据集训练得到的模型检查点集合。
- 本仓库**集成了多种大语言模型并统一了其接口**,可通过超参数轻松切换。目前已支持 LLaMA、ChatGLM[5]、Bloom[6] 和 MOSS,未来将持续增加更多模型,便于研究人员轻松调用和比较不同大语言模型。
- 本仓库**集成了多种参数高效微调方法并统一了其接口**,可通过超参数轻松切换。目前已支持 LoRA、P-tuning[5]、adalora 和 prefix tuning,未来将持续增加更多方法,便于研究人员轻松调用和比较不同参数高效方法。
- 本仓库包含**广泛的实证研究和定性分析**,可能提供有价值的发现,推动未来大语言模型的探索。
据我们所知,本工作是首个基于 LLaMA 和 Alpaca 研究 CoT 推理 的项目。 因此,我们将本工作简称为 Alpaca-CoT。
数据收集
所收集数据集的相对规模可通过下图展示:

参考 此列表(@yaodongC),我们根据以下规则对每个收集的数据集进行了标注:
(Lang) 语言标签(Lingual-Tags):
- EN: 英文指令数据集(Instruction datasets in English)
- CN: 中文指令数据集(Instruction datasets in Chinese)
- ML: 多语言指令数据集([Multi-lingual] Instruction datasets in multiple languages)
(Task) 任务标签(Task-Tags):
- MT: 多任务数据集([Multi-task] Datasets containing multiple tasks)
- TS: 特定任务数据集([Task-specific] Datasets tailored for specific tasks)
(Gen) 生成方法(Generation-method):
- HG: 人工生成数据集([Human Generated Dataset] Datasets created by humans)
- SI: 自指令生成数据集([Self-Instruct] Datasets generated using self-instruct methods)
- MIX: 混合数据集([Mixed Dataset] Dataset contains both human and machine generated data)
- COL: 数据集集合([Collection of Dataset] Dataset made from a collection of other datasets)
统计信息
| 数据集(Dataset) | 数量(Nums) | 语言(Lang) | 任务类型(Task) | 生成方式(Gen) | 类型(Type) | 来源(Src) | 下载链接(Url) |
|---|---|---|---|---|---|---|---|
| Chain of Thought | 74771 | EN/CN | MT | HG | 包含思维链(Chain-of-Thought, CoT)推理的指令数据 | 在已有数据上标注 CoT | download |
| GPT4all | 806199 | EN | MT | COL | 代码、故事和对话 | 从 GPT-3.5-turbo 蒸馏得到 | download |
| GPTeacher | 29013 | EN | MT | SI | 通用、角色扮演、Toolformer | GPT-4 与 Toolformer | download |
| Guanaco | 534610 | ML | MT | SI | 多种语言学任务 | text-davinci-003 | download |
| HC3 | 37175 | EN/CN | TS | MIX | 对话评估 | 人类或 ChatGPT | download |
| alpaca | 52002 | EN | MT | SI | 通用指令 | text-davinci-003 | download |
| Natural Instructions | 5040134 | ML | MT | COL | 多样化的 NLP 任务 | 人工标注的数据集集合 | download |
| belle_cn | 1079517 | CN | TS/MT | SI | 通用、数学推理、对话 | text-davinci-003 | download |
| instinwild | 52191 | EN/CN | MT | SI | 生成、开放问答(open-QA)、头脑风暴 | text-davinci-003 | download |
| prosocial dialog | 165681 | EN | TS | MIX | 对话 | GPT-3 改写问题 + 人工手动反馈 | download |
| finance_en | 68912 | EN | TS | COL | 金融相关问答 | GPT3.5 | download |
| xP3 | 78883588 | ML | MT | COL | 覆盖 46 种语言和 16 项 NLP 任务的提示(prompt)与数据集集合 | 人工标注的数据集集合 | download |
| firefly | 1649398 | CN | MT | COL | 23 项 NLP 任务 | 人工标注的数据集集合 | download |
| instruct | 888969 | EN | MT | COL | GPT4All、Alpaca 和开源 Meta 数据集的增强版本 | 使用 AllenAI 提供的高级 NLP 工具进行增强 | download |
| Code Alpaca | 20022 | EN | TS | SI | 代码生成、编辑、优化 | text-davinci-003 | download |
| Alpaca_GPT4 | 52002 | EN/CN | MT | SI | 通用指令 | 使用 GPT-4 基于 Alpaca 生成 | download |
| webGPT | 18994 | EN | TS | MIX | 信息检索(IR)问答 | 微调后的 GPT-3,每条指令有两个输出,选择更优者 | download |
| dolly 2.0 | 15015 | EN | TS | HG | 封闭式问答、摘要等,参考维基百科 | 人工标注 | download |
| baize | 653699 | EN | MT | COL | 来自 Alpaca、Quora、StackOverFlow 和 MedQuAD 的问题集合 | 人工标注的数据集集合 | download |
| hh-rlhf | 284517 | EN | TS | MIX | 对话 | 人类与 RLHF 模型之间的对话 | download |
| OIG(part) | 49237 | EN | MT | COL | 来自多种任务(如问答)的数据 | 使用数据增强和人工标注的数据集集合 | download |
| GAOKAO | 2785 | CN | MT | COL | 考试中的选择题、填空题和开放题 | 人工标注 | download |
| camel | 760620 | EN | MT | SI | AI 社会中的角色扮演对话,涵盖代码、数学、物理、化学、生物等领域 | gpt-3.5-turbo | download |
| FLAN-Muffin | 1764800 | EN | MT | COL | 60 项 NLP 任务 | 人工标注的数据集集合 | download |
| COIG(FlagInstruct) | 298428 | CN | MT | COL | 来自考试、翻译、人类价值观对齐指令和反事实修正多轮对话的数据 | 使用自动化工具并辅以人工验证 | download |
| GPT4Tools | 71446 | EN | MT | SI | 工具相关指令集合 | gpt-3.5-turbo | download |
| ShareChat | 1663241 | EN | MT | MIX | 通用指令 | 众包收集的人类与 ChatGPT(ShareGPT)之间的对话 | download |
| Auto CoT | 5816 | EN | MT | COL | 算术、常识、符号及其他逻辑推理任务 | 人工标注的数据集集合 | download |
| MOSS | 1583595 | EN/CN | TS | SI | 通用指令 | text-davinci-003 | download |
| ultrachat | 28247446 | EN | 关于世界的问题、写作与创作、对现有材料的辅助 | 两个独立的 gpt-3.5-turbo | download | ||
| Chinese-medical | 792099 | CN | TS | COL | 医疗建议相关问题 | 爬取 | download |
| CSL | 396206 | CN | MT | COL | 论文文本生成、关键词提取、文本摘要和文本分类 | 爬取 | download |
| pCLUE | 1200705 | CN | MT | COL | 通用指令 | download | |
| news_commentary | 252776 | CN | TS | COL | 翻译 | download | |
| StackLLaMA | todo | EN |
下载
你可以从 此处 下载所有已格式化的数据。下载后,请将它们放入 data 文件夹中。
你也可以从 此处 下载在各类指令数据上训练好的所有模型检查点(checkpoints)。随后,只需在 generate.py 中将 LoRA_WEIGHTS 设置为本地路径,即可直接执行模型推理(inference)。
数据格式化
我们收集的所有数据均被统一格式化为相同的模板,其中每个样本格式如下:
[
{"instruction": instruction string,
"input": input string, # (可能为空)
"output": output string}
]
注意:对于思维链(Chain-of-Thought, CoT)数据集,我们首先使用 FLAN 提供的 模板 将原始数据集转换为多种 CoT 形式,然后再转换为上述格式。格式化脚本可在 此处 找到。
多接口统一平台
环境设置
pip install -r requirements.txt
注意:在微调 ChatGLM 时,请确保 Python 版本 >= 3.9。
PEFT
- 如果你想使用除 LoRA 以外的其他方法,请安装本项目中提供的修改版 PEFT:
pip install -e ./peft
指令微调(Instruction Finetuning)
为了便于研究人员对大语言模型(LLMs)进行系统的指令微调(IFT)研究,我们收集了不同类型的指令数据,集成了多个 LLM,并统一了接口,方便用户灵活组合所需配置:
--model_type:设置要使用的 LLM。目前支持 [llama, chatglm, bloom, moss]。后两者具备较强的中文能力,未来将集成更多 LLM。--peft_type:设置要使用的参数高效微调(PEFT)方法。目前支持 [lora, adalora, prefix tuning, p tuning, prompt]。--data:设置用于 IFT 的数据类型,以灵活定制所需的指令遵循能力。例如,若需强推理能力,可设为 "alpaca-cot";若需强中文能力,可设为 "belle1.5m";若需代码与故事生成能力,可设为 "gpt4all";若需金融相关回复能力,可设为 "finance"。--model_name_or_path:用于加载目标 LLM(由--model_type指定)的不同版本模型权重。例如,若要加载 LLaMA 的 13B 版本权重,可设置为decapoda-research/llama-13b-hf。
单 GPU
- 对于 LLaMA
python3 uniform_finetune.py --model_type llama --model_name_or_path decapoda-research/llama-7b-hf \
--data alpaca-belle-cot --lora_target_modules q_proj v_proj \
--per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1
注意:对于多个数据集,可使用 --data 如下形式:--data ./data/alpaca.json ./data/finance.json <path2yourdata_1>
- 对于 ChatGLM
python3 uniform_finetune.py --model_type chatglm --model_name_or_path THUDM/chatglm-6b \
--data alpaca-belle-cot --lora_target_modules query_key_value \
--lora_r 32 --lora_alpha 32 --lora_dropout 0.1 --per_gpu_train_batch_size 2 \
--learning_rate 2e-5 --epochs 1
注意:load_in_8bit 目前尚不适用于 ChatGLM,因此 batch_size 必须比其他模型更小。
- 对于 BLOOM
python3 uniform_finetune.py --model_type bloom --model_name_or_path bigscience/bloomz-7b1-mt \
--data alpaca-belle-cot --lora_target_modules query_key_value \
--per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1
- 对于 MOSS
python3 uniform_finetune.py ---model_type moss --model_name_or_path fnlp/moss-moon-003-sft \
--data alpaca --lora_target_modules q_proj v_proj --per_gpu_train_batch_size 1 \
--learning_rate 3e-4 --epochs 3
- 对于 InternLM
python3 uniform_finetune.py --model_type internlm --model_name_or_path internlm/internlm-7b \
--data alpaca --lora_target_modules q_proj v_proj --lora_r 32 --lora_alpha 32 \
--lora_dropout 0.1 --per_gpu_train_batch_size 1 --learning_rate 2e-5 --epochs 1 \
--compute_dtype="fp32"
注意:你也可以将本地路径(保存 LLM 权重的位置)传给 --model_name_or_path。数据类型 --data 可根据你的兴趣自由设置。
多 GPU
torchrun --nnodes 1 --nproc_per_node $ngpu uniform_finetune.py $args --data $data
- 对于 LLaMA
python3 -m torch.distributed.launch --nproc_per_node 4 \
--nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy uniform_finetune.py \
--model_type llama --model_name_or_path decapoda-research/llama-7b-hf \
--data alpaca-belle-cot --lora_target_modules q_proj v_proj \
--per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1
- 对于 ChatGLM
python3 -m torch.distributed.launch --nproc_per_node 4 \
--nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
uniform_finetune.py --model_type chatglm --model_name_or_path THUDM/chatglm-6b \
--data alpaca-belle-cot --lora_target_modules query_key_value \
--lora_r 32 --lora_alpha 32 --lora_dropout 0.1 --per_gpu_train_batch_size 2 \
--learning_rate 2e-5 --epochs 1
注意:load_in_8bit 目前尚不适用于 ChatGLM,因此 batch_size 必须比其他模型更小。
- 对于 BLOOM
python3 -m torch.distributed.launch --nproc_per_node 4 \
--nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
uniform_finetune.py --model_type bloom --model_name_or_path bigscience/bloomz-7b1-mt \
--data alpaca-belle-cot --lora_target_modules query_key_value \
--per_gpu_train_batch_size 4 --learning_rate 3e-4 --epochs 1
- 对于 InternLM
python3 -m torch.distributed.launch --nproc_per_node 4 \
--nnodes=1 --node_rank=0 --master_addr=xxx --master_port=yyy \
uniform_finetune.py --model_type internlm --model_name_or_path internlm/internlm-7b \
--data alpaca --lora_target_modules q_proj v_proj --lora_r 32 --lora_alpha 32 \
--lora_dropout 0.1 --per_gpu_train_batch_size 1 --learning_rate 2e-5 --epochs 1 \
--compute_dtype="fp32"
推理(Inference)
python3 generate.py --data alpaca-belle-cot --model_type llama
python3 generate.py --data alpaca-belle-cot --model_type chatglm
python3 generate.py --data alpaca-belle-cot --model_type bloom
有关指令微调和推理的更多细节,可参考我们所基于修改的项目 此处。注意:saved-xxx7b 文件夹是 LoRA 权重的保存路径,而 LLaMA 权重会自动从 Hugging Face 下载。
推理超参数说明
top_p=0.9,
#适度提高 nucleus sampling(核采样)的概率阈值,以增加候选 token 的数量,从而提升生成多样性。
temperature=1.0,
#之前较低的 temperature 参数可能导致生成词的概率分布严重极化,使生成策略退化为贪心解码(greedy decoding)。
do_sample=True,
#do_sample 参数默认为 False。设为 True 后,生成方法将转变为 beam-search multinomial sampling(束搜索多项式采样)解码策略。
no_repeat_ngram_size=6,
#将下一个重复 n-gram 的概率设为 0,确保不会出现重复的 n-gram。此设置为经验性初步探索。
repetition_penalty=1.8,
#对于先前已出现过的词,在后续预测过程中通过引入 repetition_penalty(重复惩罚)参数降低其再次出现的概率。此设置为经验性初步探索。
参数合并
python3 merge.py --model_type llama --size 7b --lora_dir xxx --merged_dir yyy
本地聊天
python3 server.py --model_type chatglm --size 6b --lora_dir xxx
批量预测
python3 predict.py --model_type chatglm --size 6b --data for_dict_data --lora_dir xxx --result_dir yyy
Web 服务部署
python3 web.py --model_type chatglm --size 6b --lora_dir xxx
中文指令微调开源大语言模型的实证研究(截至 6 月 25 日)
注:以下实验结果均来自《An Empirical Study of Instruction-tuning Large Language Models in Chinese》(中文指令微调大语言模型实证研究)。
1. 基准测试(Benchmarks)
本文选取了两个评估基准 Belle-eval 和 MMCU,以全面评估大语言模型(LLM)在中文场景下的能力。
Belle-eval 是通过 ChatGPT 自我指导(self-instruct)构建的,包含 1,000 条多样化的指令,涵盖 10 个类别,包括常见的 NLP 任务(如问答 QA)和具有挑战性的任务(如代码和数学)。我们使用 ChatGPT 根据标准答案对模型回复进行评分。该基准被视为对通用人工智能(AGI)指令遵循能力的评估。
MMCU 是一个中文多项选择题数据集,涵盖医学、法律、心理学和教育四个专业学科(例如高考题目)。它允许大语言模型以多项选择题的形式参与人类社会的考试,因此适合评估 LLM 在多学科知识广度与深度方面的能力。
上表展示了 Belle-eval 和 MMCU 的数据统计信息。
2. 主要影响因素
我们通过实验研究了指令微调大语言模型中的三个主要因素:基础大语言模型(LLM bases)、参数高效微调方法(Parameter-efficient Methods)和中文指令数据集(Chinese Instruction Datasets)。
2.1 基础大语言模型(LLM Bases)
针对开源大语言模型,我们在 Belle-eval 和 MMCU 上分别测试了现有 LLM 以及在 Alpaca-GPT4 数据集上使用 LoRA 微调后的 LLM。
表 2 展示了开源 LLM 在 Belle-eval 上的得分,表 3 展示了 LLM 在 MMCU 上的准确率。所有开源 LLM 均使用相同的参数高效方法 LoRA 和相同的指令数据集 Alpaca-GPT4 进行微调。
实验结果:
现有 LLM 的评估
Belle-eval 上的表现
(1) 在基础 LLM 中,Bloom 表现最佳。
(2) 在经过监督微调(sft)的 LLM 中,ChatGLM 显著优于其他模型,这得益于其使用了最多的中文 token 和人类反馈强化学习(HFRL, Human Feedback Reinforcement Learning)。
(3) 开放式问答(Open QA)、数学(Math)、封闭式问答(CloseQA)和信息抽取(Extract)等类别对现有开源 LLM 仍然极具挑战性。
(4) Vicuna 和 moss-sft 相较于其基础模型 LLaMA 和 moss-base 分别有明显提升。
(5) 相比之下,sft 模型 Bloomz 和 Bloomz-mt 的表现反而低于基础模型 Bloom,因为它们倾向于生成更短的回复。
MMCU 上的表现
(1) 所有基础 LLM 表现都很差,因为在微调前几乎无法按指定格式生成内容(例如输出选项编号)。
(2) 所有 sft LLM 均优于其对应的基础 LLM。其中 Bloomz 表现最佳(甚至超过 ChatGLM),因为它能直接按要求生成选项编号,而不产生无关内容,这也与其监督微调数据集 xP3 的数据特性有关。
(3) 在四个学科中,法律对 LLM 最具挑战性。
图 1 展示了在 Alpaca-GPT4-zh 数据集上进行指令微调后 LLM 的性能结果。
对不同 LLM 进行指令微调
(1) 在 Belle-eval 上,除 Bloomz 和 Bloomz-mt 外,sft LLM 经指令微调带来的性能提升不如基础 LLM 显著。
(2) Vicuna 和 ChatGLM 在指令微调后性能下降,因为 Vicuna 是基于真实的人类-ChatGPT 对话训练的,其数据质量优于 Alpaca-GPT4;而 ChatGLM 采用了 HFRL,可能不再适合进一步的指令微调。
(3) 在 MMCU 上,大多数 LLM 在指令微调后性能均有提升,但 Bloomz 和 Bloomz-mt 却意外地出现了显著性能下降。
(4) 指令微调后,Bloom 在两个基准上均有显著提升且表现良好。尽管 ChatGLM 始终优于 Bloom,但在指令微调过程中出现了性能下降。因此,在所有开源 LLM 中,Bloom 最适合作为后续中文指令微调探索的基础模型。
2.2 参数高效微调方法(Parameter-efficient Methods)
除了 LoRA 之外,本文还收集了多种参数高效微调方法,并在 Alpaca-GPT4 数据集上对 Bloom 模型进行了指令微调。
实验结果:
参数高效方法对比
(1) SadapterH 在所有参数高效方法中表现最佳,可作为 LoRA 的替代方案。
(2) P-tuning 和 prompt-tuning 显著落后于其他方法,表明仅在嵌入层(embedding layer)添加可训练参数不足以支持 LLM 完成生成任务。
(3) 尽管 AdaLoRA 是 LoRA 的改进版本,但其性能明显下降,可能是因为 LLM 所需的 LoRA 可训练参数量已不适合进一步缩减。
(4) 对比上下两部分可以看出,增加串行适配器(即 SadapterP 和 SadapterH)的可训练参数数量并未带来性能提升,而并行适配器(即 P-adapter)则呈现出相反的现象。
训练损失(Training Loss)
(1) Prompt-tuning 和 P-tuning 收敛最慢,且收敛后的损失最高。这表明仅调整嵌入层(embedding-only)的适配器不适合用于大语言模型(LLM)的指令微调(instruction-tuning)。
(2) AdaLoRA 的初始损失非常高,因为它需要同时学习参数预算分配(parameter budget allocation),导致模型难以很好地拟合训练数据。
(3) 其他方法能够快速在训练数据上收敛,并实现良好的拟合效果。
2.3 中文指令数据集(Chinese instruction Datasets)
为了研究不同类型中文指令数据集的影响,作者收集了流行的开源中文指令数据(如表 5 所示),并使用 LoRA 对 Bloom 模型进行微调。
表 6 和表 7 展示了 Bloom 在不同指令数据集上的微调结果。
实验结果(Experimental Results):
Belle-eval 上的表现
(1) 由 ChatGPT 构建的指令数据(例如通过自指令方法生成,或收集真实的人类与 ChatGPT 对话)始终能显著提升模型的指令遵循能力,得分提高 3.1 ∼ 11 分。
(2) 在这些数据集中,Belle 表现最佳,因其包含的指令数据量最大。然而,以类似方式构建但数据量更多的 moss-sft-data 所训练的模型表现却不理想。
(3) Alpaca-GPT4 指令带来的性能提升位居第二,仅用 49K 条指令即可媲美拥有 1.54M 条指令的 Belle。
(4) Instinwild 带来的性能增益最小,因为它从推特(“in wild”)爬取的种子指令不如 Alpaca 等由人工精心设计的指令全面。
(5) 这些基于 ChatGPT 的数据主要对开放生成任务(如头脑风暴 Brain Storm 和文本生成 Generation)有显著提升效果,但在需要高阅读理解能力的任务(如封闭式问答 Close QA 和信息抽取 Extract)上表现明显下降。
(6) 这些指令数据反而损害了模型的指令遵循能力,因为各类 NLP 或考试类数据集的形式和意图较为单一,容易导致过拟合。
(7) 其中,COIG-trans 表现最佳,因其涵盖超过 2000 种不同任务,任务指令形式丰富多样。相比之下,xP3 和 COIG-ccmc 对模型性能的负面影响最大。前者仅覆盖少量任务类型(翻译和问答),后者则专注于反事实修正对话(counterfactual correction conversations),均未能覆盖人类常用的主流指令和任务。
MMCU 上的表现
(1) 在每个数据集上进行指令微调均能带来性能提升。
(2) 在上半部分所示的基于 ChatGPT 的数据中,ShareGPT-zh 的表现远低于其他数据集。这可能是因为真实用户很少就学术主题提出多项选择题。
(3) 在下半部分所示的数据集收集类数据中,HC3 和 COIG-ccmc 的准确率最低。原因在于 HC3 的独特问题仅有 13K 条,而 COIG-ccmc 的任务格式与 MMCU 差异显著。
(4) COIG-exam 带来了最大的准确率提升,得益于其任务格式与 MMCU 高度相似。
3. 其他因素
四个其他因素:思维链(CoT, Chain-of-Thought)、中文词汇表扩展、提示语言(Language of Prompts)以及人类价值观对齐(Human-value Alignment)
3.1 思维链(CoT)
在 CoT 方面,作者比较了在指令微调(instruction-tuning)过程中加入 CoT 数据前后的模型性能。
实验设置:
我们从 FLAN 中收集了 9 个 CoT 数据集及其对应的提示(prompts),并使用 Google Translate 将其翻译为中文。随后,比较在指令微调中加入 CoT 数据前后的性能差异。
首先,将加入 CoT 数据的方式标记为 “Alpaca-GPT4+CoT”。此外,在每条指令末尾添加一句“先思考,再决定”(即英文中的 "think step by step"),以引导模型基于 CoT 进行回答,并将这种方式标记为 “Alpaca-GPT4+CoT*”。
实验结果:
“Alpaca-GPT4+CoT” 在需要强推理能力的代码(Code)和数学(Math)任务上优于 “Alpaca-GPT4”。此外,在 MMCU 教育(Education)任务上也有显著提升。
如 “Alpaca-GPT4+CoT*” 所示,仅添加这一简单句子即可进一步提升代码和教育类推理任务的性能,但数学任务的表现略逊于 “Alpaca-GPT4+CoT”。这可能需要进一步探索更鲁棒的提示设计。
3.2 中文词汇表扩展
在中文词汇表扩展方面,作者测试了分词器(tokenizer)词汇表中中文 token 数量对大语言模型(LLMs)中文表达能力的影响。例如,若某个汉字在词汇表中,则可用单个 token 表示;否则可能需要多个 token 来表示。
实验设置: 作者主要在 LLaMA 上进行实验。LLaMA 使用 SentencePiece(中文字符词汇表大小为 32K),覆盖的中文字符少于 Bloom(250K)。
实验结果:
在扩大中文词汇表的基础上,使用更多中文语料进行预训练,始终有助于提升模型的指令遵循能力。
与直觉相反,“llama-voc-pre-l”(100B)在 MMCU 上的表现不如 “llama-voc-pre”(20B),这表明在学术考试任务上,更多的预训练数据未必带来更高的性能。
3.3 提示语言(Language of Prompts)
在提示语言方面,作者测试了使用中文提示进行指令微调的适用性。
图 4 展示了基于 LLaMA 和 Bloom 使用中文与英文提示的结果。在对 LLaMA 进行指令微调时,使用中文提示相比英文提示在两个基准测试上均能提升性能;而在 Bloom 上则观察到相反的现象。
实验结果:
对于中文能力较弱的模型(如 LLaMA),使用中文提示能有效帮助其生成中文回答。
对于中文能力较强的模型(如 Bloom),使用其更擅长的语言(英文)作为提示,能更好地引导模型理解指令微调的过程。
3.4 人类价值观对齐(Human-value Alignment)
为了避免大语言模型生成有害内容,使其与人类价值观对齐是一个关键问题。我们在指令微调中加入了由 COIG 构建的人类价值观对齐数据,以探索其影响。
图 5 比较了在指令微调中加入与不加入人类价值观对齐数据的结果。
实验结果: 加入人类价值观对齐会导致性能略有下降。如何在未来研究中平衡大语言模型的无害性(harmlessness)与性能,是一个值得探索的方向。
定量分析
注:下图展示了截至 3 月 26 日所收集数据集的统计情况,仅用于说明数据收集的动机。此后已收集更多数据集,例如金融相关的指令数据集。
当前收集的指令微调数据集主要包括以下三部分:
alpaca_data_cleaned.json:约 5.2 万条英文指令遵循训练样本。CoT_data.json:9 个 CoT 数据集,共约 7.5 万条样本。(由 FLAN[7] 发布)belle_data_cn.json:约 50 万条中文指令遵循训练样本。(由 BELLE[8] 发布)
CoT 与中文指令的消融实验(Ablation of CoT and Chinese Instructions)
“w/o CoT” 和 “w/o CN” 分别表示在指令微调数据中排除 CoT 数据和中文指令的模型。
上表展示了两个需要一定推理能力(涉及数值计算)才能正确回答的示例。
如中间列所示,Ours w/o CoT 未能生成正确回答,表明一旦微调数据中不含 CoT 数据,模型的推理能力会显著下降。这进一步证明 CoT 数据对大语言模型至关重要。

上表展示了两个需要具备中文指令响应能力的示例。
如右列所示,Ours w/o CN 要么生成的内容不合理,要么用英文回答中文指令。这表明在微调过程中移除中文数据会导致模型无法处理中文指令,进一步证明了收集中文指令微调数据的必要性。

上表展示了一个相对困难的示例,既需要一定的中国历史知识积累,又要求具备逻辑完整地陈述历史事件的能力。如表所示,Ours w/o CN 仅能生成简短且错误的回答,这是由于缺乏中文微调数据,自然也缺少相应的中国历史知识。尽管 Ours w/o CoT 列出了一些相关的中国历史事件,但其表述逻辑自相矛盾,这是由于缺少 CoT 数据所致。
综上所述,使用我们完整的数据集(包含英文、中文和 CoT 指令数据)进行微调的模型,能显著提升模型的推理能力和中文指令遵循能力。
CoT 数据的效果

奇数行的样本未使用 CoT(Chain-of-Thought,思维链)提示,例如“逐步推理”。Ours(w/CoT) 和 Alpaca 均基于 LLaMA-7B,两者唯一的区别在于 Ours(w/CoT) 的指令微调数据中额外包含了 CoT 数据。
从上表中,我们发现:
Ours(w/CoT)总是在答案前生成正确的推理过程,而 Alpaca 无法生成任何合理的推理过程,如前四个例子(常识性问题)所示。这表明使用 CoT 数据进行微调可以显著提升模型的推理能力。- 对于
Ours(w/CoT),CoT 提示(例如在输入问题前拼接“step-by-step”)对简单问题(如常识性问题)影响较小,但对复杂问题(如后四个需要推理的问题)有显著效果。 - 对于 Alpaca,CoT 提示始终效果甚微,甚至产生负面影响。在最后两个例子中,加入 CoT 提示后,Alpaca 将原本正确的答案改成了错误答案。这可能是由于微调阶段和推理阶段的输入形式不一致所致。
中文指令数据的效果
对中文指令响应的定量比较。
我们的模型基于 7B LLaMA,在 52K 条英文指令和 50 万条中文指令上进行了微调。Stanford Alpaca(我们复现的版本)基于 7B LLaMA,在 52K 条英文指令上微调。BELLE 则基于 7B BLOOM,在 200 万条中文指令上微调。
从上表中可以得出以下观察:
- 与 Alpaca 相比,
ours (w/ CN)具备更强的中文指令理解能力。在第一个例子中,Alpaca 无法区分instruction部分和input部分,而我们的模型可以正确区分。 - 中文指令微调数据能显著增强模型用中文交互的能力。在第二个例子中,
ours (w/ CN)不仅提供了正确的代码,还附上了对应的中文注释,而 Alpaca 没有做到这一点。此外,如第 3–5 个例子所示,Alpaca 只能用英文回应中文指令。 - 与 BELLE 相比,
ours (w/ CN)在需要开放式回答的指令上(如最后两个例子)仍有待提升。BELLE 在此类指令上的出色表现归因于:1)其 BLOOM 主干模型在预训练阶段接触了更多多语言数据;2)其中文指令微调数据量远超我们(200 万 vs 50 万)。
对英文指令响应的定量比较。本小节旨在探究中文指令微调是否会对 Alpaca 的英文指令遵循能力产生负面影响。
从上表中,我们发现:
- 使用中文指令数据进行微调并不会削弱模型原有的英文指令遵循能力;相反,在生成英文指令的响应方面还有一定提升。例如在第三个例子中,
ours (w/ CN)列出了比 Alpaca 多三个省份的详细信息。
引用
如果您使用了本仓库中的数据收集、代码或实验发现,请引用本仓库。
@misc{si2023empirical,
title={An Empirical Study of Instruction-tuning Large Language Models in Chinese},
author={Qingyi Si and Tong Wang and Zheng Lin and Xu Zhang and Yanan Cao and Weiping Wang},
year={2023},
eprint={2310.07328},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
对于数据和模型,请同时引用原始数据、参数高效方法以及大语言模型(LLMs)的来源。
我们特别感谢 APUS AilMe Lab 赞助了实验所需的 8 块 A100 GPU。
(回到顶部)
特别感谢所有贡献者
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。