note
- 在《Aligning Large Language Models with Human: A Survey》综述中对LLM数据分类为典型的人工标注数据、self-instruct数据集等
- 优秀的开源sft数据集:alpaca_data、belle、千言数据集、firefly、moss-003-sft-data多轮对话数据集等
文章目录
- note
- 构造指令实例的3种方式
- sft:Aligning Large Language Models with Human: A Survey
- Alpaca
- 1. self-instruct流程
- 2. alpaca中的实例生成
- BELLE
- 1. 个性化角色对话
- 2. 中文指令数据集
- 千言数据集
- Firefly
- 文本摘要生成数据集
- 字节对话推荐数据集
- 根据文档生成qa数据
- 预训练数据集
- Reference
构造指令实例的3种方式
图源自人大的LLM综述《A Survey of Large Language Models》
- 格式化任务数据集
- 格式化日常对话数据集
- 格式化合成数据集:self-instruct就是这种方式, 初始只需100多个实例作为任务池
sft:Aligning Large Language Models with Human: A Survey
这篇工作【地址:arxiv.org/abs/2307.12966】对LLM的sft数据进行分类:
- 人工标注数据
- self-Instruct
Alpaca
链接:https://github.com/tatsu-lab/stanford_alpaca
[stanford_alpaca] 使用 self instruction 的方式采集了 52k 条指令训练数据集。output是text-davinci-003生成的指令答案。
1. self-instruct流程
- 四部曲:指令生成;分类任务识别;实例生成;过滤和后处理。
- 为了实证评估SELF-INSTRUCT,在GPT3(Brown等人,2020)上运行该框架,在这个模型上的SELF-INSTRUCT迭代过程产出了大约52K条指令,以及大约82K个实例输入和目标输出对。结果数据提供了多种多样的创造性任务,其中50%以上的任务与种子指令的重合度低于0.3 ROUGE-L(§4.2)。可以利用生成的指令数据微调其他大模型。
2. alpaca中的实例生成
- alpaca简化了流程,没有分为分类/非分类任务的判断
- 中文例子如下:
你被要求提供10个多样化的任务指令。这些任务指令将被提供给GPT模型,我们将评估GPT模型完成指令的能力。
以下是你提供指令需要满足的要求:
1.尽量不要在每个指令中重复动词,要最大化指令的多样性。
2.使用指令的语气也应该多样化。例如,将问题与祈使句结合起来。
3.指令类型应该是多样化的,包括各种类型的任务,类别种类例如:brainstorming,open QA,closed QA,rewrite,extract,generation,classification,chat,summarization。
4.GPT语言模型应该能够完成这些指令。例如,不要要求助手创建任何视觉或音频输出。例如,不要要求助手在下午5点叫醒你或设置提醒,因为它无法执行任何操作。例如,指令不应该和音频、视频、图片、链接相关,因为GPT模型无法执行这个操作。
5.指令用中文书写,指令应该是1到2个句子,允许使用祈使句或问句。
6.你应该给指令生成适当的输入,输入字段应包含为指令提供的具体示例,它应该涉及现实数据,不应包含简单的占位符。输入应提供充实的内容,使指令具有挑战性。
7.并非所有指令都需要输入。例如,当指令询问一些常识信息,比如“世界上最高的山峰是什么”,不需要提供具体的上下文。在这种情况下,我们只需在输入字段中放置“<无输入>”。当输入需要提供一些文本素材(例如文章,文章链接)时,就在输入部分直接提供一些样例。当输入需要提供音频、图片、视频或者链接时,则不是满足要求的指令。
8.输出应该是针对指令和输入的恰当回答。
下面是10个任务指令的列表:
###
1. 指令: 在面试中如何回答这个问题?
1. 输入:当你在车里独处时,你会想些什么?
1. 输出:如果是在晚上,我通常会考虑我今天所取得的进步,如果是在早上,我会思考如何做到最好。我也会尝试练习感恩和活在当下的状态,以避免分心驾驶。
###
2. 指令: 按人口对这些国家进行排名。
2. 输入:巴西,中国,美国,日本,加拿大,澳大利亚
2. 输出:中国,美国,巴西,日本,加拿大,澳大利亚
如使用chatgpt 3.5生成的response为:
3. 指令: 给出一个关于全球变暖的简短概述。
3. 输入: <无输入>
3. 输出: 全球变暖是指地球上气候系统的长期变化,包括气温、气压、降水和风等因素。虽然自然因素对气候的影响很大,但人类活动也在加剧全球变暖,导致气候的不稳定和极端天气事件的增多。
4. 指令: 给出一个有关健康的小贴士。
4. 输入: 我最近感到很疲倦,有什么建议可以提高我的能量?
4. 输出: 确保充足的睡眠是提高能量的重要因素。此外,保持健康的饮食和适当的锻炼也可以帮助提高能量水平。要尽可能避免糖和咖啡因,因为它们可能会导致疲劳。
5. 指令: 给出一个有关历史的事件描述。
5. 输入:请描述马丁·路德·金在美国民权运动中的作用。
5. 输出:马丁·路德·金是美国非裔民权运动的领袖之一,他通过非暴力抗议、演讲和写作等手段,推动了民权运动的发展,并取得了历史性的胜利,如《民权法案》和《选举权法案》的通过。
6. 指令: 给出一个有关文学的问题。
6. 输入:请问《麦田里的守望者》是谁写的?
6. 输出:《麦田里的守望者》是美国作家J·D·塞林格所写的小说,其讲述了一个年轻人的成长历程,被誉为20世纪最重要的小说之一。
7. 指令: 给出一个关于科技的趋势。
7. 输入:技术未来发展的趋势是什么?
7. 输出:未来,人工智能、物联网、区块链和量子计算等技术将继续发展,这些技术将改变我们的生活方式、工作方式和商业模式。此外,随着数据的不断增长,数据分析和数据科学也将成为越来越重要的技能。
8. 指令: 给出一个关于金融的问题。
8. 输入:请解释一下什么是债券。
8. 输出:债券是一种固定收益证券,它代表了借款人对债权人的债务。债券通常由政府、公司或其他实体发行,债券持有人可以获得固定的利息收益,并在债券到期时获得本金回收。
9. 指令: 给出一个地理问题。
9. 输入:请问世界上最高的山峰是什么?
9. 输出:珠穆朗玛峰是地球上海拔最高的山峰,位于中国和尼泊尔之间的喜马拉雅山脉中,海拔约为8,848米。
10. 指令: 给出一个关于医学的问题。
10. 输入:请解释一下心血管疾病是什么。
10. 输出:心血管疾病是一类疾病,包括冠心病、高血压、心脏衰竭、心律失常和动脉硬化等。这些疾病影响心血管系统的功能,可能导致心脏病发作、中风和其他严重的健康问题。预防心血管疾病的关键在于采取健康的生活方式,如均衡的饮食、适当的运动和戒烟等。
BELLE
项目地址:https://github.com/LianjiaTech/BELLE
论文地址:https://arxiv.org/pdf/2304.07854.pdf
BELLE 开放了好几种规模的数据集,[100万]、[200万]、[350万] 等。
ex:BELLE中的指令数据集
https://huggingface.co/datasets/BelleGroup/train_1M_CN
1. 个性化角色对话
数据集名称:BelleGroup/generated_chat_0.4M
https://huggingface.co/datasets/BelleGroup/generated_chat_0.4M
也是chatgpt生成的:
字段类型:
instruction: 指令
input: 输入(本数据集均为空)
output: 输出
数据样例:
{
"instruction": "于以下角色信息完成一段对话\nAlice是一个年轻的律师,她正在为一个涉及濒危物种保护的案件做准备。Bob是一位当地的居民,他所在的社区经常受到该濒危物种的干扰。\n",
"input": "",
"output": "\nAlice: 你好Bob,我是濒危物种保护案的律师,很高兴见到你。我们前几天发给你的文件你看到了吗?\nBob: 看到了,你们说要禁止我们在该物种的常住地采集蘑菇,这很不公平。\nAlice: 保护濒危物种对整个生态系统都很重要,如果我们的举动损害了这个物种的生存,那么整个生态系统都将遭受损失。\nBob: 我理解您的立场,但是我们一直以来都依靠这个物种来维持我们的经济生活,现在我们要怎么办?\nAlice: 我理解这对当地社区的影响,但是现在我们必须找到一种既能保护这个物种,也同时使您们的经济生活不受影响的解决方案。你有任何想法吗?我们可以一起来想办法。\n"
}
2. 中文指令数据集
{
"instruction": "将以下三个句子组合成一个有意义的段落。\n狗是人类最好的朋友。它们非常聪明,可以进行各种活动。如果你喜欢散步,狗可以成为你一起散步的伙伴。",
"input": "",
"output": "狗是人类最好的朋友,它们非常聪明,可以进行各种活动。如果你喜欢散步,狗可以成为你一起散步的伙伴。出门散步是一种良好的锻炼方式,而有狗的陪伴会让散步变得更有趣,并且有狗在身边也能给你带来安全感。所以,拥有一只狗作为你的伙伴,可以帮助你变得更加积极主动和健康。"
}
千言数据集
https://www.luge.ai/#/
数据集挺多,涵盖文本生成、信息抽取、知识图谱等数据集,如文本生成中的摘要数据集:
Firefly
链接:https://huggingface.co/datasets/YeungNLP/firefly-train-1.1M
收集了23个常见的中文数据集,有以下的任务,数据量为115万:
训练数据集 绝大数sample的长度都小于600:
数据的字段:
{
"kind": "ClassicalChinese",
"input": "将下面句子翻译成现代文:\n石中央又生一树,高百余尺,条干偃阴为五色,翠叶如盘,花径尺余,色深碧,蕊深红,异香成烟,著物霏霏。",
"target": "大石的中央长着一棵树,一百多尺高,枝干是彩色的,树叶有盘子那样大,花的直径有一尺宽,花瓣深蓝色,花中飘出奇异的香气笼罩着周围,如烟似雾。"
}
对于每个任务,由人工书写若干种指令模板。
下图是firefly-bloom-7b1的多轮对话的生成效果:
该数据集用于训练项目:https://github.com/yangjianxin1/Firefly
firefly项目还用到如下的指令数据集:
数据集 | 介绍 |
---|---|
firefly-train-1.1M | 我们收集了23种常见的中文NLP任务的数据,并且构造了许多与中华文化相关的数据,如对联、作诗、文言文翻译、散文、金庸小说等。对于每个任务,由人工书写若干种指令模板,保证数据的高质量与丰富度,数据量为115万 |
moss-003-sft-data | 由复旦大学MOSS团队开源的中英文多轮对话数据,包含100万+数据 |
ultrachat | 由清华大学开源的英文多轮对话数据,包含140万+数据 |
WizardLM_evol_instruct_V2_143k | 由WizardLM项目开源的英文指令微调数据集,通过Evol-Instruct方法让指令进化,加强指令的复杂度,以提升模型对复杂指令的遵循能力。包含143k条数据。 |
school_math_0.25M | 由BELLE项目组开源的数学运算指令数据,包含25万条数据。 |
数据样例为:
{
"conversation_id":44,
"category":"Brainstorming",
"conversation":[
{
"human":"怎么能够有效地提升个人能力?",
"assistant":"提升个人能力可以通过以下几个方面实现:\n\n1. 学习新知识和技能:阅读相关书籍、参加课程和工作坊、观看教育视频等学习方式,可以帮助你掌握新的知识和技能,从而提升个人能力。\n\n2. 持续练习和实践:不断地练习和实践所学的知识和技能,可以帮助你更好地掌握和应用这些技能,提高你的表现和效率。\n\n3. 寻求反馈和改进:寻求他人的反馈和建议可以帮助你发现自己的不足之处,进一步完善和改进自己的能力。\n\n4. 建立良好的工作和生活习惯:建立良好的工作和生活习惯,如合理安排时间、注意健康、保持积极态度等,可以提高你的工作效率和生活品质,从而提升个人能力。\n\n5. 社交和交流:与他人交流和合作,可以帮助你更好地了解他人的观点和经验,从而提升自己的能力和见识。"
},
{
"human":"对于初学者来说,如何快速掌握编程技能?",
"assistant":"以下是几个建议,可以帮助初学者快速掌握编程技能:\n\n1. 学习基础知识:建议先学习编程语言的基础知识和语法,例如变量、数据类型、控制结构、函数等。可以通过在线课程、编程书籍、视频教程等方式学习。\n\n2. 实践编程:进行实际的编程练习是非常重要的,可以通过参加编程挑战、编写小项目等方式来进行实践。\n\n3. 寻求反馈:可以寻求他人的反馈和建议,例如在线编程社区、编程导师等,他们可以帮助你发现问题并及时纠正。\n\n4. 阅读优秀代码:阅读和分析优秀的代码可以帮助你学习其他程序员的编程思路和技巧,从而提高自己的编程能力。\n\n5. 不断学习和更新:编程技术和工具在不断更新和发展,因此需要不断学习新的知识和技能,例如学习新的编程语言、框架、工具等,以跟上技术的发展和变化。\n\n总之,学习编程需要耐心和坚持,并且需要不断地实践和学习。通过以上建议,可以帮助初学者快速掌握编程技能。"
},
{
"human":"除了参加编程挑战和阅读代码,还有哪些方式可以提升自己的编程能力呢?",
"assistant":"除了参加编程挑战和阅读代码,还有以下几种方式可以提升自己的编程能力:\n\n1. 参与开源项目:加入一个开源项目,可以让你了解到实际的软件开发流程和团队合作方式,并且可以与其他开发人员合作,学习和分享编程技巧和经验。\n\n2. 进行代码重构:对已经编写的代码进行重构,可以帮助你了解更好的编程实践和设计模式,从而提高代码的可读性和可维护性。\n\n3. 练习算法和数据结构:算法和数据结构是编程中的重要基础,练习算法和数据结构可以帮助你了解不同的数据结构和算法,从而更好地解决实际问题。\n\n4. 学习软件工程和架构:学习软件工程和架构的知识,可以帮助你了解如何设计和构建可靠、可扩展和可维护的软件系统。\n\n5. 参加编程社区和论坛:参加编程社区和论坛可以让你与其他开发人员分享和讨论编程经验和技巧,了解最新的技术趋势和解决方案。\n\n总之,提升编程能力需要不断地学习和实践,并与其他开发人员和编程专家进行交流和合作,以获取更多的经验和知识。"
},
{
"human":"你有没有推荐的编程挑战网站?",
"assistant":"当然,以下是一些值得推荐的编程挑战网站:\n\n1. HackerRank:HackerRank 是一个全球领先的技术招聘平台,提供数百种编程挑战和比赛,包括算法、数据结构、数学、SQL、AI 等多个技术领域。\n\n2. LeetCode:LeetCode 是一个在线编程学习和实践平台,提供数千道编程题目,主要涵盖算法和数据结构。\n\n3. Codeforces:Codeforces 是一个全球知名的编程竞赛网站,提供数百个比赛和练习题目,主要涵盖算法和数据结构。\n\n4. Codewars:Codewars 是一个在线编程学习和实践平台,提供数千道编程题目,主要涵盖算法、数据结构、面向对象编程等多个技术领域。\n\n5. Project Euler:Project Euler 是一个非营利性的在线编程挑战平台,提供一系列数学和计算机科学问题,需要用编程语言进行解答。\n\n以上这些编程挑战网站可以帮助你提高编程能力,并且可以与其他编程爱好者进行交流和竞争。"
},
{
"human":"在学习编程的过程中,如何避免陷入困境和放弃呢?",
"assistant":"学习编程是一个需要长期坚持和不断学习的过程,以下是一些避免陷入困境和放弃的方法:\n\n1. 制定合理的学习计划:制定合理的学习计划,包括学习时间、学习内容、目标等,可以帮助你更好地管理时间和精力,避免学习过程中的松懈和分心。\n\n2. 寻找合适的学习资源:选择适合自己的学习资源,例如在线课程、编程书籍、视频教程等,可以让你更好地了解和掌握编程知识和技能。\n\n3. 寻求帮助和支持:在学习过程中,遇到问题和困难是很正常的,可以寻求他人的帮助和支持,例如参加编程社区、找到编程导师等。\n\n4. 进行实践和项目:实践和项目是学习编程的重要组成部分,可以帮助你更好地了解和掌握编程技能,同时也可以提高学习的兴趣和动力。\n\n5. 坚持并保持兴趣:坚持学习和保持兴趣是学习编程的关键。可以通过参加编程社区、参加编程竞赛、与其他编程爱好者交流等方式来保持兴趣和动力。\n\n总之,学习编程需要耐心和坚持,并需要不断学习和实践。通过以上方法可以帮助你避免陷入困境和放弃。"
}
],
}
文本摘要生成数据集
- LCSTS:http://icrc.hitsz.edu.cn/Article/show/139.html
- http://tcci.ccf.org.cn/conference/2017/taskdata.php
- 参考:https://www.zhihu.com/question/306887936
- 汇总:https://blog.csdn.net/PolarisRisingWar/article/details/122987556
字节对话推荐数据集
论文地址:https://arxiv.org/pdf/2306.08219.pdf
代码链接:https://github.com/hyllll/VCRS
SIGIR 2023 | 发布业内首个语音对话推荐数据集!火山语音团队实力助推VCRS发展
根据文档生成qa数据
https://github.com/threeColorFr/LLMforDialogDataGenerate
transGPT项目就用的这个方法;其实就是根据读入文档后加prompt给模型直接输出qa数据。
预训练数据集
Reference
[1] 大模型开源SFT训练数据整理
[2] 大模型研发核心:数据工程、自动化评估及与知识图谱的结合
[3] https://github.com/yangjianxin1/Firefly
[4] A Survey of Large Language Models
[5] Aligning Large Language Models with Human: A Survey【arxiv.org/abs/2307.12966】