指令微调数据集构建方法

指令微调(Instruction Tuning),是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调,在一些文章中也称为有监督微调(Supervised Fine-tuning,SFT)或多任务提示训练(Multitask Prompted Training)。指令微调的第一步就是收集或构建指令化的实例,然后通过有监督的方式对LLM的参数进行微调,经过指令微调后,大语言模型能够展现出较强的指令遵循能力,可以通过零样本学习(zero-shot)的方式解决多种下游任务。

一般来说,一个经过指令格式化的数据实例包括任务描述(也称为指令)、任务输入-任务输出以及可选的示例。下面,我们将主要介绍三种构建格式化指令数据的方法。

1、基于现有的NLP任务数据集构建

学术界围绕传统NLP任务(如机器翻译、文本摘要和文本分类等)发布了大量的开源数据集合,这些数据是非常重要的监督学习数据资源,可以用于指令数据集的构造。

通常来说,这些NLP数据集都包括输入和输出两个主要部分。例如,在中英翻译任务中,输入是“大语言模型已经成为机器学习的一个重要研究方向”,而相应的输出则是“Large language models have become one important research direction for machine learning”。

为了生成指令化的训练数据,一个非常关键的步骤就是为上述的“输入-输出”对数据添加任务描述信息,用于指导模型去理解任务目标以及相关信息。在上述的例子中,可以向中译英的翻译数据集中添加指令,例如“请把这个中文句子翻译成英文”。通过上述操作,就可以将一个NLP任务的数据实例全部通过自然语言形式进行表达,进而数据实例可以被用于大语言模型的指令微调。

经过NLP指令数据微调后,大语言模型可以学习到指令遵循(Instruction Following)的能力,进而能够解决其他未见过的NLP任务。相关研究表明在现有NLP数据集的输入-输出数据中添加合适的任务描述是提升大模型指令跟随能力的关键因素如果去除了这些任务描述,仅使用输入-输出数据对模型进行微调,模型的性能会出现显著下降

此外,为了进一步丰富训练实例,还可以设计特定的任务描述来翻转现有实例的输入-输出对,从而得到新的任务数据用于指令微调。例如,给定一个问题-答案对,传统的训练方式是基于问题预测答案;同时也可以基于答案生成问题,以此方式来创建一个新的“问题生成”实例,比如可以使用任务描述“请基于以下答案生成一个问题”。

2、基于日常对话数据构建

尽管通过指令格式化已有的NLP数据集能够获得大量的指令数据实例,但是这些数据的多样性比较局限,与人类的真实需求也不能很好匹配。为此,可以使用用户在日常对话中的实际需求作为任务描述。例如,InstructGPT将用户提交给OpenAIAPI的查询作为任务描述。由于这些用户查询源自于真实应用场景,均采用自然语言形式进行表达,因此特别适合大模型学习指令跟随能力。

为了进一步增加任务的多样性,OpenAI还雇佣标注者创作更多的真实生活任务,包括开放式生成、开放式问答、头脑风暴等任务,然后由另一组标注者来回答这些问题作为输出。OpenAI最终将指令(用户真实查询或者人工标注的任务)和期望的输出(人工编写的答案)配对作为一个训练实例。

用户第一轮输入:激活函数有什么作用?

模型第一轮输出:激活函数是神经网络中的一种非线性函数,通常应用于神经元的输出上。它的作用是为神经网络引入非线性特性,使得神经网络可以更好地逼近复杂的非线性函数。如果不使用激活函数,神经网络将只能实现线性变换,无法学习复杂的非线性关系。……

用户第二轮输入:什么是复杂的非线性关系?

模型第二轮输出:复杂的非线性关系指的是输入与输出之间存在着非常复杂的非线性映射关系,无法用简单的线性函数来描述。这样的关系可能是高维度、非平稳、非对称等。例如,在图像识别任务中,一张图片中的不同物体之间的关系非常复杂,无法用简单的线性函数来描述。……

……(省略后续多轮对话)

为了推动指令微调数据集的开放共享,最近研究人员创建并且开源了一些常见的日常对话任务指令集,例如Dolly和OpenAssistant,这些数据均由人工精心标注,因此具有较高的质量。此外,研究人员还尝试通过自行构建的开放平台收集大量的用户对话请求作为输入数据,并使用ChatGPT或GPT-4生成回复作为输出数据。其中,一个代表性的数据集是来自于ShareGPT的多轮对话数据。

3、基于合成数据构建

为了减轻人工收集与标注数据的负担,研究人员进一步提出半自动化的数据合成方法。他们借助已有的高质量指令数据作为上下文学习示例输入大语言模型,进而生成大量多样化的任务描述和输入-输出数据。

如上图所示,Self-Instruct方法仅需要使用100多个人工撰写的实例作为初始任务池,然后随机选择数据作为示例,就可以通过提示大语言模型生成新的指令微调数据。这种半自动化的合成方法具备高效生成大规模指令微调数据的能力,从而显著降低了人工标注所需的经济成本,在实践中得到了广泛应用。

考虑到Self-Instruct生成的实例可能过于简单或缺乏多样性,还有一种改进的指令数据合成方法Evol-Instruct,该方法通过基于深度和广度的演化来提高实例的复杂性和多样性。

Self-Instruct方法

Self-Instruct方法借助大语言模型(例如ChatGPT)所具备的数据合成能力,通过迭代的方法高效地生成大量的指令微调数据。作为初始任务池,该方法首先构建了175条高质量且多样的指令数据,之后经由两个主要步骤生成指令微调数据。

  • 指令数据生成:从任务池中随机选取少量指令数据作为示例,并针对Chat-GPT设计精细指令来提示模型生成新的微调数据。具体地,ChatGPT模型将以下图中的指令和上下文示例,来仿照生成一些新的任务描述和对应的输出:

你被要求提供10个多样化的任务指令。这些任务指令将被提供给GPT模型。

以下是你提供指令需要满足的要求:

1.尽量不要在每个指令中重复动词,要最大化指令的多样性。

2.使用指令的语气也应该多样化。例如,将问题与祈使句结合起来。

……(省略后续要求)

下面是10个任务指令的列表:

###指令:将85华氏度转换为摄氏度。

###输出:85华氏度等于29.44摄氏度。

###指令:是否有科学无法解释的事情?

###输出:有很多科学无法解释的事情,比如生命的起源、意识的存在……

……(省略上下文示例)

  • 过滤与后处理:该步骤的主要目的是剔除低质量或者重复的生成实例,从而保证指令数据的多样性与有效性。常见的过滤方法包括:去除与任务池中指令相似度过高的指令、语言模型难以生成回复的指令、过长或过短的指令以及输入或输出存在重复的实例。

Evol-Instruct方法

Evol-Instruct方法是一种基于大语言模型的指令数据复杂化技术。该方法基于初始指令数据集进行扩展,主要包含两个步骤:

  • 指令演化:在该步骤中,大语言模型作为指令演化器,针对两个不同的方向进行指令的拓展,分别为深度演化广度演化。深度演化通过五种特定类型的提示(添加约束、深化、具体化、增加推理步骤以及使输入复杂化)使得指令变得更加复杂与困难;而广度演化旨在扩充指令主题范围、指令涉及的能力范围以及整体数据集的多样性。

Evol-Instruct深度演化(添加约束)指令:

我希望您充当指令重写器。

您的目标是将给定的提示重写为更复杂的版本,使得著名的AI系统(例如Chat-GPT和GPT-4)更难处理。

但重写的提示必须是合理的,且必须是人类能够理解和响应的。

您的重写不能省略#给定提示#中表格和代码等非文本部分。

您应该使用以下方法使给定的提示复杂化:

请在#给定提示#中添加一项约束或要求。

你应该尽量不要让#重写提示#变得冗长,#重写提示#只能在#给定提示#中添加1020个单词。

#重写提示#中不允许出现“#给定提示#”、“#重写提示#”字段。

#给定提示#:{需要重写的指令}

#重写提示#:

Evol-Instruct广度演化指令:

我希望你充当指令创造器。

您的目标是从#给定提示#中汲取灵感来创建全新的提示。

此新提示应与#给定提示#属于同一领域,但更为少见。

#创造提示#的长度和复杂性应与#给定提示#类似。

#创造提示#必须合理,并且必须能够被人类理解和响应。

#创造提示#中不允许出现“#给定提示#”、“#创造提示#”字段。

#给定提示#:{需要重写的指令}

#创造提示#:

上面是深度演化(添加约束)和广度演化的具体指令,我们将此提示和需要重写的指令输入到大语言模型中,模型便会根据这些指令生成演化后新的提示。然后再将这个指令输入给大模型来得到相应的答案,这样便构建了一条新的指令-输出数据实例。

  • 数据后处理:该阶段将去除部分实例数据以保证数据集合的整体质量和多样性。主要使用了如下的规则进行处理:使用ChatGPT比较演化前后的指令,移除ChatGPT认为差异很小的指令;移除大模型难以响应的指令,如响应中包含“sorry”或响应长度过短;移除仅包含标点符号和连词的指令或回复。

以上是常见的三种构建格式化指令数据的方法,通过指令微调旨在使用人工构建的指令数据对于大语言模型进一步训练,从而增强或解锁大语言模型的能力。

【推荐时间】

AI的三大基石是算法、数据和算力,其中数据和算法都可以直接从国内外最优秀的开源模型如Llama 3、Qwen 2获得,但是算力(或者叫做GPU)由于某些众所周知的原因,限制了大部分独立开发者或者中小型企业自建基座模型,因此可以说AI发展最大的阻碍在于算力

给大家推荐一个性价比超高的GPU算力平台:UCloud云计算旗下的Compshare算力共享平台。

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

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

相关文章

go语言:两协程并发交替打印数字和字母(代码逐行注释)

要求: 并发两协程交替打印数字和字母。一个协程打印数字,一个协程打印字母。 输出: 12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728 思路: 两个 channel 控制两个协程进行交替打印。sync.WaitG…

CARLA自动驾驶模拟器基础

CARLA 使用服务器-客户端架构运行,其中 CARLA 服务器运行模拟并由客户端向其发送指令。客户端代码使用 API 与服务器进行通信。要使用 Python API,您必须通过 PIP 安装该模块: pip3 install carla-simulator # Python 3World and client 客…

【Android面试八股文】你能说一说View中onTouch、onTouchEvent和onClick的执行顺序吗?

文章目录 一、View中onTouch、onTouchEvent和onClick的执行顺序1.1 分析dispatchTouchEvent()1.1.1 执行顺序1.1.2 代码示例1.1.3 总结一、View中onTouch、onTouchEvent和onClick的执行顺序 要了解 onTouch()、onTouchEvent() 和 onClick() 方法的执行顺序,我们需要深入分析 …

React18中各种Hooks用法总结( 内附案例讲解)

React中各种Hooks用法总结 内附案例讲解 一、useState useState 是一个 React Hook,它允许你向组件添加一个 状态变量。 import React, { FC, memo, useState } from react import { MainContainer } from ./style interface IProps {children?: React.ReactNo…

FRP内网穿透及多级代理的使用

目录 0、前言 1、场景介绍 2、环境准备 2.1 下载frp 2.2 配置一台VPS 2.3 socks5客户端 2.5 网络环境准备 3、Frp设置 3.1 一层代理 3.1 二层代理 4、Frp总结 0、前言 FRP是比较老牌的也是比较流行的反向代理、内网穿透软件。FRP用途和使用场景可以看官方文档,…

JavaScript 预编译与执行机制解析

在深入探讨JavaScript预编译与执行机制之前,我们首先需要明确几个基本概念:声明提升、函数执行上下文、全局执行上下文以及调用栈。这些概念共同构成了JavaScript运行时环境的核心组成部分,对于理解代码的执行流程至关重要。本文将围绕这些核…

美团携手HarmonyOS SDK,开启便捷生活新篇章

华为开发者大会(HDC 2024)于6月21日在东莞松山湖拉开序幕,通过一系列精彩纷呈的主题演讲、峰会、专题论坛和互动体验,为开发者们带来了一场知识与技术的盛宴。6月23日,《HarmonyOS开放能力,使能应用原生易用…

如何在Java中实现数据加密与解密?

如何在Java中实现数据加密与解密? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Java中实现数据加密与解密,这是保…

24-6-23-读书笔记(七)-《文稿拾零》豪尔赫·路易斯·博尔赫斯(第三辑)

文章目录 《文稿拾零》阅读笔记记录总结 《文稿拾零》 《文稿拾零》超厚的一本书(570),看得时间比较长,这本书是作者零散时间写的一些关于文学性质的笔记,读起来还是比较无趣的,非常零散,虽然有…

C++系列-String(二)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” #define _CRT_SECURE_NO_WARNINGS #include<string> #include<iostream> #include<list> #include<algorithm> using namespace std; void test_string…

【Android面试八股文】如果 onTouchEvent()方法返回false,onClick()方法还会执行么?

文章目录 一、onTouchEvent 返回 false 的情况二、示例场景分析三、结论在 Android 中,拦截事件通常指阻止事件继续传递或者消费事件,以防止它继续触发其他后续事件(比如 onClick())。 在 onTouchEvent() 方法中,如果返回 false,表示当前 View 没有处理该事件,Android …

Java启动jar设置内存分配详解

在微服务架构越来越盛行的情况下&#xff0c;我们通常一个系统都会拆成很多个小的服务&#xff0c;但是最终部署的时候又因为没有那么多服务器只能把多个服务部署在同一台服务器上&#xff0c;这个时候问题就来了&#xff0c;服务器内存不够&#xff0c;这个时候我们就需要对每…

Spring响应式编程之Reactor操作符

操作符 操作符Processo<T,R>&#xff08;1&#xff09;创建操作符&#xff08;2&#xff09;转换操作符&#xff08;3&#xff09;组合操作符&#xff08;4&#xff09;条件操作符&#xff08;5&#xff09;错误处理操作符 操作符Processo<T,R> 操作符并不是响应式…

【Python机器学习实战】 | 基于线性回归以及支持向量机对汽车MPG与自重进行回归预测

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【Android面试八股文】请你描述一下JVM的内存模型

文章目录 JVM内存模型1. 方法区(Method Area)运行时常量池(Runtime Constant Pool)2. 堆(Heap)3. 栈(Stack)4. 本地方法栈(Native Method Stack)5. 程序计数器(Program Counter Register)6. 直接内存(Direct Memory)JVM内存溢出的情况Java的口号是: “Write onc…

【Flink metric】Flink指标系统的系统性知识:以便我们实现特性化数据的指标监控与分析

文章目录 一. Registering metrics&#xff1a;向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三. Reporter ing四. System m…

tensorRT C++使用pt转engine模型进行推理

目录 1. 前言2. 模型转换3. 修改Binding4. 修改后处理 1. 前言 本文不讲tensorRT的推理流程&#xff0c;因为这种文章很多&#xff0c;这里着重讲从标准yolov5的tensort推理代码&#xff08;模型转pt->wts->engine&#xff09;改造成TPH-yolov5&#xff08;pt->onnx-…

如何关闭软件开机自启,提升电脑开机速度?

如何关闭软件开机自启&#xff0c;提升电脑开机速度&#xff1f;大家知道&#xff0c;很多软件在安装时默认都会设置为开机自动启动。但是&#xff0c;有很多软件在我们开机之后并不是马上需要用到的&#xff0c;开机启动的软件过多会导致电脑开机变慢。那么&#xff0c;如何关…

【break】大头哥哥做题

【break】大头哥哥做题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int sum 0;//求和int day 0;//天数 while(1){int a;cin>>a;if(a-1){break;//结束当前循环 }sum sum a; …

HTTP基本概念介绍

HTTP概述 HTTP : 超文本传输协议&#xff0c;HTTP是浏览器端Web通信的基础。 一&#xff0c; 两种架构 B/S架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构。 B: 浏览器&#xff0c;比如Firefox 、Google 、Internet; S: 服务器&#xff0c;Apache&#xff0c…