ACL2023 | 如何用175条种子数据打造顶级指令模型?揭秘self-instruct:媲美InstructGPT001的秘密武器

news2024/11/24 8:04:27

1. 论文的核心问题和核心贡献

核心问题:该论文解决的问题是大规模语言模型在微调响应指令时过于依赖人工编写的指令数据,这些数据往往在数量、种类和创意上都存在局限,阻碍了模型的广泛泛化能力。研究的主要目标是开发一种方法,通过语言模型自身生成的指令来改善其跟随指令的能力,从而减少对人工编写指令数据的依赖。

核心贡献

  • 提出了SELF-INSTRUCT框架,通过预训练的语言模型生成指令、输入和输出样本,然后过滤无效或相似的样本,最终用于微调原始模型。
  • 在vanilla GPT-3上应用该方法,显著提升了模型在SUPER-NATURALINSTRUCTIONS上的性能,达到了与InstructGPT001相当的水平。
  • 通过专家编写的指令集合进行进一步评估,表明通过SELF-INSTRUCT微调的GPT-3在跟随指令的能力上大幅优于现有的公共指令数据集,并且仅比InstructGPT001落后5%。

2. 相关工作,目前业界进行该任务常用的方法

相关工作

  • 目前,构建能够响应自然语言指令的模型是NLP领域的热点,相关研究包括Mishra等(2022)、Wei等(2022)、Sanh等(2022)以及Wang等(2022)等。这些研究依赖大规模预训练的语言模型和人工编写的指令数据来提升模型的泛化能力。
  • PROMPTSOURCE(Bach等,2022)和SUPER-NATURALINSTRUCTIONS(Wang等,2022)是常用的公共指令数据集,但这些数据集在多样性和创意性方面存在局限。

常用方法

  • 人工编写指令数据集:这是当前解决类似问题的主流方法,但存在数据收集成本高、数据种类有限等问题。
  • 大规模预训练语言模型:例如GPT-3,通过在大规模文本数据上预训练,获得广泛的语言理解和生成能力,但其在特定任务上的性能需要进一步微调。
  • 微调方法:包括使用现有指令数据集对模型进行监督微调,以增强其指令跟随能力。

3. 论文的实现方法

方法概述
SELF-INSTRUCT框架包含以下步骤:

  1. 指令生成:使用一个小型的种子任务集合,引导模型生成新的任务指令。
  2. 分类任务识别:确定生成的指令是否表示分类任务。
  3. 实例生成:为每个指令生成对应的输入输出实例。
  4. 过滤和后处理:自动过滤低质量或重复的指令和实例。

在这里插入图片描述

详细步骤

  • 指令生成:从175个手工编写的种子任务开始,随机抽取8个任务作为上下文示例,通过模型生成新的任务指令。
  • 分类任务识别:使用少量的分类和非分类指令,通过模型确定生成的指令是否为分类任务。
  • 实例生成:对于分类任务,先生成可能的标签,然后生成对应的输入;对于非分类任务,先生成输入,再生成输出。
  • 过滤和后处理:通过计算新生成指令与已有指令的ROUGE-L相似度来确保数据的多样性,同时排除包含特定关键词或格式不正确的指令和实例。

接下来我们来详细介绍一下这一步骤!

多样性检查
1. 计算相似度

在这一步,我们使用ROUGE-L相似度来计算新生成指令与已有指令之间的相似度。ROUGE-L相似度是评价文本相似度的一种方法,主要通过计算两个文本中最长公共子序列(Longest Common Subsequence,LCS)来衡量它们的相似度。具体步骤如下:

  1. 准备文本:我们有一组已有的指令和一个新生成的指令。

    比如,已有的指令:

    • 请写一封以猫的视角写的信。
    • 帮我填写一个工作申请表。
    • 编写一个将华氏度转换为摄氏度的代码。

    新生成的指令:

    • 编写一个将摄氏度转换为华氏度的代码。
  2. 计算LCS:对于新生成的指令和每个已有指令,计算它们的最长公共子序列长度。

    例如,对于新生成的指令“编写一个将摄氏度转换为华氏度的代码”和已有的指令“编写一个将华氏度转换为摄氏度的代码”,它们的最长公共子序列是“编写一个将华氏度转换为的代码”,长度为11。

  3. 计算ROUGE-L相似度:使用最长公共子序列长度除以两者的长度平均值,得到相似度分数。

2. 确保多样性

在计算出新生成指令与已有指令的ROUGE-L相似度后,我们需要确保这些指令的多样性,避免生成过于相似的指令。具体步骤如下:

  1. 设定相似度阈值:我们设定一个相似度阈值,比如0.7,作为判断新生成指令是否与已有指令过于相似的标准。

  2. 比较相似度:将新生成指令的相似度与每个已有指令的相似度进行比较。

    例如,对于新生成的指令“编写一个将摄氏度转换为华氏度的代码”,我们与已有指令“编写一个将华氏度转换为摄氏度的代码”计算出的相似度为0.92,大于0.7。

  3. 排除相似指令:如果新生成指令与任何一个已有指令的相似度超过0.7,我们认为这两个指令过于相似,从而将新指令排除。

    例如,由于新生成指令的相似度为0.92,大于0.7,所以我们将其排除,避免重复内容。

  4. 保留多样指令:如果新生成指令的相似度低于0.7,则认为其具有足够的多样性,可以保留下来用于训练。

示例总结

假设已有指令集合如下:

  1. 请写一封以猫的视角写的信。
  2. 帮我填写一个工作申请表。
  3. 编写一个将华氏度转换为摄氏度的代码。
  4. 其他指令……

新生成的指令:

  • 编写一个将摄氏度转换为华氏度的代码。

我们计算出新生成指令与第三条已有指令的ROUGE-L相似度为0.92(大于0.7)。因此,我们认为这条新指令与已有指令过于相似,将其排除。这样可以确保我们保留的指令是多样化的,不会有太多重复。

通过这些步骤,我们可以确保生成的指令数据集是多样化的,包含丰富的内容,进而提高模型的泛化能力。

4. 论文的主要实验结果

实验设计

  • 使用GPT-3进行实验,生成约52K条指令和82K个实例,并通过这些数据微调模型。
  • 评估指标包括在SUPER-NATURALINSTRUCTIONS上的表现以及通过人工编写的指令集合进行的人类评估。

结果分析

  • 在SUPER-NATURALINSTRUCTIONS上,微调后的模型性能比原始模型提高了33%,与InstructGPT001的性能相当。
  • 在专家编写的新任务指令集上,SELF-INSTRUCT微调的GPT-3在指令跟随能力上大幅优于基于现有公共指令数据集微调的模型,仅比InstructGPT001落后5%。

5. 当前该研究存在的问题,未来可能的研究方向

存在的问题

  • 生成数据的质量仍然存在一定的噪声,部分生成的实例可能不完全正确或不一致。
  • 方法的有效性在很大程度上依赖于预训练模型的质量和生成能力,对于较小或较弱的模型可能效果不佳。
  • 在实际应用中,某些生成的指令和实例可能不符合特定领域的需求,需要进一步优化和定制。

未来研究方向

  • 提高生成数据的质量:通过人类专家的参与或使用更强大的模型生成更高质量的数据。
  • 扩展应用范围:将SELF-INSTRUCT框架应用到多模态学习或其他特定领域,如医学或法律等。
  • 优化算法:探索更有效的过滤和后处理方法,进一步提升生成数据的多样性和准确性。

通俗案例解释:

指令生成

想象一下,你是一个老师,你有一小堆手工写的练习题,这些练习题是由其他老师编写的(种子任务)。现在,你希望你的学生能够自己生成更多的练习题。

  1. 选出示例:你从这堆练习题中随机抽取8个题目,作为示范给学生看。就像是你告诉学生:“看看这些题目是怎么写的”。

    比如:

    • 示例题1:请写一封以猫的视角写的信。
    • 示例题2:帮我填写一个工作申请表。
    • 示例题3:编写一个将华氏度转换为摄氏度的代码。
  2. 生成新题:然后,你让学生根据这8个题目的风格和格式,自己尝试编写新的练习题。

分类任务识别

接下来,你需要判断新生成的练习题是哪种类型,就像判断这道题是选择题还是问答题。

  1. 选择分类标准:你告诉学生,一些题目有固定的答案选项(比如“是”或“否”,“A”或“B”),这些题目就是分类任务。其他题目则是开放式回答(比如写一篇短文或编写一个程序)。

  2. 判断类型:学生根据你给的标准,来判断每道题是分类任务还是非分类任务。

实例生成

现在,你需要为这些题目生成具体的例子和答案。就像是给题目添加具体的内容。

  1. 分类任务

    • 生成标签:先想出可能的答案选项。
      比如,如果题目是“这个句子的情感是积极的还是消极的?”,那么标签可能是“积极的”和“消极的”。
    • 生成输入:然后为每个标签生成对应的句子。
      比如,积极的句子:“今天阳光明媚,我感到非常开心。”;消极的句子:“今天下雨了,我感到很沮丧。”
  2. 非分类任务

    • 生成输入:直接生成题目的具体内容。
      比如,如果题目是“描述一下如何系鞋带”,输入可以是:“首先,交叉两个鞋带,然后将一个鞋带绕过另一个,再拉紧。”
    • 生成输出:根据输入生成答案或解释。
      比如,输出:“这样你就完成了系鞋带的步骤。”

过滤和后处理

最后,你需要确保这些新生成的题目是多样的,并且没有错误。

  1. 多样性检查:你检查每个新题目与已有题目的相似度,确保它们不太相似,保持题目的多样性。

    比如,如果一个新题目“描述一下如何做饭”与已有题目“描述一下如何煮米饭”非常相似,你可能会把这个新题目排除掉。

  2. 排除错误:你还要排除包含特定关键词(比如“图片”或“图表”)或格式不正确的题目。

    比如,如果一个题目是“请描述这张图片”,因为无法处理图片信息,所以你会把这个题目排除掉。

通过这些步骤,你的学生(模型)就可以自己生成一大堆新的、有创意的练习题,并且这些题目可以用于进一步的学习和练习。这就是SELF-INSTRUCT框架的基本工作原理!

总结:SELF-INSTRUCT提供了一种创新的方法,通过模型自身生成指令数据来改善其指令跟随能力,显著减少了对人工编写数据的依赖,展示了良好的应用前景。未来研究可以在提高数据质量和扩展应用范围方面进一步探索。

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

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

相关文章

Java实习手册(小白也看得懂)

秃狼说 距离俺发布的学习路线已经六个月了,那我给小伙伴的学习周期是四五个月左右,我相信大多的小伙伴已经学习的差不多了。正好赶上暑期实习的阶段,在暑期找到实习就成为暑期的头等大事。 实习经验在校招的起到决定性的作用,所…

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接:翻转字符串里的单词 文档讲解: 代码随想录 思路:首先,移除多余的空格;然后&#xff0c…

Amesim应用篇-信号传递

前言 在Amesim中常见的信号传递是通过信号线连接,针对简单的模型通过信号线连接还可以是信号线清晰规整,方便查看。如果模型较复杂,传递信号的元件较多时,此时再继续使用信号线进行信号传递,可能会使草图界面看起来杂…

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看 摘要 本文主要介绍了大学生参加电子计算机类比赛(电赛、光电设计大赛、计算机设计大赛、嵌入式芯片与系统设计大赛等比赛)的流程和涉及到的知识…

一本超简单能用Python实现办公自动化的神书!让我轻松摆脱办公烦恼!

《超简单:用Python让Excel飞起来》 这本书旨在通过Python与Excel的“强强联手”,为办公人员提供一套高效的数据处理方案。书中还介绍了如何在Excel中调用Python代码,进一步拓宽了办公自动化的应用范围。 全书共9章。第1~3章主要讲解Python编…

软件设计之Java入门视频(11)

软件设计之Java入门视频(11) 视频教程来自B站尚硅谷: 尚硅谷Java入门视频教程,宋红康java基础视频 相关文件资料(百度网盘) 提取密码:8op3 idea 下载可以关注 软件管家 公众号 学习内容: 该视频共分为1-7…

【C++】 解决 C++ 语言报错:Memory Leak

文章目录 引言 内存泄漏(Memory Leak)是 C 编程中常见且严重的内存管理问题之一。当程序分配了内存而没有正确释放,导致内存无法被重新利用时,就会发生内存泄漏。这种错误会导致程序占用越来越多的内存,最终可能导致系…

Using a text embedding model locally with semantic kernel

题意:在本地使用带有语义核(Semantic Kernel)的文本嵌入模型 问题背景: Ive been reading Stephen Toubs blog post about building a simple console-based .NET chat application from the ground up with semantic-kernel. Im…

C++基础21 二维数组及相关问题详解

这是《C算法宝典》C基础篇的第21节文章啦~ 如果你之前没有太多C基础,请点击👉C基础,如果你C语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏:数据结构啦 ​ 目…

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践

在近年来的深度学习领域,Transformer模型凭借其在自然语言处理(NLP)中的卓越表现,迅速成为研究热点。尤其是基于自注意力(Self-Attention)机制的模型,更是推动了NLP的飞速发展。然而&#xff0c…

嵌入式UI开发-lvgl+wsl2+vscode系列:6、布局(Layouts)

一、前言 这节总结一下整体页面的布局方式,lvgl的布局方式比较少,目前只有flex和grid两大类布局,即弹性布局和网格布局,弹性布局一般就是指定相对位置,网格布局就是将整个页面划分为网格状,我们做其它的UI…

【Python机器学习】处理文本数据——用tf-idf缩放数据

为了按照我们预计的特征信息量大小来缩放特征,而不是舍弃那些认为不重要的特征,最常见的一种做法就是使用词频-逆向文档频率(tf-idf)。这一方法对某个特定文档中经常出现的术语给与很高的权重,但是堆在语料库的许多文档…

pandas,dataframe使用笔记

目录 新建一个dataframe不带列名带列名 dataframe添加一行内容查看dataframe某列的数据类型新建dataframe时设置了列名,则数据类型为object dataframe的保存保存为csv文件保存为excel文件 dataframe属于pandas 新建一个dataframe 不带列名 df pd.DataFrame() 带…

【Linux开发】基于ALSA库实现音量调节

基于ALSA库实现音量调节 ALSA库实现音量调节1、使用alsamixer工具查看音频接口2、完整代码2.1、snd_mixer_open2.2、snd_mixer_attach、2.3、snd_mixer_selem_register2.4、snd_mixer_load2.5、snd_mixer_first_elem/snd_mixer_elem_next2.6、snd_mixer_selem_get_playback_vol…

江汉大学刘春萌同学整理的wifi模块 上传mqtt实验步骤

一.固件烧录 1.打开安信可官网 2.点击wifi模组系列的ESP8266 3.点击各类固件后选择固件号1471下载 4.打开烧录工具将下载的二进制文件导入并将后面的起始地址写为0x00000,下面勾选40mhz QIO 8Mbit点击start下载即可 二.本地部署mqtt服务器(windows) 1.下载mosquitto后有一个m…

数据驱动下的SaaS渠道精细化运营:提升ROI的实战指南

在当今数字化转型的大潮中,SaaS(Software as a Service)企业面临着日益激烈的市场竞争。为了在市场中脱颖而出,实现可持续增长,SaaS企业必须转向更为精细化的运营模式,而数据驱动则是实现这一目标的关键。本…

NoSQL 非关系型数据库 Redis 的使用:

redis是基于内存型的NoSQL 非关系型数据库,本内容只针对有基础的小伙伴, 因为楼主不会做更多的解释,而是记录更多的技术接口使用,毕竟楼主不是做教学的,没有教学经验。 关于redis的介绍请自行搜索查阅。 使用redis数据…

Java后端每日面试题(day3)

目录 Spring中Bean的作用域有哪些?Spring中Bean的生命周期Bean 是线程安全的吗?了解Spring Boot中的日志组件吗? Spring中Bean的作用域有哪些? Bean的作用域: singleton:单例,Spring中的bean默…

一种频偏估计与补偿方法

一种简易的频偏估计补偿方法,使用QAM等信号。估计精度受FFT长度限制,可以作为粗频偏估计。 Nfft 1024; % FFT长度 N 10*Nfft; % 仿真符号数 M 16; % 调制QAM16 freq 1e…

PDF合并怎么做?分享几种简单好用的PDF合并方法

PDF文件以其良好的兼容性和稳定的格式,成为了我们日常办公、学习不可或缺的一部分。然而,随着PDF文件的不断增多,如何高效管理这些文件,特别是如何将多个PDF文件合并成一个,成为了许多人头疼的问题。下面给大家分享几款…