OpenBA

October 2, 2023 · View on GitHub

这是官方的OpenBA项目:一个从头开始预训练的开源15B双语非对称端到端模型。

代码许可 数据许可 模型许可

[中文版] [English]

目录

开源计划

我们开源了两个版本你的模型,另一个模型即将开源:

  • OpenBA-LM:支柱语言模型预训练在英语、中文和代码令牌上的340B。
  • OpenBA-Flan:我们对基础模型进行监督式微调,额外使用40B令牌和我们收集的BiFlan数据集。
  • OpenBA-Chat: 多轮对话语言模型。
  • OpenBA-Code: 代码生成模型。
  • OpenBA-InstructGen: 指令生成模型。
  • OpenBA-Tool: 工具检索增强模型

训练过程

评测结果

C-EVAL

下表是模型在C-Eval基准测试中的性能,其中#Param.表示模型参数,*表示CoT,Avg.表示平均准确率。我们汇报5-shot和0-shot性能,用对角线条划分。

Model#Param.STEMSocial ScienceHumanitiesOthersAvg.Avg.(Hard)
LLaMA65B37.845.636.137.138.831.7
ChatGLM6B33.348.341.338.038.929.2
Baichuan7B38.252.046.239.342.831.5
MOSS-moon-sft16B31.637.033.432.133.128.4
GLM-130B130B36.755.847.743.044.030.7
OpenBA15B34.846.641.141.539.831.1

BBH

下表是模型在BBH基准测试中的性能,其中#Param.表示模型参数。我们汇报所有模型的准确率。

Model#Param.BBH
ChatGLM6B31.3
Baichuan7B31.9
BatGPT15B34.1
MOSS16B29.3
OpenBA15B34.1

阅读理解

下表是模型在BELEBELE基准测试中的性能,其中#Param.表示模型参数,\dagger表示5-shot设置,\ddagger表示全英文微调,*表示针对指令模型的0-shot设置。

Model#Param.eng_Latnzho_Hanszho_HantAvg.
Falcon ()(†)40B77.266.062.268.5
LLaMA ()(†)70B82.564.657.768.2
InfoXLM ()(‡)550M79.374.672.475.4
XLM-V ()(‡)1.2B76.271.067.171.4
LLaMA2-Chat ()(*)70B78.862.459.366.8
OpenBA ()(*)15B78.675.273.775.8

机器翻译

下表是模型在包含从Flores基准测试中采样的50个句子的Flores子集上的性能,其中#Param.表示模型参数。我们汇报了所有模型的BLEU值。

Model#Param.Zh \Rightarrow EnEn \Rightarrow Zh
ChatGLM6B17.232.5
Alpaca7B15.19.8
Alpaca-LoRA7B16.414.5
PARROT7B19.624.8
BatGPT15B23.138.7
MOSS16B17.232.5
OpenBA15B23.337.4

用法

演示

首先,你需要安装以下的依赖:

pip install transformers==4.31.0 torch>=2.0 sentencepiece

注意: 请确保您的transformers库版本不超过4.33.2 !

推理时,我们在长度适应和微调阶段恢复了任务token <S> 和特殊token <extra_id_0> ,所以你可以将输入指令格式化为 <S> {your input} <extra_id_0> 以获得更好的答案。

以下是使用OpenBA-LM的句子补全示例。

>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
>>> tokenizer = AutoTokenizer.from_pretrained("OpenBA/OpenBA-LM", trust_remote_code=True)
>>> model = AutoModelForSeq2SeqLM.from_pretrained("OpenBA/OpenBA-LM", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> query = "<S>" + "苏州处太湖平原,沿江为高沙平原,河" + "<extra_id_0>"
>>> inputs = tokenizer(query, return_tensors="pt").to("cuda")
>>> outputs = model.generate(**inputs, do_sample=True, max_new_tokens=32)
>>> response = tokenizer.decode(outputs[0], skip_special_tokens=True)
>>> print(response)
流两侧为河淤平原,苏州平原是江苏平原主体,地势低平,土地肥沃,气候温和

以下是使用OpenBA-Flan遵循指令对话的示例。

>>> from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
>>> tokenizer = AutoTokenizer.from_pretrained("OpenBA/OpenBA-Flan", trust_remote_code=True)
>>> model = AutoModelForSeq2SeqLM.from_pretrained("OpenBA/OpenBA-Flan", trust_remote_code=True).half().cuda()
>>> model = model.eval()
>>> query = "<S>" + "介绍一下中国的四大名著,并分别概括其主要内容" + "<extra_id_0>"
>>> inputs = tokenizer(query, return_tensors="pt").to("cuda")
>>> outputs = model.generate(**inputs, do_sample=True, max_new_tokens=256)
>>> response = tokenizer.decode(outputs[0], skip_special_tokens=True)
>>> print(response)
中国的四大名著分别是《红楼梦》、《西游记》、《水浒传》和《三国演义》。它们分别包括故事情节、文化内涵和历史背景等方面的不同特点。《红楼梦》是一部中国古典小说,讲述了贾宝玉、林黛玉、薛宝钗等一群人物在贾府的生活和爱情故事。《西游记》是中国著名小说,描述了孙悟空、猪八戒、沙悟净等一众妖魔鬼怪的冒险历程和故事。《水浒传》是一部中国古典小说,描述了宋江等一百零八位好汉的反抗故事。《三国演义》是中国古代著名小说,讲述了三国时期的历史和战争故事。这些小说在文学、历史、哲学和文化等方面都有着不同的影响和地位。

你可以如下运行样例:

python gradio_chat_demo.py  # 运行对话模型样例
python gradio_code_demo.py  # 运行代码模型样例

训练

我们的训练代码在training文件夹中。基于Megatron-LM,我们进行了以下实现:

  • SwiGLU激活函数,
  • UL2训练目标,
  • 旋转位置嵌入,
  • 一个统一的MMap数据处理方法,适用于预训练和微调阶段。

对于预训练,应事先安装相关依赖,如Megatron-LM中所述,然后您可以简单地运行以下命令将文本处理为字节,这样MMap数据集可以更快地读取:

cd training
bash scripts/data_process_span_corr.sh  # 处理预训练数据
bash scripts/data_process_flan.sh  # 处理微调数据

您可以通过以下命令在多个节点上运行分布式训练

bash scripts/run_pretrain.sh  # 预训练
bash scripts/run_stretch.sh  # 长度适应
bash scripts/run_flan.sh   # 微调

详细信息

模型结构

OpenBA模型是遵循传统的encoder-decoder架构。 值得注意的是,编码器和解码器扮演不同的角色,其中编码器赋予模型强大的理解能力,而解码器带来模型的生成能力,并且已有的工作表明,具有更多encoder层的encoder-decoder模型可以实现强大的性能。 为了填补更深的解码器为基础的大语言模型的空白,我们还设计了一个非对称结构,其中超参数列在下表中。

EncoderDecoderAttn Headsdmodeld_{model}dffd_{ff}#Param.(B)Vocab SizeTraining TokensPos Emb
12364040961638414.6251000380BRoPE
  • 语言:中文/英文
  • 许可证:本项目中的代码根据Apache 2.0许可证进行许可,模型权重根据GNU AGPL 3.0许可证进行许可。如果您打算将本项目中的模型用于商业用途或公共部署,请发送电子邮件给我们以获得授权。商业使用信息仅用于记录目的,不收费。

训练数据

上图展示了训练数据的组成。图(a)表示预训练数据集的组成比例。图(b)表示双语Flan数据集的组成。图(c)表示中文Flan数据集的更细粒度组成。

免责声明

使用OpenBA-LM应遵循社会规范,不得用于危害国家或社会安全或违反法律的活动。此外,我们还要求用户不要将OpenBA-LM用于尚未经过适当安全审查和记录的互联网服务。我们希望所有用户都遵守这一原则,确保技术发展在一个有序、合法的环境中进行。

我们已尽最大努力确保模型训练过程中使用的数据符合规定。然而,尽管我们付出了巨大的努力,但由于模型和数据的复杂性,仍可能出现意外问题。如果在提供服务过程中,通过使用本项目中包含的模型或其修改版本生成误导性或有害的陈述,责任在于服务提供商,与本项目无关。

引用

如果您觉得我们的代码和数据对您有帮助,请按照以下格式引用:

@article{li2023openba,
  title={OpenBA: An Open-sourced 15B Bilingual Asymmetric seq2seq Model Pre-trained from Scratch},
  author={Li, Juntao and Tang, Zecheng and Ding, Yuyang and Wang, Pinzheng and Guo, Pei and You, Wangjie and Qiao, Dan and Chen, Wenliang and Fu, Guohong and Zhu, Qiaoming and others},
  journal={arXiv preprint arXiv:2309.10706},
  year={2023}
}