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