Blossom5 – 高性能开源大语言模型

介绍

Blossom是一个开源的对话式大型语言模型,旨在提供高质量的自然语言理解和生成能力,实现通用人工智能,以支持各种应用。除了模型权重之外,还发布了SFT数据,以便开发人员基于此进行进一步的研究和开发。自2023年7月推出第一代以来,Blossom已经迭代更新至第五个版本,模型综合能力得到了极大提升。

现在,隆重推出Blossom 5.0,这是本项目的又一个里程碑。

你可以通过BlossomChat在线体验Blossom5模型。

特性

  • 完全开源:Blossom不仅开源了模型的权重,还公开了其训练使用的SFT(Supervised Fine-Tuning)数据,使研究人员和开发者能够复现模型训练的过程,并在此基础上进行改进。
  • 双语支持:与只专注于英文的模型不同,Blossom同时针对中文和英文进行优化,对于中文用户更加友好。
  • 强大性能:Blossom展示出优秀的语言理解和生成能力,无论在传统的NLP任务还是在生成式的自然语言对话任务中,都能达到领先水平。
  • 注重安全:在训练的过程中,Blossom被设计为遵循符合人类伦理和社会价值观的标准,能够避免生成不恰当的内容,并维护积极的交流环境。
  • 多种尺寸:模型提供4B、9B、14B、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

如果希望将模型权重完全放置到GPU上,可以使用带有gpu后缀的tag。

ollama run azure99/blossom:gpu

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(数学问题求解)等评估集对模型基础能力进行评估。

ModelAverageARCHellaSwagMMLUTruthfulQAWinograndeGSM8K
Qwen1.5-72B72.9165.8785.9977.259.6183.0365.73
blossom-v5-34b72.6566.9884.797662.6883.4362.02
Qwen1.5-32B70.4763.578574.357.3981.4561.11
Yi-34B69.4264.5985.6976.3556.2383.0350.64
Llama-2-70b67.8767.3287.3369.8344.9283.7454.06
blossom-v5-14b67.5758.4580.7268.4554.8975.1467.78
Qwen1.5-14B66.756.5781.0869.3652.0673.4867.63
blossom-v5-9b64.6962.4678.4169.8152.7876.3248.37
blossom-v5-mistral-7b61.8862.6384.2662.4551.8378.3031.84
Qwen1.5-7B61.7654.1878.5161.9751.0871.2753.53
Llama-2-7b50.9753.0778.5946.8738.7674.0314.48

AlignBench

AlignBench是一个全面的中文大语言模型评估集,通过专业知识、中文理解、基本能力、数学能力、写作能力、综合问答、角色扮演、逻辑推理八个维度综合评估大模型的中文能力。

模型专业中文任务数学写作问答扮演逻辑推理语言总分
gpt-4-06137.566.767.166.497.317.267.486.336.417.256.83
blossom-v5-34b8.357.207.025.477.858.447.766.095.787.776.78
blossom-v5-14b7.706.986.885.427.468.347.435.835.637.476.55
blossom-v5-9b7.417.067.084.937.568.787.565.425.187.576.38
yi-34b-chat-02057.637.556.954.407.667.947.435.765.087.536.30
gpt-3.5-turbo-06136.295.606.014.907.276.976.984.794.856.525.68
spark_desk_v2(讯飞星火)5.966.295.764.537.256.377.034.624.586.445.51
qwen-14b-chat5.985.846.464.546.476.716.384.504.526.315.41
qwen-7b-chat5.125.526.013.516.285.896.163.803.655.834.74
chatglm2-6b5.155.125.243.286.836.685.953.353.315.834.57

MTBench

MTBench是一个多轮对话的大语言模型评估集,通过写作、角色扮演、推理、数学、编码、提取、STEM、人文八个维度,以及两轮对话来综合评估大模型的多轮对话能力。

模型第一轮第二轮总分
gpt-48.969.028.99
blossom-v5-14b8.737.618.17
blossom-v5-34b8.387.668.02
gpt-3.5-turbo8.087.817.94
blossom-v5-9b8.267.337.80
blossom-v5-mistral-7b7.817.407.60
zephyr-7b-beta7.34
vicuna-33b-v1.37.466.787.12
qwen-14b-chat6.96
Mistral-7B-Instruct-v0.16.84

Azure99

底层码农,休闲音游玩家,偶尔写写代码

看看这些?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注