0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Firefly(流萤): 中文对话式大语言模型

深度学习自然语言处理 来源:YeungNLP 2023-04-07 10:36 次阅读

在本文中,笔者将介绍关于Firefly(流萤)模型的工作,一个中文对话式大语言模型。我们使用较小的模型参数量,如1.4B和2.6B,实现了不错的生成效果。

项目地址:

https://github.com/yangjianxin1/Firefly

进NLP群—>加入NLP交流群(备注nips/emnlp/nlpcc进入对应投稿群)

01

项目简介

Firefly(流萤)是一个开源的中文对话式大语言模型,使用指令微调(Instruction Tuning)在中文数据集上进行调优。同时使用了词表裁剪、ZeRO、张量并行等技术,有效降低显存消耗和提高训练效率。在训练中,我们使用了更小的模型参数量,以及更少的计算资源。

我们构造了许多与中华文化相关的数据,以提升模型在这方面的表现,如对联、作诗、文言文翻译、散文、金庸小说等。

流萤(萤火虫的别称)是中华传统文化的一个符号,虽说腐草为萤,带有悲悯意味,但萤火虽小,也能凭借其淡淡荧光,照亮夜空。本项目的名称取自杜牧的《秋夕》:银烛秋光冷画屏,轻罗小扇扑流萤。也希望本项目能够像流萤一般发出淡淡微光,为中文NLP开源社区尽绵薄之力,添砖加瓦。

《咏萤火》 
 唐.李白
雨打灯难灭,
风吹色更明。
若飞天上去,
定作月边星。

本项目的主要工作如下:

    1. 数据集firefly-train-1.1M,一份高质量的包含1.1M中文多任务指令微调数据集,包含23种常见的中文NLP任务的指令数据。对于每个任务,由人工书写若干指令模板,保证数据的高质量与丰富度。

    2. 模型裁剪:我们开发了LLMPruner项目-大语言模型裁剪工具。使用词表裁剪技术对多语种大语言模型进行权重裁剪,保留预训练知识的前提下,有效减少模型参数量,提高训练效率,并分享裁剪后的多种参数规模的Bloom模型权重。

    3. 权重分享:在bloom-1b4-zhbloom-2b6-zh的基础上,进行指令微调,获得两种参数规模的中文模型:firefly-1b4firefly-2b6

    4. 训练代码:开源训练代码,支持张量并行、ZeRO、Gemini异构内存空间管理等大模型训练策略。可实现仅使用一张显卡,训练1B-2B参数量的模型。

各种资源链接详见文章结尾。

模型使用方法如下:

from transformers import BloomTokenizerFast, BloomForCausalLM
device = 'cuda'
path = 'YenugNLP/firefly-1b4'


tokenizer = BloomTokenizerFast.from_pretrained(path)
model = BloomForCausalLM.from_pretrained(path)
model.eval()
model = model.to(device)
text = input('User:')
while True:
    text = '{}'.format(text)
    input_ids = tokenizer(text, return_tensors="pt").input_ids
    input_ids = input_ids.to(device)
outputs=model.generate(input_ids,max_new_tokens=200,do_sample=True,top_p=0.8,temperature=0.35,
                             repetition_penalty=1.2, eos_token_id=tokenizer.eos_token_id)
    rets = tokenizer.batch_decode(outputs)
    output = rets[0].strip().replace(text, "").replace('', "")
    print("Firefly:{}".format(output))
    text = input('User:')

02

方法介绍

模型裁剪

关于LLMPruner,详见文章:

LLMPruner:大语言模型裁剪工具

LLMPruner项目链接:

https://github.com/yangjianxin1/LLMPruner

本项目首先使用LLMPruner项目对原始的Bloom模型进行词表裁剪,仅取出常用的中英文词表,大大降低了模型参数量,然后再对其进行指令微调。

Bloom是个多语言模型,由于需要兼容多语言,所以词表有25w之多,在中文领域中,大部分词表并不会被用到。我们通过删减冗余的词表,从多语言模型中提取常用的中英文词表,最终词表从25w减少到46145,缩减为原来的18.39%,在保留预训练知识的同时,有效减少参数量,提高训练效率。

我们在bloom-1b4-zhbloom-2b6-zh的基础上,进行指令微调,获得两种参数规模的中文模型:firefly-1b4firefly-2b6,具有不错的效果。

裁剪后的模型如下表所示:

f3f29792-d4e9-11ed-bfe3-dac502259ad0.png

数据集

我们收集了23个常见的中文数据集,对于每个任务,由人工书写若干种指令模板,保证数据的高质量与丰富度,数据量为115万,形成训练集firefly-train-1.1M。数据分布如下图所示:

f411c978-d4e9-11ed-bfe3-dac502259ad0.png

在此基础上,我们添加了Belle-train_0.5M_CN,最终得到165万的训练数据。每条数据的格式如下,包含任务类型、输入、目标输出:

{
  "kind": "ClassicalChinese", 
  "input": "将下面句子翻译成现代文:
石中央又生一树,高百余尺,条干偃阴为五色,翠叶如盘,花径尺余,色深碧,蕊深红,异香成烟,著物霏霏。",
  "target": "大石的中央长着一棵树,一百多尺高,枝干是彩色的,树叶有盘子那样大,花的直径有一尺宽,花瓣深蓝色,花中飘出奇异的香气笼罩着周围,如烟似雾。"
}

训练数据集的token长度分布如下图所示,绝大部分数据的长度都小于600:

f4220360-d4e9-11ed-bfe3-dac502259ad0.png

训练策略

在训练时,对于每条样本,我们将input与target拼接成如下格式,然后输出模型中,进行训练。

<s>inputs>s>targets>

我们将模型的最大输入设置为512,input部分不参与计算loss,只计算target部分的损失函数。训练的超参数设置如下表所示。

参数 firefly-1b4 firefly-2b6
Batch size 16 8
Learning rate 3e-5 3e-5
Warmup step 3000 3000
Lr schedule cosine cosine
Max_seq_length 512 512
Training step 90k 260k

03

生成效果

下面展示的是firefly-1b4的部分生成效果。

f43922a2-d4e9-11ed-bfe3-dac502259ad0.png

f45216a4-d4e9-11ed-bfe3-dac502259ad0.png

f4722796-d4e9-11ed-bfe3-dac502259ad0.png

下面是Firefly模型更具特色的一些例子,Firefly对于文言文、诗词、对联、武侠小说、散文、歌词、文案生成、情感分析等中文任务具有非常优秀的表现。

f488814e-d4e9-11ed-bfe3-dac502259ad0.png

f49f6b34-d4e9-11ed-bfe3-dac502259ad0.png

f4d6bf1c-d4e9-11ed-bfe3-dac502259ad0.png

f507a172-d4e9-11ed-bfe3-dac502259ad0.png

f51b717a-d4e9-11ed-bfe3-dac502259ad0.png

04

结语

经过词表裁剪后,我们的模型参数量仅为1.4B和2.6B,参数量远远小于ChatGPT和LLaMA等上百亿上千亿的模型,甚至远远小于当前主流如Belle、ChatGLM等7B左右的模型。所以在效果上仍存在以下问题:

    1. 对于事实性知识,容易产生错误的回复。

    2. 由于未经过无害化微调,可能会产生歧视、危害、违背伦理道德的言论。

    3. 在代码、推理上的能力仍有欠缺。

基于以上模型的局限性,我们要求本项目的代码、数据、模型等仅用于学术研究,不得用于商业用途,且不得用于对社会造成危害的用途。

后续笔者将从以下方向对项目进行迭代:丰富训练数据且保证数据质量,优化训练流程,尝试更大参数量的模型。

若使用本项目的数据、代码或模型,请引用本项目。

@misc{Firefly,
  author = {Jianxin Yang},
title={Firefly(流萤):中文对话式大语言模型},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {url{https://github.com/yangjianxin1/Firefly}},
}

Firefly项目地址:

https://github.com/yangjianxin1/Firefly

LLMPruner项目地址:

https://github.com/yangjianxin1/LLMPruner

Firefly权重地址:

https://huggingface.co/YeungNLP/firefly-1b4

https://huggingface.co/YeungNLP/firefly-2b6

firefly-train-1.1M 数据集:

https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M

Belle-train_0.5M_CN数据集:

https://huggingface.co/datasets/BelleGroup/train_0.5M_CN

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 语言模型
    +关注

    关注

    0

    文章

    503

    浏览量

    10244
  • 数据集
    +关注

    关注

    4

    文章

    1205

    浏览量

    24635
  • Firefly
    +关注

    关注

    2

    文章

    538

    浏览量

    6981

原文标题:Firefly(流萤): 中文对话式大语言模型

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【大语言模型:原理与工程实践】大语言模型的基础技术

    ,这也是如今生成 AI 中大语言模型最流行训练架构。(3) Encoder-Decoder预训练语言模型:这类
    发表于 05-05 12:17

    【大语言模型:原理与工程实践】大语言模型的预训练

    语言模型的核心特点在于其庞大的参数量,这赋予了模型强大的学习容量,使其无需依赖微调即可适应各种下游任务,而更倾向于培养通用的处理能力。然而,随着学习容量的增加,对预训练数据的需求也相应
    发表于 05-07 17:10

    【大语言模型:原理与工程实践】大语言模型的评测

    语言模型的评测是确保模型性能和应用适应性的关键环节。从基座模型到微调模型,再到行业模型和整体能
    发表于 05-07 17:12

    【大语言模型:原理与工程实践】大语言模型的应用

    ,它通过抽象思考和逻辑推理,协助我们应对复杂的决策。 相应地,我们设计了两类任务来检验大语言模型的能力。一类是感性的、无需理性能力的任务,类似于人类的系统1,如情感分析和抽取问答等。大
    发表于 05-07 17:21

    语言模型:原理与工程时间+小白初识大语言模型

    解锁 我理解的是基于深度学习,需要训练各种数据知识最后生成自己的的语言理解和能力的交互模型。 对于常说的RNN是处理短序列的数据时表现出色,耳真正厉害的是Transformer,此框架被推出后直接
    发表于 05-12 23:57

    语言模型:原理与工程实践+初识2

    的一系列变革。 大语言模型是深度学习的应用之一,可以认为,这些模型的目标是模拟人类交流,为了理解和生成人类语言。为此,模型需要在大量文本数据
    发表于 05-13 00:09

    中文多模态对话数据集

    随着大量预训练语言模型在文本对话任务中的出色表现,以及多模态的发展,在对话中引入多模态信息已经引起了大量学者的关注。目前已经提出了各种各样的多模态
    的头像 发表于 02-22 11:03 1311次阅读
    <b class='flag-5'>中文</b>多模态<b class='flag-5'>对话</b>数据集

    大型语言模型有哪些用途?

    大型语言模型能识别、总结、翻译、预测和生成文本及其他内容。 AI 应用在大型语言模型的帮助下,可用于解决总结文章、编写故事和参与长对话等多种
    的头像 发表于 02-23 19:50 5106次阅读

    中文对话语言模型Firefly-2b6开源,使用210万训练数据

    在本文中,我们将对该模型进行分享和介绍。与firefly-1b4相比,firefly-2b6的代码生成能力取得了较大的进步,并且在古诗词生成、对联、作文、开放域生成等方面也有不错的提升。
    的头像 发表于 04-14 10:30 1547次阅读

    “伶荔”(Linly) 开源大规模中文语言模型

    Linly-Chinese-LLaMA:中文基础模型,基于 LLaMA 在高质量中文语料上增量训练强化中文语言能力,现已开放 7B、13B
    的头像 发表于 05-04 10:29 1036次阅读
    “伶荔”(Linly) 开源大规模<b class='flag-5'>中文</b><b class='flag-5'>语言</b><b class='flag-5'>模型</b>

    一文读懂大语言模型

    本文旨在让没有计算机科学背景的人对ChatGPT和类似的人工智能系统(GPT-3、GPT-4、Bing Chat、Bard等)的工作原理有一些了解。ChatGPT是一种基于*大语言模型(Large Language Model)* 的
    发表于 06-16 09:59 1314次阅读
    一文读懂大<b class='flag-5'>语言</b><b class='flag-5'>模型</b>

    对话文本数据是培养大模型的智能与交流之源

    对话文本数据,作为人类交流的生动表现,正成为训练大型模型的宝贵资源。这些数据不仅蕴含了丰富的语言特点和人类交流方式,更在模型训练中发挥着重要的意义,从而为其赋予更强大的智能和更自然的交
    的头像 发表于 08-14 10:11 585次阅读

    FPGA加速器支撑ChatGPT类大语言模型创新

    作者:Bill Jenkins,Achronix人工智能/机器学习产品营销总监 探索FPGA加速语言模型如何通过更快的推理、更低的延迟和更好的语言理解来重塑生成人工智能 简介:大
    的头像 发表于 09-04 16:55 553次阅读
    FPGA加速器支撑ChatGPT类大<b class='flag-5'>语言</b><b class='flag-5'>模型</b>创新

    本地化ChatGPT?Firefly推出基于BM1684X的大语言模型本地部署方案

    自ChatGPT发布以来,生成AI在全球引起了新的浪潮,它影响着各行各业,为世界带来智能化的发展。然而,类ChatGPT的大语言模型极度依赖算力巨大的服务器,导致目前大部分应用只能通过集中调用
    的头像 发表于 09-09 08:02 1654次阅读
    本地化ChatGPT?<b class='flag-5'>Firefly</b>推出基于BM1684X的大<b class='flag-5'>语言</b><b class='flag-5'>模型</b>本地部署方案

    语言模型简介:基于大语言模型模型全家桶Amazon Bedrock

    本文基于亚马逊云科技推出的大语言模型与生成AI的全家桶:Bedrock对大语言模型进行介绍。大语言
    的头像 发表于 12-04 15:51 743次阅读