https://huggingface.co/datasets/BAAI/Infinity-Instruct
指令微调是引导语言模型落地、构建高性能对话模型的关键一步。针对目前开源的指令数据集质量低、覆盖领域少、数据信息不透明等问题,智源研究院推出了千万级指令微调数据集Infinity Instruct。该数据集今年6月发布,近日完成了新一轮迭代,包括Infinity-Instruct-7M基础指令数据集和Infinity-Instruct-Gen对话指令数据集。
Infinity-Instruct-7M包含744万条数学、代码、常识问答等领域的基础指令数据,用于进一步全面提升预训练模型的基础能力。Opencompass测试结果显示,经过在Infinity-Instruct-7M数据集上的微调,Llama3.1-70B、Mistral-7B-v0.1综合能力评价可基本对齐官方自己发布的对话模型,且InfInstruct-7M-Mistral-7B的综合评分超过了GPT-3.5,InfInstruct-7M-Llama3.1-70B已十分接近GPT-4。
*官方汇报结果
Infinity-Instruct-Gen包含149万条合成的复杂指令,用于提升模型在各种真实对话场景中回复的鲁棒性。基于该数据,对经过Infinity-Instruct-7M增强的模型做进一步SFT,即可取得超过官方对话模型的效果。而大多数的官方对话模型除了做基本的SFT外,还会做DPO/RLHF等对齐训练以提升模型的对话能力,产生额外的训练成本。
智源在MTBench、AlpacaEval2、Arena-Hard三个主流榜单上评测了Infinity-Instruct 7M+Gen对模型对话能力的增益,其中,AlpacaEval2和Arena-Hard与真实人类评价榜单Chatbot Arena有很高的一致率,MTBench则评测模型的多轮对话能力。
如下左图所示,InfInstruct-7M-Gen-Mistral-7B,InfInstruct-7M-Gen-Llama3.1-8B,InfInstruct-7M-Gen-Llama3.1-70B等经过Infinity Instruct微调的模型已经超越了官方对话模型的性能。Arena-Hard上InfInstruct-7M-Gen-Llama3.1-70B(66)超过了Llama3.1-70B-Instruct(55.7)和Llama3.1-405B-Instruct(64.1)。此外,如右下图所示,AlpacaEval2.0榜单上,InfInstruct-7M-Gen-Llama3.1-70B(46.1)更是超过了GPT4-0314(35.3),非常接近GPT4-1106(50)的水准,真正实现了GPT-4级别的对话能力。
Infinity Instruct数据集今年6月在Flopsera,Huggingface等平台发布后,快速到达了Huggingface Dataset的Trending第一,且吸引大量基于Infinity Instruct的开源微调工作。
下载使用
Infinity-Instruct可在Huggingface、DataHub、Flopsera等平台下载。
Huggingface: https://huggingface.co/datasets/BAAI/Infinity-Instruct
DataHub: https://data.baai.ac.cn/details/InfinityInstruct
Flopsera: http://open.flopsera.com/flopsera-open/details/InfinityInstruct
Huggingface提供了快速下载Infinity-Instruct系列数据集及模型的代码。
##数据集下载
from datasets import load_dataset
dataset_7M = load_dataset('BAAI/Infinity-Instruct','7M',split='train')
dataset_Gen = load_dataset('BAAI/Infinity-Instruct','Gen',split='train')
##模型下载
from transformers import AutoModelForCausalLM, AutoTokenizer
model_llama3_1_70B = AutoModelForCausalLM.from_pretrained("BAAI/Infinity-Instruct-7M-Gen-Llama3_1-70B",
torch_dtype=torch.bfloat16,
device_map="auto"
)
tokenizer_llama3_1_70B = AutoTokenizer.from_pretrained("BAAI/Infinity-Instruct-7M-Gen-Llama3_1-70B")
model_mistral_7B = AutoModelForCausalLM.from_pretrained("BAAI/Infinity-Instruct-7M-Gen-Mistral-7B",
torch_dtype=torch.bfloat16,
device_map="auto"
)
tokenizer_mistral_7B = AutoTokenizer.from_pretrained("BAAI/Infinity-Instruct-7M-Gen-Mistral-7B")
Infinity-Instruct给每一条指令数据标注了语种、能力类型、任务类型、数据来源等信息,便于使用者根据自身需要筛选数据子集。
技术路线
智源研究院搜集了7500万余条开源指令作为待选指令池,采用数据选择与指令合成两条途径快速迭代,构建高质量的基础、对话指令数据集,以填补开源对话模型与GPT-4之间的基础能力、对话能力差距。
基础指令数据筛选
对于基础指令数据集,筛选流程主要考虑训练数据集和目标数据集数据分布的对齐,基于DSIR的思路,在训练数据集上进行排序,选取训练集的子集,拟合目标数据集的分布。
对话数据集生成、进化、评价
对于对话指令数据集,Infinity-Instruct首先采样了部分高质量的开源指令集,并为每条指令分配一组标签,描述完成指令所需的能力和知识。标签系统共有两个级别:
-
第一级标签: 宏观类别,如 "自然语言处理 "和 "数学推理"。共包括 26 个类别。
-
第二集标签:刻画具体任务,包含超过1.5w个类别。
-
基于此系统,就能识别指令集的内容分布以及完成不同任务所需的能力,构建一个高质量的种子数据集。随后,Infinity-Instruct参考WizardLM的方法对种子指令在广度、深度方向上进行扩展,并用AI Agent从指令合规性的角度剔除未能进化的数据。最后,进化后的指令作为初始输入,使用AI Agent扮演不同角色,为每条指令生成 2 至 4 轮对话。
数据去污、去重
为避免构造的数据存在自身重复、或与评测榜单重复的样本,Infinity-Instruct对所有数据应用了MinHash进行去重。并基于BGE检索剔除了和AlpacaEval、MT-Bench等评测榜单重复的样本。
训练框架
考虑到微调成本,项目使用FlagScale去掉训练样本中不必要的pad,压缩样本量,同时应用模型切分、切分支持大模型在数百万量级指令数据集上的训练。初步测试可比传统微调框架,如FastChat+Accelerate快三倍以上。
未来规划
Infinity Instruct未来将开源基础、对话指令数据处理的全流程代码,以及模型训练代码。同时,智源将探索扩展Infinity Instruct数据策略到对齐、预训练阶段,支持语言模型构建全生命周期的高质量数据需求。
Infinity RLAIF:基于Infinity Instruct标签体系以及生成指令构建了50K 对齐数据的第一个版本,实验结果显示,Infinity-Gemma-2-9B-SimPO 在AlpacaEval上达到 73.4,在Arena Hard上达到 59.1。未来会进行更多对齐数据、算法的探索。
Infinity Math:基于多个开源数学数据集构建了可无限扩增的数学领域指令数据集,其中POT指令数据可提升在多个7B的基础语言模型和基础代码模型的zero-shot数学能力180%-510%。