Blossom5 – 高性能开源大语言模型
介绍
Blossom是一个开源的对话式大型语言模型,旨在提供高质量的自然语言理解和生成能力,实现通用人工智能,以支持各种应用。除了模型权重之外,还发布了SFT数据,以便开发人员基于此进行进一步的研究和开发。自2023年7月推出第一代以来,Blossom已经迭代更新至第五个版本,模型综合能力得到了极大提升。
现在,隆重推出Blossom 5.0,这是本项目的又一个里程碑。
你可以通过BlossomChat在线体验Blossom5模型。
特性
- 完全开源:Blossom不仅开源了模型的权重,还公开了其训练使用的SFT(Supervised Fine-Tuning)数据,使研究人员和开发者能够复现模型训练的过程,并在此基础上进行改进。
- 双语支持:与只专注于英文的模型不同,Blossom同时针对中文和英文进行优化,对于中文用户更加友好。
- 强大性能:Blossom展示出优秀的语言理解和生成能力,无论在传统的NLP任务还是在生成式的自然语言对话任务中,都能达到领先水平。
- 注重安全:在训练的过程中,Blossom被设计为遵循符合人类伦理和社会价值观的标准,能够避免生成不恰当的内容,并维护积极的交流环境。
- 多种尺寸:模型提供4B、9B、34B等多种尺寸,分别适合手机端、个人PC、云端部署,用户可以根据实际场景选择适合的模型。
模型权重
每个尺寸的模型都提供了HuggingFace Transformers和LLaMA.cpp GGUF两种格式,以及对应的在线Demo。
注意:34B版本的Demo经过了4Bit量化,效果会有一定程度的降低。
模型 | 参数量 | 预训练模型 |
---|---|---|
blossom-v5.1-34b GGUF 🤗演示 | 340亿 | 01-ai/Yi-1.5-34B |
blossom-v5.1-9b GGUF 🤗演示 | 90亿 | 01-ai/Yi-1.5-9B |
blossom-v5-4b GGUF | 40亿 | Qwen/Qwen1.5-4B |
训练概述
训练一个综合性能强大,且能够遵从复杂指令的大型语言模型是十分有挑战性的。受限于篇幅长度,此处仅简单介绍Blossom的训练过程,更详细的训练细节会在后续推出。
数据多样性
Blossom的训练数据非常注重多样性,我们认为保证数据的多样性远比增加数据数量重要。与动辄百万的大规模指令数据集相比,Blossom仅使用100K左右的数据进行指令精调。
数据的多样性实际上包含两个部分,指令多样性和输入多样性,这两部分同样重要,以”计算1+2的和”为例:
- 指令多样性:计算a+b的和,是一个指令。
- 输入多样性:1、2则是输入。
数据构成
我们基于已有的研究成果,从四个方面全面增强模型的综合能力。
- Orca:基于Flan,包含近2000种任务,虽然任务种类并没有十分丰富,但是它拥有大量多样性的输入。我们使用Orca和Wizard来进行互补,保证指令多样性和输入多样性。
- Wizard:基于Evol-Instruct,一个由LLM不断迭代生成复杂指令的数据集,然而,LLM生成的数据往往输入的多样性很差。
- Math:基于GSM8K、Math23K中的问题,来让LLM生成包含解题步骤的答案,并基于原始数据集中的标注答案,校验正确性。
- Chat:基于ShareGPT,整体多样性最强,包含多轮对话的数据。此外,由于问题都是人类提出的,可能包含一些拼写错误和表述问题,这有助于增强模型对于人类输入的鲁棒性。
标注风格的一致性
我们经常会使用来源不同的指令数据集进行混合训练,来扩展数据的多样性。但是需要注意,保证标注数据风格一致是非常重要的。例如,一组数据的风格更倾向于标注简短的回答,另一组数据更倾向于标注完整的推理过程,如果将两组数据混合进行训练,得到的结果可能非常糟糕,因为两组数据的目标并不相同。
但是,如果直接使用多个来源不同的数据集,非常难保证标注风格一致,例如,Orca使用GPT 3.5、GPT 4进行标注,Wiazrd使用GPT 3.5进行标注,而ShareGPT更加糟糕,包含了多个不同版本的ChatGPT数据。
因此,我们舍弃了原始数据集中的所有输出,仅使用原始指令,重新利用LLM标注输出。
高质量的翻译指令数据
当前大多数高质量的开源指令数据集或传统自然语言处理(NLP)任务数据集都是以英文为主的。相比之下,中文数据集在数量和质量上都相对落后,为了弥补这一差距,将英文数据集准确且高效地翻译为中文成为了一个值得考虑的方案。
- 传统机器翻译:无法区分指令与输入,例如对于代码编写的场景,” Implement the following code in java”是指令,而下面的代码则是输入,我们仅仅希望将” Implement the following code in java”翻译为中文,而不希望翻译代码,但是传统的机器翻译方式无法识别指令中的数据。
- 大语言模型翻译:虽然可以在Prompt中要求大模型区分指令和输入,避免了传统机器翻译的缺点。然而,大模型存在指令注入的问题,且非常容易输出无关的解释。
我们采用大语言模型进行翻译,并且更进一步,在Prompt中约束大语言模式使用JSON进行输入与输出,这样可以很好的避免指令注入,并且在对输出进行反序列化时,可以检测是否发生了指令注入。
多阶段训练
实验表明,分阶段训练,有助于模型更好的从简单问题平滑的迁移到复杂问题。Blossom将训练分为两个阶段:
- 一阶段(90K数据):由40K Orca、40K Wiazrd、10K Math组成,训练1个epoch。这一阶段,主要增强模型的传统NLP能力、指令遵从能力、数学能力。
- 二阶段(30K数据):由12K Chat、上一阶段随机采样20%的数据组成,训练3个epoch。这一阶段尽可能的保留上一阶段的能力,并且引入由真实人类交互、较为复杂的多轮对话数据,来全面提升模型能力。
开放数据
下面是Blossom的训练数据,针对多场景、多语言增强模型的综合能力。
数据集 | 类型 | 数据量 |
---|---|---|
blossom-chat-v3 | 多轮通用对话 | 5K |
blossom-math-v4 | 包含推理过程的数学题目 | 10K |
blossom-orca-v3 | 解释型指令 | 40K |
blossom-wizard-v3 | 更复杂的指令 | 20K |
模型部署
Ollama
安装Ollama后即可在命令行中使用下面的命令一键启动,你可以打开模型列表查看全部可用模型(4b~34b)。
ollama run azure99/blossom
Android编译Ollama
首先需要安装Termux,然后执行下面的脚本,它会自动编译Ollama并启动服务,每次重启后,需要重新执行脚本。
curl -s https://raw.githubusercontent.com/Azure99/BlossomLM/main/inference/ollama/termux.sh | bash
执行完毕后,使用ollama启动。对于中文场景,你可能需要添加--nowordwrap
来避免换行异常。
ollama run azure99/blossom --nowordwrap
Transformers
使用下面的命令进行安装,通过python web_demo.py
启动网页Demo。
注意:在安装pytorch时,请务必参考官方文档。
对于个人本地化部署场景,推荐使用Ollama;对于高并发场景,推荐使用vLLM。
git clone https://github.com/Azure99/BlossomLM.git cd BlossomLM/inference/transformers pip install -r requirements.txt python web_demo.py
模型评估
基础能力
通过ARC(常识推理)、HellaSwag(情境推理)、MMLU(多项选择问答)、TruthfulQA(真实性问答)、Winogrande(语言推理)、GSM8K(数学问题求解)等评估集对模型基础能力进行评估。
Model | Average | ARC | HellaSwag | MMLU | TruthfulQA | Winogrande | GSM8K |
---|---|---|---|---|---|---|---|
Qwen1.5-72B | 72.91 | 65.87 | 85.99 | 77.2 | 59.61 | 83.03 | 65.73 |
blossom-v5-34b | 72.65 | 66.98 | 84.79 | 76 | 62.68 | 83.43 | 62.02 |
Qwen1.5-32B | 70.47 | 63.57 | 85 | 74.3 | 57.39 | 81.45 | 61.11 |
Yi-34B | 69.42 | 64.59 | 85.69 | 76.35 | 56.23 | 83.03 | 50.64 |
Llama-2-70b | 67.87 | 67.32 | 87.33 | 69.83 | 44.92 | 83.74 | 54.06 |
blossom-v5-14b | 67.57 | 58.45 | 80.72 | 68.45 | 54.89 | 75.14 | 67.78 |
Qwen1.5-14B | 66.7 | 56.57 | 81.08 | 69.36 | 52.06 | 73.48 | 67.63 |
blossom-v5-9b | 64.69 | 62.46 | 78.41 | 69.81 | 52.78 | 76.32 | 48.37 |
blossom-v5-mistral-7b | 61.88 | 62.63 | 84.26 | 62.45 | 51.83 | 78.30 | 31.84 |
Qwen1.5-7B | 61.76 | 54.18 | 78.51 | 61.97 | 51.08 | 71.27 | 53.53 |
Llama-2-7b | 50.97 | 53.07 | 78.59 | 46.87 | 38.76 | 74.03 | 14.48 |
AlignBench
AlignBench是一个全面的中文大语言模型评估集,通过专业知识、中文理解、基本能力、数学能力、写作能力、综合问答、角色扮演、逻辑推理八个维度综合评估大模型的中文能力。
模型 | 专业 | 中文 | 任务 | 数学 | 写作 | 问答 | 扮演 | 逻辑 | 推理 | 语言 | 总分 |
---|---|---|---|---|---|---|---|---|---|---|---|
gpt-4-0613 | 7.56 | 6.76 | 7.16 | 6.49 | 7.31 | 7.26 | 7.48 | 6.33 | 6.41 | 7.25 | 6.83 |
blossom-v5-34b | 8.35 | 7.20 | 7.02 | 5.47 | 7.85 | 8.44 | 7.76 | 6.09 | 5.78 | 7.77 | 6.78 |
blossom-v5-14b | 7.70 | 6.98 | 6.88 | 5.42 | 7.46 | 8.34 | 7.43 | 5.83 | 5.63 | 7.47 | 6.55 |
blossom-v5-9b | 7.41 | 7.06 | 7.08 | 4.93 | 7.56 | 8.78 | 7.56 | 5.42 | 5.18 | 7.57 | 6.38 |
yi-34b-chat-0205 | 7.63 | 7.55 | 6.95 | 4.40 | 7.66 | 7.94 | 7.43 | 5.76 | 5.08 | 7.53 | 6.30 |
gpt-3.5-turbo-0613 | 6.29 | 5.60 | 6.01 | 4.90 | 7.27 | 6.97 | 6.98 | 4.79 | 4.85 | 6.52 | 5.68 |
spark_desk_v2(讯飞星火) | 5.96 | 6.29 | 5.76 | 4.53 | 7.25 | 6.37 | 7.03 | 4.62 | 4.58 | 6.44 | 5.51 |
qwen-14b-chat | 5.98 | 5.84 | 6.46 | 4.54 | 6.47 | 6.71 | 6.38 | 4.50 | 4.52 | 6.31 | 5.41 |
qwen-7b-chat | 5.12 | 5.52 | 6.01 | 3.51 | 6.28 | 5.89 | 6.16 | 3.80 | 3.65 | 5.83 | 4.74 |
chatglm2-6b | 5.15 | 5.12 | 5.24 | 3.28 | 6.83 | 6.68 | 5.95 | 3.35 | 3.31 | 5.83 | 4.57 |
MTBench
MTBench是一个多轮对话的大语言模型评估集,通过写作、角色扮演、推理、数学、编码、提取、STEM、人文八个维度,以及两轮对话来综合评估大模型的多轮对话能力。
模型 | 第一轮 | 第二轮 | 总分 |
---|---|---|---|
gpt-4 | 8.96 | 9.02 | 8.99 |
blossom-v5-14b | 8.73 | 7.61 | 8.17 |
blossom-v5-34b | 8.38 | 7.66 | 8.02 |
gpt-3.5-turbo | 8.08 | 7.81 | 7.94 |
blossom-v5-9b | 8.26 | 7.33 | 7.80 |
blossom-v5-mistral-7b | 7.81 | 7.40 | 7.60 |
zephyr-7b-beta | – | – | 7.34 |
vicuna-33b-v1.3 | 7.46 | 6.78 | 7.12 |
qwen-14b-chat | – | – | 6.96 |
Mistral-7B-Instruct-v0.1 | – | – | 6.84 |