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