大规模SFT微调指令数据的生成

news2024/10/5 14:33:03

前言

想要微调一个大模型,前提是得有一份高质量的SFT数据,可以这么说其多么高质量都不过分,关于其重要性已经有很多工作得以验证,感兴趣的小伙伴可以穿梭笔者之前的一篇文章:

《大模型时代下数据的重要性》:https://zhuanlan.zhihu.com/p/639207933

今天我们来简单总结一下目前市面上 “怎么自动化准备SFT数据” 这个话题,并给出对应的参考文献,感兴趣的小伙伴可以自己阅读论文了解细节。注意这里只是介绍机器自动化生成数据,如果有垂类网站等能够爬取真实人类的数据那更好了。

SFT数据无外乎就是<prompt, response> pair,也就是需要准备好高质量的prompt和高质量的response。

那我们就以这两个角度分开看看现在的paper们是怎么分别在prompt和response发力的。

准备prompt

  • SELF-INSTRUCT

代表工作有:

《SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions》: https://arxiv.org/pdf/2212.10560.pdf

BELLE : https://github.com/LianjiaTech/BELLE

其核心是先有一批sft种子数据,然后通过few-shot的形式让模型再生成新的prompt,它的prompt 如下:

You are asked to come up with a set of 30 diverse task instructions. These task instructions will be given to a GPT model and we will evaluate the GPT model for completing the instructions.

Here are the requirements:
1. Try not to repeat the verb for each instruction to maximize diversity.
2. The language used for the instruction also should be diverse. For example, you should combine questions with imperative instrucitons.
3. The type of instructions should be diverse. The list should include diverse types of tasks like open-ended generation, classification, editing, etc.
4. A GPT language model should be able to complete the instruction. For example, do not ask the assistant to create any visual or audio output. For another example, do not ask the assistant to wake you up at 5pm or set a reminder because it cannot perform any action.
5. The instructions should be in English.
6. The instructions should be 1 to 2 sentences long. Either an imperative sentence or a question is permitted.
7. You should generate an appropriate input to the instruction. The input field should contain a specific example provided for the instruction. It should involve realistic data and should not contain simple placeholders. The input should provide substantial content to make the instruction challenging but should ideally not exceed 100 words.
8. Not all instructions require input. For example, when a instruction asks about some general information, "what is the highest peak in the world", it is not necssary to provide a specific context. In this case, we simply put "<noinput>" in the input field.
9. The output should be an appropriate response to the instruction and the input. Make sure the output is less than 100 words.
10. Make sure the output is gramatically correct with punctuation if needed.
List of 30 tasks:
  • Wizard

该系列思路是进化学习,其代表工作有:

WizardLM: https://arxiv.org/abs/2304.12244

WizardCoder: https://arxiv.org/abs/2306.08568

WizardMath: https://github.com/nlpxucan/WizardLM/tree/main/WizardMath

上面两幅图也很生动的表达了其思路,其核心也是先有一批种子prompt,然后让模型自动化生产新的prompt,只不过不同于self-instruct的是其做了更精细的prompt engineering来进行生成。具体来说其从深度和广度两个方向对prompt进行了进化。

深度进化:其旨在不改变原prompt语义情况下增加难度,具体包括五种操作:添加约束条件、加深理解、具体化、增加推理步骤和复杂化输入。一个prompt engineering如下:

I want you act as a Prompt Rewriter.
Your objective is to rewrite a given prompt into a more complex version to make those famous AI systems (e.g., ChatGPT and GPT4) a bit harder to handle.
But the rewritten prompt must be reasonable and must be understood and responded by humans.
Your rewriting cannot omit the non-text parts such as the table and code in #Given Prompt#:. Also, please do not omit the input in #Given Prompt#.
You SHOULD complicate the given prompt using the following method:
Please add one more constraints/requirements into #Given Prompt#
You should try your best not to make the #Rewritten Prompt# become verbose, #Rewritten Prompt# can only add 10 to 20 words into #Given Prompt#.
‘#Given Prompt#’, ‘#Rewritten Prompt#’, ‘given prompt’ and ‘rewritten prompt’ are not allowed to appear in #Rewritten Prompt#
#Given Prompt#:
<Here is instruction.>
#Rewritten Prompt#:

广度进化:基于给定指令生成一个全新的指令,一个prompt engineering如下:

I want you act as a Prompt Creator.
Your goal is to draw inspiration from the #Given Prompt# to create a brand new prompt.
This new prompt should belong to the same domain as the #Given Prompt# but be even more rare.
The LENGTH and difficulty level of the #Created Prompt# should be similar to that of the #Given Prompt#. The #Created Prompt# must be reasonable and must be understood and responded by humans.
‘#Given Prompt#’, ‘#Created Prompt#’, ‘given prompt’ and ‘created prompt’ are not allowed to appear in #Created Prompt#.
#Given Prompt#:
<Here is instruction.>
#Created Prompt#:

当然并不是每次进化出的prompt都是可用的,所以需要过滤掉,以下四类情况被归类为指令演化失败:

1 与原始指令相比,进化后的指令没有提供任何信息增益(使用ChatGPT进行验证);

2 生成出的指令让LLMs难以回复;(例如当回复包含sorry而且比较短的时候)

3 LLMs生成的回复只包含标点和停止词;

4 进化指令显然从演化中的提示中复制了一些单词,如“给定提示”、“重写提示”、“#重写提示#”等。

  • Backtranslation

这里的思路另辟蹊径即使用回译的思路,代表工作有:

《Self-Alignment with Instruction Backtranslation》: https://arxiv.org/pdf/2308.06259.pdf

该工作的前提是要求有一大批未标注的样本比如非常大的文本集(未标记样本集)、sft种子数据。然后用<response, prompt>去训练一个模型论文叫做backward model,可以看到其和sft模型恰好相反,backward model是根据response生成prompt,当训练好模型后就可以喂未标注的大规模样本生成prompt了。

准备response

  • sample distillation

最简单也是目前大家最常用的方法就是根据prompt去直接拉取chatgpt甚至是GPT4的回复作为response即直接蒸馏openai,因为chatgpt和GPT4两个天花板模型本身能力非常强,这在一定程度上能够保证response的质量。

  • cot distillation

该类思路是说即使是chatgpt和GPT4也不能精确的回复一些高难度的prompt比如数学和推理类prompt,导致自动化得到的response不可用,为此可以做一些思维链来辅助其生成更可行的response,最简单的cot就是大家常见的增加一些类似“请详细给出答案”或者“请一步步推理”等等,下面我们介绍几篇比较复杂的cot工作:

《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》:https://arxiv.org/abs/2305.10601

也是从深度&广度两个方向进行思维链,论文中将其称为cot的加强版ToT,对多个思维链进行采样,并将它们的结果进行投票可以进一步提高LLMs的推理准确性。

《Answering Questions by Meta-Reasoning over Multiple Chains of Thought》:https://arxiv.org/pdf/2304.13007.pdf

简单来说思路就是通过外挂知识库也就是paper中说的证据来提高回复的准确性,首先把原始prompt进行拆解,然后分别检索证据即多条思维链,最后进行汇总。

《SCALING RELATIONSHIP ON LEARNING MATHEMATI- CAL REASONING WITH LARGE LANGUAGE MODELS》:https://arxiv.org/pdf/2308.01825.pdf

该篇paper重在解决数学问题。其基本思路是同一个prompt去调用不同的大模型进而得到不同的解题思路也即不同的思维链,当然要过滤掉最后结果不正确的思维链。通过这样就得到了大量的数据集。

总结

从上面的系列工作不难看出,都是使用LLM模型来自己生成prompt和response数据。总体生成idea就是由简单->复杂。

prompt : 由简单self-instruct -> 复杂的进化学习

response : 简单蒸馏 -> cot蒸馏 -> 多模型蒸馏

复杂化的手段有很多,比如上面的进化学习、cot、多模型等等,我们可以将这些方法论分别进一步互相借鉴套用到prompt和response各种领域,比如将多模型蒸馏用到生成prompt,用多个模型分别做进化学习生成promot,再比如借鉴进化学习,我们可以对一个response进行rewrite,让他写的更长更复杂甚至我们给模型一个<prompt, response>,然后让他根据目前的prompt写一个比目前reponse更好的reponse。

除了互相借鉴,我们还可以将这些方法论进行任意叠加组合,比如先进行得到prompt,然后多模型cot得到response等等。

总之大家可以多多脑洞造数据实验啦~~

关注

欢迎关注,下期再见啦~

知乎,csdn,github,微信公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/888906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI】百度AI助力开发,测试一下百度搜索的AI能力如何

百度搜索页面有个AI对话&#xff0c;点击进去看看&#xff1a; 是不是文心一言&#xff1f;它说不是。 测试一下辅助写代码功能&#xff1a; 1、写个爬虫&#xff1a; 代码&#xff1a; import requests from bs4 import BeautifulSoup# 目标网站的URL url "http:/…

Ubuntu虚拟机网络无法连接的几种解决方法

虚拟机网络无法连接的几种解决方法 问题状况描述可能的解决方案 问题状况描述 Ubuntu虚拟机没有网络&#xff0c;无法ping通互联网&#xff0c;左上角网络连接图标消失等情况可能的解决方案 1.重启虚拟机网络编辑器 2.重启虚拟机网络适配器 3.重启虚拟机网络服务器1.重启网络…

优思学院|五大工具:APQP、FMEA、MSA、SPC、PPAP

在现代制造业中&#xff0c;质量是企业成功的关键之一。为了确保产品和过程的质量&#xff0c;需要采用一系列有效的工具和方法。APQP、FMEA、MSA、SPC和PPAP被认定为质量管理体系的五大核心工具&#xff0c;这些工具不仅在汽车行业中得到广泛应用&#xff0c;还被其他制造领域…

生信豆芽菜-分组比较的表格

网址&#xff1a;http://www.sxdyc.com/visualsCliTableCompare 1、数据准备 两列的数据&#xff0c;最后比较这两组的样本分布 2、选择两个分组的颜色&#xff0c;有几个就选几个颜色&#xff0c;表头颜色&#xff0c;图片的宽度和高度&#xff0c;提交等待运行成功 3、结…

PHP入门基础教程 - 专栏导读

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…

148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#…

【仿写tomcat】四、解析http请求信息,响应给前端,HttpServletRequest、HttpServletResponse的简单实现

思考 在解析请求之前我们要思考一个问题&#xff0c;我们解析的是其中的哪些内容&#xff1f; 对于最基本的实现&#xff0c;当然是请求类型&#xff0c;请求的url以及请求参数&#xff0c;我们可以根据请求的类型作出对应的处理&#xff0c;通过url在我们的mapstore中找到se…

计算机控制技术|17/8|11:32

目录 1. 学习计算控制系统需要的相关知识有哪些&#xff1f; 2. 计算机控制系统是什么&#xff1f; 3. 计算机控制系统的主要研究内容是什么&#xff1f; 4. 计算机控制系统的主要特点是什么&#xff1f; 5. 计算机控制系统的性能指标主要有哪些&#xff1f; 6. 计算机控…

学生宿舍管理系统(前端java+后端Vue)源码

完整资料下载链接 界面介绍 登录 宿舍管理 菜单管理 角色管理 ###班级管理

Nginx常见的三个漏洞

目录 $uri导致的CRLF注入漏洞 两种常见场景 表示uri的三个变量 案例 目录穿越漏洞 案例 Http Header被覆盖的问题 案例 $uri导致的CRLF注入漏洞 两种常见场景 用户访问http://example.com/aabbcc&#xff0c;自动跳转到https://example.com/aabbcc 用户访问http://exa…

Java中的枚举类型

一&#xff0c;什么是枚举 在Java中&#xff0c;枚举&#xff08;Enumeration&#xff09;是一种特殊的数据类型&#xff0c;它允许我们定义一个固定数量的常量集合。枚举类型在Java中是通过关键字enum来定义的。每个枚举常量都是枚举类型的实例&#xff0c;它们在枚举类型中以…

【RP2040】香瓜树莓派RP2040之自定义的短按、双击、长按按键

本文最后修改时间&#xff1a;2022年09月15日 11:02 一、本节简介 本节介绍如何编写一个可以自己选择引脚的短按、双击、长按三种方式的按键驱动。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico开发板 ①树莓派pico开发板*2 ②micro usb数据线*2 2&#xff09;电脑…

【数据结构】 List与顺序表及接口的实现

文章目录 什么是List常见接口介绍线性表顺序表顺序表接口的实现add在末尾新增元素在 pos 位置新增元素判定是否包含某个元素查找某个元素对应的位置获取 pos 位置的元素给 pos 位置的元素设为 value删除第一次出现的关键字key获取顺序表的长度清空顺序表 顺序表的优缺点优点&am…

网络通信原理UDP协议(第五十课)

UDP协议:用户数据包协议,无连接、不可靠,效率高 字段长度描述Source Port2字节标识哪个应用程序发送(发送进程)。Destination Port2字节标识哪个应用程序接收(接收进程)。Length2字节UDP首部加上UDP数据的字节数,最小为8。Checksum2字节覆盖UDP首部和UDP数据,是可…

网络通信原理TCP的四次断开连接(第四十九课)

FIN:发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。 SEQ:序号字段。 TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。 序列号为X ACK :确认号 。 …

【操作系统】24王道考研笔记——第二章 进程与线程

第二章 进程与线程 一、进程与线程 1.进程的概念 程序&#xff1a;是静态的&#xff0c;就是个存放在磁盘里的可执行文件&#xff0c;如&#xff1a;QQ.exe。 进程&#xff1a;是动态的&#xff0c;是程序的一次执行过程&#xff0c;如&#xff1a;可同时启动多次QQ程序 引…

stable diffusion基础

整合包下载&#xff1a;秋叶大佬 【AI绘画8月最新】Stable Diffusion整合包v4.2发布&#xff01; 参照&#xff1a;基础04】目前全网最贴心的Lora基础知识教程&#xff01; VAE 作用&#xff1a;滤镜微调 VAE下载地址&#xff1a;C站&#xff08;https://civitai.com/models…

目录扫描工具—dirsearch使用指南

一&#xff1a;工具简介 dirsearch是一个基于Python3的命令行工具&#xff0c;旨在对web服务器中的目录和文件进行暴力破解&#xff0c;既暴力扫描页面结构&#xff0c;包括网页中的目录和文件。 下载地址&#xff1a; 1&#xff1a; https://github.com/maurosoria/dirsear…

2023河南萌新联赛第(六)场:河南理工大学-L 阴晴不定的大橘学长

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-L 阴晴不定的大橘学长 https://ac.nowcoder.com/acm/contest/63602/L?&headNavacm 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-L 阴晴不定的大橘学长题…

【RP2040】香瓜树莓派RP2040之仿真调试

本文最后修改时间&#xff1a;2022年08月23日 01:57 一、本节简介 本节以树莓派pico开发板为例&#xff0c;介绍如何使用一个pico作为仿真器&#xff0c;给另一个pico仿真调试代码。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico开发板 ①树莓派pico开发板*2 ②micr…