在本文中,筆者將介紹關(guān)于Firefly(流螢)模型的工作,一個(gè)中文對(duì)話式大語(yǔ)言模型。我們使用較小的模型參數(shù)量,如1.4B和2.6B,實(shí)現(xiàn)了不錯(cuò)的生成效果。
項(xiàng)目地址:
https://github.com/yangjianxin1/Firefly
進(jìn)NLP群—>加入NLP交流群(備注nips/emnlp/nlpcc進(jìn)入對(duì)應(yīng)投稿群)
01
項(xiàng)目簡(jiǎn)介
Firefly(流螢)是一個(gè)開源的中文對(duì)話式大語(yǔ)言模型,使用指令微調(diào)(Instruction Tuning)在中文數(shù)據(jù)集上進(jìn)行調(diào)優(yōu)。同時(shí)使用了詞表裁剪、ZeRO、張量并行等技術(shù),有效降低顯存消耗和提高訓(xùn)練效率。在訓(xùn)練中,我們使用了更小的模型參數(shù)量,以及更少的計(jì)算資源。
我們構(gòu)造了許多與中華文化相關(guān)的數(shù)據(jù),以提升模型在這方面的表現(xiàn),如對(duì)聯(lián)、作詩(shī)、文言文翻譯、散文、金庸小說等。
流螢(螢火蟲的別稱)是中華傳統(tǒng)文化的一個(gè)符號(hào),雖說腐草為螢,帶有悲憫意味,但螢火雖小,也能憑借其淡淡熒光,照亮夜空。本項(xiàng)目的名稱取自杜牧的《秋夕》:銀燭秋光冷畫屏,輕羅小扇撲流螢。也希望本項(xiàng)目能夠像流螢一般發(fā)出淡淡微光,為中文NLP開源社區(qū)盡綿薄之力,添磚加瓦。
《詠螢火》
唐.李白
雨打燈難滅,
風(fēng)吹色更明。
若飛天上去,
定作月邊星。
本項(xiàng)目的主要工作如下:
-
-
數(shù)據(jù)集:firefly-train-1.1M,一份高質(zhì)量的包含1.1M中文多任務(wù)指令微調(diào)數(shù)據(jù)集,包含23種常見的中文NLP任務(wù)的指令數(shù)據(jù)。對(duì)于每個(gè)任務(wù),由人工書寫若干指令模板,保證數(shù)據(jù)的高質(zhì)量與豐富度。
-
模型裁剪:我們開發(fā)了LLMPruner項(xiàng)目-大語(yǔ)言模型裁剪工具。使用詞表裁剪技術(shù)對(duì)多語(yǔ)種大語(yǔ)言模型進(jìn)行權(quán)重裁剪,保留預(yù)訓(xùn)練知識(shí)的前提下,有效減少模型參數(shù)量,提高訓(xùn)練效率,并分享裁剪后的多種參數(shù)規(guī)模的Bloom模型權(quán)重。
-
權(quán)重分享:在bloom-1b4-zh和bloom-2b6-zh的基礎(chǔ)上,進(jìn)行指令微調(diào),獲得兩種參數(shù)規(guī)模的中文模型:firefly-1b4和firefly-2b6。
-
訓(xùn)練代碼:開源訓(xùn)練代碼,支持張量并行、ZeRO、Gemini異構(gòu)內(nèi)存空間管理等大模型訓(xùn)練策略??蓪?shí)現(xiàn)僅使用一張顯卡,訓(xùn)練1B-2B參數(shù)量的模型。
-
各種資源鏈接詳見文章結(jié)尾。
模型使用方法如下:
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
方法介紹
模型裁剪
關(guān)于LLMPruner,詳見文章:
LLMPruner:大語(yǔ)言模型裁剪工具
LLMPruner項(xiàng)目鏈接:
https://github.com/yangjianxin1/LLMPruner
本項(xiàng)目首先使用LLMPruner項(xiàng)目對(duì)原始的Bloom模型進(jìn)行詞表裁剪,僅取出常用的中英文詞表,大大降低了模型參數(shù)量,然后再對(duì)其進(jìn)行指令微調(diào)。
Bloom是個(gè)多語(yǔ)言模型,由于需要兼容多語(yǔ)言,所以詞表有25w之多,在中文領(lǐng)域中,大部分詞表并不會(huì)被用到。我們通過刪減冗余的詞表,從多語(yǔ)言模型中提取常用的中英文詞表,最終詞表從25w減少到46145,縮減為原來的18.39%,在保留預(yù)訓(xùn)練知識(shí)的同時(shí),有效減少參數(shù)量,提高訓(xùn)練效率。
我們?cè)?/span>bloom-1b4-zh與bloom-2b6-zh的基礎(chǔ)上,進(jìn)行指令微調(diào),獲得兩種參數(shù)規(guī)模的中文模型:firefly-1b4和firefly-2b6,具有不錯(cuò)的效果。
裁剪后的模型如下表所示:
數(shù)據(jù)集
我們收集了23個(gè)常見的中文數(shù)據(jù)集,對(duì)于每個(gè)任務(wù),由人工書寫若干種指令模板,保證數(shù)據(jù)的高質(zhì)量與豐富度,數(shù)據(jù)量為115萬(wàn),形成訓(xùn)練集firefly-train-1.1M。數(shù)據(jù)分布如下圖所示:
在此基礎(chǔ)上,我們添加了Belle-train_0.5M_CN,最終得到165萬(wàn)的訓(xùn)練數(shù)據(jù)。每條數(shù)據(jù)的格式如下,包含任務(wù)類型、輸入、目標(biāo)輸出:
{
"kind": "ClassicalChinese",
"input": "將下面句子翻譯成現(xiàn)代文:
石中央又生一樹,高百余尺,條干偃陰為五色,翠葉如盤,花徑尺余,色深碧,蕊深紅,異香成煙,著物霏霏。",
"target": "大石的中央長(zhǎng)著一棵樹,一百多尺高,枝干是彩色的,樹葉有盤子那樣大,花的直徑有一尺寬,花瓣深藍(lán)色,花中飄出奇異的香氣籠罩著周圍,如煙似霧。"
}
訓(xùn)練數(shù)據(jù)集的token長(zhǎng)度分布如下圖所示,絕大部分?jǐn)?shù)據(jù)的長(zhǎng)度都小于600:
訓(xùn)練策略
在訓(xùn)練時(shí),對(duì)于每條樣本,我們將input與target拼接成如下格式,然后輸出模型中,進(jìn)行訓(xùn)練。
<s>inputs>s>targets>
我們將模型的最大輸入設(shè)置為512,input部分不參與計(jì)算loss,只計(jì)算target部分的損失函數(shù)。訓(xùn)練的超參數(shù)設(shè)置如下表所示。
參數(shù) | 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的部分生成效果。
下面是Firefly模型更具特色的一些例子,F(xiàn)irefly對(duì)于文言文、詩(shī)詞、對(duì)聯(lián)、武俠小說、散文、歌詞、文案生成、情感分析等中文任務(wù)具有非常優(yōu)秀的表現(xiàn)。
04
結(jié)語(yǔ)
經(jīng)過詞表裁剪后,我們的模型參數(shù)量?jī)H為1.4B和2.6B,參數(shù)量遠(yuǎn)遠(yuǎn)小于ChatGPT和LLaMA等上百億上千億的模型,甚至遠(yuǎn)遠(yuǎn)小于當(dāng)前主流如Belle、ChatGLM等7B左右的模型。所以在效果上仍存在以下問題:
-
-
對(duì)于事實(shí)性知識(shí),容易產(chǎn)生錯(cuò)誤的回復(fù)。
-
由于未經(jīng)過無(wú)害化微調(diào),可能會(huì)產(chǎn)生歧視、危害、違背倫理道德的言論。
-
在代碼、推理上的能力仍有欠缺。
-
基于以上模型的局限性,我們要求本項(xiàng)目的代碼、數(shù)據(jù)、模型等僅用于學(xué)術(shù)研究,不得用于商業(yè)用途,且不得用于對(duì)社會(huì)造成危害的用途。
后續(xù)筆者將從以下方向?qū)?xiàng)目進(jìn)行迭代:豐富訓(xùn)練數(shù)據(jù)且保證數(shù)據(jù)質(zhì)量,優(yōu)化訓(xùn)練流程,嘗試更大參數(shù)量的模型。
若使用本項(xiàng)目的數(shù)據(jù)、代碼或模型,請(qǐng)引用本項(xiàng)目。
@misc{Firefly,
author = {Jianxin Yang},
{Firefly(流螢):中文對(duì)話式大語(yǔ)言模型},
= year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/yangjianxin1/Firefly}},
}
Firefly項(xiàng)目地址:
https://github.com/yangjianxin1/Firefly
LLMPruner項(xiàng)目地址:
https://github.com/yangjianxin1/LLMPruner
Firefly權(quán)重地址:
https://huggingface.co/YeungNLP/firefly-1b4
https://huggingface.co/YeungNLP/firefly-2b6
firefly-train-1.1M 數(shù)據(jù)集:
https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M
Belle-train_0.5M_CN數(shù)據(jù)集:
https://huggingface.co/datasets/BelleGroup/train_0.5M_CN
審核編輯 :李倩
-
語(yǔ)言模型
+關(guān)注
關(guān)注
0文章
566瀏覽量
11173 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1229瀏覽量
25907 -
Firefly
+關(guān)注
關(guān)注
2文章
544瀏覽量
8889
原文標(biāo)題:Firefly(流螢): 中文對(duì)話式大語(yǔ)言模型
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的基礎(chǔ)技術(shù)
【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的評(píng)測(cè)
【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型的應(yīng)用
大語(yǔ)言模型:原理與工程時(shí)間+小白初識(shí)大語(yǔ)言模型
大語(yǔ)言模型:原理與工程實(shí)踐+初識(shí)2
中文多模態(tài)對(duì)話數(shù)據(jù)集

大型語(yǔ)言模型有哪些用途?
中文對(duì)話式大語(yǔ)言模型Firefly-2b6開源,使用210萬(wàn)訓(xùn)練數(shù)據(jù)
“伶荔”(Linly) 開源大規(guī)模中文語(yǔ)言模型

一文讀懂大語(yǔ)言模型

對(duì)話文本數(shù)據(jù)是培養(yǎng)大模型的智能與交流之源
FPGA加速器支撐ChatGPT類大語(yǔ)言模型創(chuàng)新

本地化ChatGPT?Firefly推出基于BM1684X的大語(yǔ)言模型本地部署方案

評(píng)論