firefly-bloom-2b6 / README.md
YeungNLP's picture
Create README.md
3ffad55
|
raw
history blame
46.3 kB
# Firefly(流萤): 中文对话式大语言模型
## 项目简介
项目地址:[Firefly(流萤): 中文对话式大语言模型](https://github.com/yangjianxin1/Firefly) , 如果您觉得此模型对您有帮助,请like此模型并在Github项目中star我们。
![firefly_logo](firefly_logo.png)
**Firefly(流萤)** 是一个开源的中文对话式大语言模型,使用指令微调(Instruction Tuning)在中文数据集上进行调优。同时使用了词表裁剪、ZeRO、张量并行等技术,有效降低显存消耗和提高训练效率。
在训练中,我们使用了更小的模型参数量,以及更少的计算资源。
我们构造了许多与中华文化相关的数据,以提升模型这方面的表现,如对联、作诗、文言文翻译、散文、金庸小说等。
**流萤**(萤火虫的别称)是中华传统文化的一个符号,虽说腐草为萤,带有悲悯意味,但萤火虽小,也能凭借其淡淡荧光,照亮夜空。本项目的名称取自杜牧的《秋夕》:**银烛秋光冷画屏,轻罗小扇扑流萤**
也希望本项目能够像流萤一般发出淡淡微光,为中文NLP开源社区尽绵薄之力,添砖加瓦。
```text
《咏萤火》
唐.李白
雨打灯难灭,
风吹色更明。
若飞天上去,
定作月边星。
```
主要工作如下:
- **数据集**:[firefly-train-1.1M](https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M) , 一份高质量的包含1.1M中文多任务指令微调数据集,包含23种常见的中文NLP任务的指令数据。对于每个任务,由人工书写若干指令模板,保证数据的高质量与丰富度。
- **模型裁剪**:[LLMPruner:大语言模型裁剪工具](https://github.com/yangjianxin1/LLMPruner) ,使用词表裁剪技术对多语种大语言模型进行权重裁剪,保留预训练知识的前提下,有效减少模型参数量,提高训练效率,并分享裁剪后的多种参数规模的Bloom模型权重。
- **权重分享**:在[bloom-1b4-zh](https://huggingface.co/YeungNLP/bloom-1b4-zh) 和[bloom-2b6-zh](https://huggingface.co/YeungNLP/bloom-2b6-zh) 的基础上,进行指令微调,获得两种参数规模的中文模型:[firefly-1b4](https://huggingface.co/YeungNLP/firefly-1b4) 和[firefly-2b6](https://huggingface.co/YeungNLP/firefly-2b6)
- **训练代码**:开源训练代码,支持张量并行、ZeRO、Gemini异构内存空间管理等大模型训练策略。可实现仅使用一张显卡,训练1B-2B参数量的模型(待整理后开源)。
## 模型使用
```python
from transformers import BloomTokenizerFast, BloomForCausalLM
device = 'cuda'
path = 'YeungNLP/firefly-2b6'
tokenizer = BloomTokenizerFast.from_pretrained(path)
model = BloomForCausalLM.from_pretrained(path)
model.eval()
model = model.to(device)
text = input('User:')
while True:
text = '<s>{}</s></s>'.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.7, 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('</s>', "")
print("Firefly:{}".format(output))
text = input('User:')
```
## 训练细节
在训练时,对于每条样本,我们将input与target处理成如下格式,然后输出模型中。
```
<s>input</s></s>target</s>
```
我们将模型的最大输入设置为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 |
| 训练数据集 | 160万 | 210万 |
## 局限性和使用限制
经过词表裁剪后,我们的模型参数量仅为1.4B和2.6B,参数量远远小于ChatGPT和LLaMA等上百亿上千亿的模型,甚至远远小于当前主流如Belle、ChatGLM等7B左右的模型。所以在效果上仍存在以下问题:
- 对于事实性知识,容易产生错误的回复。
- 由于未经过无害化微调,可能会产生歧视、危害、违背伦理道德的言论。
- 在代码、推理上的能力仍有欠缺。
基于以上模型的局限性,我们要求本项目的代码、数据、模型等仅用于学术研究,不得用于商业用途,且不得用于对社会造成危害的用途。
## 引用
若使用本项目的数据、代码或模型,请引用本项目。
```text
@misc{Firefly,
author = {Jianxin Yang},
title = {Firefly(流萤): 中文对话式大语言模型},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/yangjianxin1/Firefly}},
}
```
## 关注我们
![gongzhonghao](
gongzhonghao.jpeg)
## 生成效果
### 代码生成
firefly-2b6具备一定的代码生成能力
***
- 帮我用python写一个冒泡排序算法。
以下是Python的冒泡排序算法的代码:
```python
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# 测试
arr = [64, 34, 25, 12]
sorted_arr = bubble_sort(arr)
print("原始数组:", arr)
print("排序后的数组:", sorted_arr)
```
输出结果为:
```
原始数组: [25, 12, 64, 34]
排序后的数组: [12, 25, 34, 64]
```
该算法的时间复杂度为O(n^2)
***
- 用python实现一个快速排序算法,输入为一个数组,返回排序好之后的数组。
以下是使用Python实现的快速排序算法的代码:
```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
```
该函数接受一个整数列表作为参数,并按照从小到大的顺序对列表进行排序。如果列表长度小于等于1,则直接返回原始列表;否则,将中间元素作为新的pivot,然后对其余的元素递归调用快速排序算法,直到整个列表有序为止。
在实际应用中,可以使用该函数来对任意大小的数组进行快速排序操作。
***
- 用python写一个二分查找算法
以下是一个简单的Python代码实现:
```python
def binary_search(arr, x):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == x:
return mid
elif arr[mid] < x:
left = mid + 1
else:
right = mid - 1
return -1
```
该函数接受两个参数`arr`和要查找的元素`x`,并返回在数组中与目标值最接近的索引。如果目标值不存在,则返回 -1。
***
- 写一个函数,计算数组中偶数的个数,输入为数组,输出为偶数的个数
以下是Python代码实现:
```python
def count_even_numbers(nums):
even_count = 0
for num in nums:
if num % 2 == 0:
even_count += 1
return even_count
```
该函数首先使用for循环遍历整个数组,然后判断每个元素是否为偶数。如果是偶数,则将其添加到even_count变量中。最后返回even_count的值即可得到数组中偶数的数量。
***
- 用html生成一个教务管理系统的登录界面,要求包含用户名、密码输入框和登录按钮
```html
<html>
<head>
<title>教务管理系统</title>
</head>
<body>
<h1>欢迎使用本系统!</h1>
<form action='set_username' method='POST'>
<label for="username">请输入您的用户名:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">请输入您的密码:</label>
<input type="password" id="password" name="password"><br><br>
<button type="submit" value="登录">登录</button>
</form>
</body>
</html>
```
### 其他示例
相比于firefly-1b4,firefly-2b6在其他方面的能力也得到了提升,包括在文言文翻译、对联、古诗词创作等。
| input | output |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 把下面的文本翻译成文言文:到了春风和煦,阳光明媚的时候,湖面平静,没有惊涛骇浪,天色湖光相连,一片碧绿,广阔无际;沙洲上的鸥鸟,时而飞翔,时而停歇,美丽的鱼游来游去,岸上与小洲上的花草,青翠欲滴。有时大片烟雾完全消散,皎洁的月光一泻千里,波动的光闪着金色,静静的月影像沉入水中的玉璧,渔夫的歌声在你唱我和地响起来,这种乐趣真是无穷无尽啊! | 及春日和暖,晴景霁然,波平无澜,天影连相,一碧万顷,洲渚鸥鹭,或翔或止,佳鱼往来,岸上草木,青翠有馀,或大雾顿消,皓月一洒千里,浮光金辉,幽影沈璧,渔人歌咏,自唱我与,此乐何极! |
| 把下面的文本翻译成现代文:林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。 | 走到尽头,只见一座山,山上有个小洞,好像有光亮。于是就停了船,从小洞进去,开始十分狭窄,只能容得下一个人通过,又走了几十步,豁然开朗起来,土地平坦宽阔,房屋俨然,有良田、美池、桑竹之类,田间道路纵横交错,鸡狗相闻,这里来往的人家都在耕种,男女的穿着衣服,全都像外边的人一样。 |
| 对联:雀跃黄山,仙人指路松迎客 | 下联:龙腾紫气,玉女牵衣月送春 |
| 以咏春为题目,帮我写一首古诗,要求包含燕子、春风、柳树等元素。 | 燕飞柳絮舞,春风吹绿波。</br> 花开如锦绣,鸟语似笙歌。</br> 莺啼声不断,蝶舞影婆娑。</br> 人间有真乐,何必更寻多。 |
| 以咏梅为题目,帮我写一首古诗,要求包含梅花、白雪等元素。 | 寒枝瘦骨傲霜风,清香不减梅花红。玉洁冰姿照人眼,素肌如雪映寒空。 |
| 根据开头生成古诗:明月松间照 | 清风竹里吹。夜深人静处,独坐一孤灯。 |
|写一段关于日落的描述,要求细节生动,景色美好,要求200字。|夕阳西下,天空渐渐染上了橙红色和粉色,云朵也变得柔和起来,像棉花糖一样柔软。太阳的余晖洒在草地上,形成了一片金色的海洋。远处的山峰被照亮了,仿佛是一幅画卷,让人陶醉其中。</br></br>微风拂过,树叶沙沙作响,似乎在为落日的美丽伴奏。鸟儿们开始欢快地歌唱,为这美丽的时刻增添了一份生机与活力。</br></br>在这美妙的时刻里,人们的心情也随之愉悦起来,享受着大自然的美好,感受到了生命的无限可能。这是一个值得珍藏的美好瞬间,让我们一起留住这一刻,让生命更加绚烂多彩!|
| 根据标题生成商品文案:南极人羽绒服男短款秋冬轻盈保暖休闲男装中年男士羽绒冬装外套 | 90后潮搭原创酷帅棉衣,精选优质面料,拥有极佳的穿着感受,立体剪裁版型,在冬天使用既保暖又时尚,简约设计时尚百搭,凸显干练气质,让你更显独特魅力 |
| 根据输入生成商品文案:类型:裙;风格:简约;图案:条纹;图案:线条;图案:撞色;裙型:鱼尾裙;裙袖长:无袖 | 这款无袖的衬衫裙,采用了经典的黑白撞色的设计,既能展现出女性优雅的气质感,又能凸显出女性的干练气质。同时,在领口处还加入了精致的荷叶边点缀,让整体的造型更加有层次感。而腰部处的收褶处理,则能够修饰出纤细的小蛮腰线,尽显女性曼妙的身姿曲线。 |
| 生成5条关于【告白气球】的歌曲评论 | 1、我有一个朋友,她喜欢一个男生,但是那个男生不喜欢她。有一天她在群里问:“如果你们有谁会告白?”大家纷纷点赞,最后那个女生也鼓起勇气说出了自己的心声“我喜欢你”。她说完这句话后哭了起来。</br>2、这首歌我就不收藏也不下载了,如果有人看到这句话的话麻烦点个赞,收到消息我就会进来听一遍,算是我自己给自己的一个惊喜吧</br>3、其实我并不想谈恋爱,可是我又不能拒绝他,我只能默默的看着他,希望他能找到比我更好的人,这样也好,以后就不会再遇到像我这样的人了</br>4、这歌很好听,但为什么没人评论呢,难道只有我一个人觉得好听吗😔😔😔</br>5、喜欢一个人,就不要去打扰他,因为打扰了他,他会更伤心;爱一个人,就不要去伤害他,因为伤害了他,他会更痛苦;情深缘浅,就不要再纠缠不清,因为纠缠不清,只会让自己更痛苦 |
| 金庸武侠续写:少室山上,少林寺前,萧峰身陷重围,无数武林人士欲杀之而后快,除了段誉、虚竹挺身而出。 | 萧峰眼见情势危急,便道:“各位兄弟,咱们暂且退避,待得大事一了,再行反击不迟。”</br>群雄听他这么说,登时肃静无声。</br>过了一会,鸠摩智朗声说道:“慕容公子和众位英雄,请移步到这边来!”</br>众人顺着他手指望去,只见一座大屋之前站满了人,都是身穿白袍的和尚道士,其中更有个中年道人身穿青色长袍,脸上罩有黄巾,形貌奇特诡异,正是“百岁老人”的座像。</br>鸠摩智又道:“慕容公子和诸位英雄,请进屋内说话。”</br>人群中走出一个老僧,躬身合十,走到中间的一张太师椅旁坐下,后面跟着八名僧人,分坐各席。 |
| 根据题目写一首散文:荷塘月色。要求包含荷花、月光、池塘、清风、夏日等元素。 | 在夏日的午后,我漫步于荷塘边上。微风吹拂着水面,荷叶轻轻摇曳,仿佛在向我招手。月光洒落在水面上,照亮了整个池塘。</br>我静静地坐在池塘旁边,欣赏这美丽的夜景。远处传来一阵阵蛙鸣声,仿佛是青蛙们在庆祝这个美好的夜晚。此时此刻,我的心情也变得平静而宁静。</br>突然间,一只小鸟飞过头顶,打破了这份宁静。它振翅高飞,划破天际的寂静,为荷塘增添了一份生机和活力。</br>在这个充满活力的夏天里,荷塘成为了我们心灵的净土,让我们忘却烦恼,享受生活的美好。 |
| 生成文本的摘要:据CGTN记者团官方微博,4月7日下午,法国总统马克龙到访中山大学,与学生交流。随后马克龙来到中山大学体育馆,用法语、普通话、粤语和现场观众打招呼并发表演讲。</br>马克龙总统在演讲中说,希望青年人能够共同应对当今世界包括气候变化、生物多样性、科技等方面的挑战。“当今经济增长的挑战尤其是脱碳增长的挑战非常大,对于青年学子来说通过研究、创新应对挑战非常重要。”马克龙提到,中山大学中法核工程与技术学院为此开展了大量的相关工作。</br>马克龙希望促进双方的人文交流。通过学习历史、语言,分享知识和科学去迎接未来。用学术促进相互交流、相互理解、促进人文交流,更好地认识彼此,了解彼此。“欢迎更多的青年学生学习法语,也希望法国年轻人对中国的文化、文明和语言有同样的热情。希望中山大学与法国合作伙伴继续合作下去。” | 马克龙访问中山大学与学生交流 |
| 文本纠错:值得强调得是,并购市场的完善与成熟离不开金融体喺的创新。 | 值得强调的是,并购市场的完善与成熟离不开金融体系的创新。 |
| 我想让你做一名记者。您将报道突发新闻,撰写专题报道和评论文章,开发用于验证信息和发现来源的研究技术,遵守新闻道德,并使用您自己独特的风格提供准确的报道。我的第一个建议请求是“我需要帮助写一篇关于世界主要城市空气污染的文章。”</s></s>作为一名记者,您可以考虑以下建议: | 作为一名记者,您可以考虑以下建议:</br>1. 了解有关全球主要城市空气污染的数据和信息。</br> 2. 研究相关文献和统计数据,以获得更深入的见解。</br> 3. 与当地政府和环保组织合作,以便更好地理解环境问题并制定解决方案。</br> 4. 寻找可靠的新闻机构或专家来支持您的观点和研究。</br> 5. 保持清晰简洁、易于理解的写作风格,以确保读者能够轻松地理解您的观点。</br> 6. 确保在发布之前进行充分的测试和审查,以避免任何错误或不必要的风险。 |
| 请生成一份番茄炒蛋的食谱,包括所需的食材和烹饪步骤,尽可能详细地描述每一步骤。 | 番茄炒蛋食谱:</br></br>所需材料:</br>- 鸡蛋 2个</br>- 番茄 1个</br>- 油适量</br>- 盐适量</br>- 胡椒粉适量</br></br>烹饪步骤:</br>1. 将番茄洗净切成小块备用。</br>2. 打入两个鸡蛋,加入少许盐和胡椒粉搅拌均匀。</br>3. 加热锅子,倒入适量的油烧至七成热。</br>4. 将打好的鸡蛋液倒入锅中,用铲子迅速翻炒至凝固后盛出备用。</br>5. 再将同一口锅加热,倒入适量的油,放入切好的番茄煸炒至软烂。</br>6. 把炒好的鸡蛋倒回锅中,与番茄一起快速翻炒均匀即可。</br>7. 最后根据口味加盐调味即可享用。 |
| 请生成一篇关于人工智能对教育行业的影响的文章,包括挑战和机遇。 | 随着人工智能技术的不断发展,它已经开始在各个领域发挥着越来越重要的作用。在教育领域中,人工智能也扮演了重要的角色。</br></br>一方面,人工智能可以为学生提供更加个性化的学习体验。通过分析学生的学习习惯、兴趣爱好等信息,人工智能可以根据这些信息为他们推荐最适合的课程和资源。这样一来,学生们就可以更好地掌握知识,提高自己的学习效率。</br></br>另一方面,人工智能也可以帮助教师更好地管理教学资源。例如,一些学校已经开始使用智能化管理系统来跟踪学生的作业和考试情况,以便及时发现问题并采取措施解决问题。此外,人工智能还可以根据学生的表现和反馈数据进行自我评估,从而改进教学质量。</br></br>然而,人工智能技术也会带来一些挑战。首先,人工智能需要大量的数据和计算能力来进行训练和分析,这可能会导致成本过高。其次,人工智能算法可能存在偏见和不公平性,因此需要进行监管和控制。最后,人工智能技术还需要不断地更新和升级,以适应新的技术和需求。</br></br>总之,人工智能对教育行业带来了巨大的影响,既有积极的方面也有负面的方面。我们需要认真思考如何平衡利弊,实现人工智能与教育的良性互动和发展。 |
| 情人节快到了,帮我写一首情诗,送给我女朋友 | 你是我生命中的阳光,</br>你的微笑是我最美的风景。</br>在我心中,你是一颗星辰,</br>闪耀着无尽的光芒。</br></br>无论风雨还是晴天,</br>我都愿意与你相伴。</br>因为有你在身边,</br>我的世界才变得如此美好。</br></br>我爱你,像一朵盛开的花儿,</br>永远绽放在我的心间。</br>愿我们的爱情长存,</br>直到地老天荒。 |
| 最近身体发福了,我该如何进行科学地减肥,你能给我一些建议吗? | 1. 控制饮食:减少高热量、高脂肪的食物摄入量,增加蔬菜和水果的摄入。</br>2. 多运动:每周至少150分钟的有氧运动,如快走、跑步或游泳等。</br>3. 睡眠充足:保证每晚7-8小时的睡眠时间,有助于调节代谢和消耗卡路里。</br>4. 坚持减重计划:制定一个可行的减重计划,并保持长期性。 </br>5. 寻求专业帮助:如果需要,可以咨询医生或营养师以获取更具体的建议。 |
| 把这句话翻译成中文:Knowledge can be acquired from many sources. These include books, teachers and practical experience, and each has its own advantages. The knowledge we gain from books and formal education enables us to learn about things that we have no opportunity to experience in daily life. We can also develop our analytical skills and learn how to view and interpret the world around us in different ways. Furthermore, we can learn from the past by reading books. In this way, we won't repeat the mistakes of others and can build on their achievements. | 知识可以从许多来源获取,包括书籍、老师和实践经验。每种都有其自己的优点。从书籍和正式教育中获得的知识使我们能够了解我们无法在日常生活中体验的事情。我们还可以发展我们的分析技能并学会如何以不同的方式看待和解释周围的世界。此外,我们可以通过阅读过去来学习。这样,我们就不会重复他人的错误,并且可以继续他们的成就。 |
| 根据下面的歌词,进行续写:故事的小黄花</br>从出生那年就飘着</br>童年的荡秋千</br>随记忆一直晃到现在 | 我还在原地等你</br>你却已经走远了</br>那一年夏天我们相遇</br>你说你要陪我到永远</br>如今的时光已慢慢溜走</br>只留下回忆在心里头</br>那些年我们一起走过的路</br>现在想起来还觉得好笑</br>你总说你是我的小黄花</br>带给我快乐和幸福</br>可是后来你走了以后</br>我也没有再找过你的消息</br>那些年我们一起走过的路</br>现在想起来还觉得好笑</br>你总说你是我的小黄花</br>带给我快乐和幸福</br>可是后来你走了以后</br>我也没有再找过你的消息</br>故事的小黄花</br>从出生那年就飘着</br>童年的荡秋千</br>随记忆一直晃到现在</br>我还在原地等你</br>你却已经走远了</br>那一年夏天我们相遇</br>你说你要陪我到永远</br>如今的时光已慢慢溜走</br>只留下回忆在心里头</br>那些年我们一起走过的路 |