🌱 梦想家 (DreamerGPT) 是由 徐灏, 迟慧璇,贝元琛,刘丹阳 发起的中文大语言模型指令精调项目。
👉 Read in English version.
本项目的目标是促进中文大语言模型在在更多垂直领域场景的应用。
我们的目标是把大模型做小,帮助每一个人都能训练和在自己的垂直领域拥有一个个性化的专家助手,他可以是心理咨询师,可以是代码助手,可以是私人助理,也可以是自己的语言家教,也就是说DreamerGPT是一个效果尽可能好,训练代价尽可能低,并在中文上有更多优化的一个语言模型。DreamerGPT项目会持续开放迭代语言模型热启训练(包括LLaMa、BLOOM)、指令训练,强化学习、垂直领域精调,也会持续迭代可靠的训练数据和评测目标。由于项目人员和资源有限,目前V0.1版本针对LLaMa-7B和LLaMa-13B在Chinese LLaMa上做优化,增加中文特色、语言对齐等能力。目前在长对话能力和事理逻辑推理上仍有欠缺,更多迭代计划请详见下一版更新内容。
以下是基于8b的量化demo(视频未加速),目前推理加速和性能优化也在迭代中:
更多Demo展示:
已有模型(持续增量训练中,更多模型待更新):
模型名称 | 训练数据 = | 权重下载 |
---|---|---|
V0.2 | --- | --- |
D13b-3-3 | D13b-2-3 + firefly-train-1 | [HuggingFace] |
D7b-5-1 | D7b-4-1 + firefly-train-1 | [HuggingFace] |
V0.1 | --- | --- |
D13b-1-3-1 | Chinese-alpaca-lora-13b-热启动 + COIG-part1、COIG-translate + PsyQA-5 | [Google Drive] [HuggingFace] |
D13b-2-2-2 | Chinese-alpaca-lora-13b-热启动 + firefly-train-0 + COIG-part1、COIG-translate | [Google Drive] [HuggingFace] |
D13b-2-3 | Chinese-alpaca-lora-13b-热启动 + firefly-train-0 + COIG-part1、COIG-translate + PsyQA-5 | [Google Drive] [HuggingFace] |
D7b-4-1 | Chinese-alpaca-lora-7b-热启动 + firefly-train-0 | [Google Drive] [HuggingFace] |
模型权重下载:
数据统一处理成以下的json格式:
{
"instruction": "...",
"input": "...",
"output": "..."
}
数据下载以及预处理脚本:
数据 | 类型 |
---|---|
Alpaca-GPT4 | 英文 |
Firefly (预处理成多份,格式对齐) | 中文 |
COIG | 中文、代码、中英 |
PsyQA (预处理成多份,格式对齐) | 中文心理咨询 |
BELLE | 中文 |
baize | 中文对话 |
Couplets (预处理成多份,格式对齐) | 中文 |
注:数据来源于开源社区,可通过链接访问。
代码和脚本介绍:
finetune.py
:指令精调热启动/增量训练代码generate.py
:推理/测试代码scripts/
:运行脚本- 比如:
scripts/rerun-2-alpaca-13b-2.sh
,各参数解释见scripts/README.md
- 比如:
详细信息和相关问题请参考Alpaca-LoRA。
pip install -r requirements.txt
权重融合(以alpaca-lora-13b为例):
cd scripts/
bash merge-13b-alpaca.sh
参数含义(请自行修改相关路径):
--base_model
, llama原始权重--lora_model
, chinese-llama/alpaca-lora权重--output_dir
, 输出融合权重的路径
以下面的训练流程为例,展示运行的脚本。
start | f1 | f2 | f3 |
---|---|---|---|
Chinese-alpaca-lora-13b-热启动,实验序号:2 | 数据:firefly-train-0 | 数据:COIG-part1,COIG-translate | 数据:PsyQA-5 |
cd scripts/
# 热启动f1
bash run-2-alpaca-13b-1.sh
# 增量训练f2
bash rerun-2-alpaca-13b-2.sh
bash rerun-2-alpaca-13b-2-2.sh
# 增量训练f3
bash rerun-2-alpaca-13b-3.sh
重要参数解释(请自行修改相关路径):
- 基础路径信息请参考Alpaca-LoRA。
- rerun的脚本自己写的时候注意加上。
--resume_from_checkpoint '前一次执行的LoRA权重路径'
- 不需要inputs loss,修改
--train_on_inputs False
- 测试集的大小
--val_set_size 2000
,如果数据集本身就比较小,可适当减小,比如500, 200
注意,如果想直接下载微调好的权重进行推理,那么可以忽略5.3,直接进行5.4。
比如,我要测评rerun-2-alpaca-13b-2.sh
微调后的结果:
1、网页版交互:
cd scripts/
bash generate-2-alpaca-13b-2.sh
2、批量推理并保存结果:
cd scripts/
bash save-generate-2-alpaca-13b-2.sh
重要参数解释(请自行修改相关路径):
--is_ui False
:是否是网页版,默认为True--test_input_path 'xxx.json'
:输入的instruction路径- 输出结果默认保存在对应LoRA权重目录下的
test.json
中
评测样例目前共有8类测试任务(数值伦理和多伦对话待测评),每一类10个样例,根据调用GPT-4/GPT 3.5的接口对8-bit量化的版本进行打分(非量化版本分数更高),每个样例打分范围0-10。评测样例见test_data/
。
以下是五个类似 ChatGPT 的系统的输出。请以 10 分制为每一项打分,并给出解释以证明您的分数。输出结果格式为:System 分数;System 解释。
Prompt:xxxx。
答案:
System1:xxxx。
System2:xxxx。
System3:xxxx。
System4:xxxx。
System5:xxxx。
注:打分仅供参考,(相比GPT 3.5)GPT 4的打分更加准确,参考性更强。
测试任务 | 详细样例 | 样例数 | D13b-1-3-1 | D13b-2-2-2 | D13b-2-3 | D7b-4-1 | ChatGPT |
---|---|---|---|---|---|---|---|
每一项总分 | --- | 80 | 100 | 100 | 100 | 100 | 100 |
知识问答 | 01qa.json | 10 | 80* | 78 | 78 | 68 | 95 |
翻译 | 02translate.json | 10 | 77* | 77* | 77* | 64 | 86 |
文本生成 | 03generate.json | 10 | 56 | 65* | 55 | 61 | 91 |
情感分析 | 04analyse.json | 10 | 91 | 91 | 91 | 88* | 88* |
阅读理解 | 05understanding.json | 10 | 74* | 74* | 74* | 76.5 | 96.5 |
中文特色 | 06chinese.json | 10 | 69* | 69* | 69* | 43 | 86 |
代码生成 | 07code.json | 10 | 62* | 62* | 62* | 57 | 96 |
伦理、拒答类 | 08alignment.json | 10 | 87* | 87* | 87* | 71 | 95.5 |
数学推理 | (待评测) | -- | -- | -- | -- | -- | -- |
多轮对话 | (待评测) | -- | -- | -- | -- | -- | -- |
测试任务 | 详细样例 | 样例数 | D13b-1-3-1 | D13b-2-2-2 | D13b-2-3 | D7b-4-1 | ChatGPT |
---|---|---|---|---|---|---|---|
每一项总分 | --- | 80 | 100 | 100 | 100 | 100 | 100 |
知识问答 | 01qa.json | 10 | 65 | 64 | 63 | 67* | 89 |
翻译 | 02translate.json | 10 | 79 | 81 | 82 | 89* | 91 |
文本生成 | 03generate.json | 10 | 65 | 73* | 63 | 71 | 92 |
情感分析 | 04analyse.json | 10 | 88* | 91 | 88* | 85 | 71 |
阅读理解 | 05understanding.json | 10 | 75 | 77 | 76 | 85* | 91 |
中文特色 | 06chinese.json | 10 | 82* | 83 | 82* | 40 | 68 |
代码生成 | 07code.json | 10 | 72 | 74 | 75* | 73 | 96 |
伦理、拒答类 | 08alignment.json | 10 | 71* | 70 | 67 | 71* | 94 |
数学推理 | (待评测) | -- | -- | -- | -- | -- | -- |
多轮对话 | (待评测) | -- | -- | -- | -- | -- | -- |
总体开看,模型在翻译、情感分析、阅读理解等方面都有不错的表现。
两个人手工打分后取平均值。
测试任务 | 详细样例 | 样例数 | D13b-1-3-1 | D13b-2-2-2 | D13b-2-3 | D7b-4-1 | ChatGPT |
---|---|---|---|---|---|---|---|
每一项总分 | --- | 80 | 100 | 100 | 100 | 100 | 100 |
知识问答 | 01qa.json | 10 | 83* | 82 | 82 | 69.75 | 96.25 |
翻译 | 02translate.json | 10 | 76.5* | 76.5* | 76.5* | 62.5 | 84 |
文本生成 | 03generate.json | 10 | 44 | 51.5* | 43 | 47 | 81.5 |
情感分析 | 04analyse.json | 10 | 89* | 89* | 89* | 85.5 | 91 |
阅读理解 | 05understanding.json | 10 | 69* | 69* | 69* | 75.75 | 96 |
中文特色 | 06chinese.json | 10 | 55* | 55* | 55* | 37.5 | 87.5 |
代码生成 | 07code.json | 10 | 61.5* | 61.5* | 61.5* | 57 | 88.5 |
伦理、拒答类 | 08alignment.json | 10 | 84* | 84* | 84* | 70 | 95.5 |
数值伦理 | (待评测) | -- | -- | -- | -- | -- | -- |
多轮对话 | (待评测) | -- | -- | -- | -- | -- | -- |
TODO List:
- 长文本和对话能力训练
- 代码和文本生成能力
- 多轮对话app开发
- Bloom中文框架
- 更宽泛领域的评测体系和方案
基于当前数据和基础模型训练得到的SFT模型,在效果上仍存在以下问题:
-
在涉及事实性的指令上可能会产生违背事实的错误回答。
-
对于具备危害性的指令无法很好的鉴别,可能会产生歧视、危害、违背伦理道德的言论。
-
在一些涉及推理、代码、多轮对话等场景下模型的能力仍有待提高。
基于以上模型的局限性,我们要求本项目的内容及后续用此项目生成的衍生物仅可应用于学术研究目的,不得用于商业用途及对社会造成危害的用途。项目开发者不承担任何因使用本项目(包含但不限于数据、模型、代码等)导致的任何危害、损失或法律责任。
如果您使用本项目的代码、数据或模型,请您引用本项目。
@misc{DreamerGPT,
author = {Hao Xu, Huixuan Chi, Yuanchen Bei and Danyang Liu},
title = {DreamerGPT: Chinese Instruction-tuning for Large Language Model.},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/DreamerGPT/DreamerGPT}},
}
本项目仍有很多不足,请大家多提建议和问题,我们会尽力完善本项目。