SELF自动化指令集构建代码实现

SELF-Instruct

  • paper: 2022.12, SELF-INSTRUCT: Aligning Language Model with Self Generated Instructions

  • https://github.com/yizhongw/self-instruct

  • https://github.com/tatsu-lab/stanford_alpaca#data-generation-process

  • 一语道破天机:类似非线性插值,通过LLM的生成多样性做Bootstrap对种子指令集进行不定向扩充

上一步我们依赖APE得到了种子指令集,但是丰富度和多样性是远远不够的。这里SELF提出了一种Bootstrap方案来让LLM基于种子指令生成新的指令的指令扩充方案。这个方案也后续被用于Alpaca项目中生成微调指令集,主要包括以下3个步骤

1. 新指令生成

首先作者人工构建了175个种子指令,这些种子指令由1条指令和1个样本构成。每个Step作者会从中采样8个指令,其中6个来自以上种子,2个来自LLM生成的指令,当然step1全部都是种子指令。然后基于如下的prompt模板构建模型输入

"""
Come up with a series of tasks:
Task 1: {instruction for existing task 1}
Task 2: {instruction for existing task 2}
Task 3: {instruction for existing task 3}
Task 4: {instruction for existing task 4}
Task 5: {instruction for existing task 5}
Task 6: {instruction for existing task 6}
Task 7: {instruction for existing task 7}
Task 8: {instruction for existing task 8}
Task 9:
"""

如果你看着这个模板,感觉和ChatGPT的模板格格不入,那就对了。因为作者是基于GPT3实现的,就是那个天真的续写模型。

而Alpaca项目在使用SELF构建指令样本时升级到了davinci-003模型,因为模型可以更好的理解指令,因此以上纯few-shot的prompt模板也改成了如下(用ChatGPT翻成了中文),同时输入的few-shot数量缩减到了3个

"""
你需要想出20个不同的任务指令。这些任务指令将输入GPT模型,我们将评估GPT模型完成指令的情况。
以下是要求:
1. 尽量不要在每个指令中重复使用动词,以最大化多样性
2. 指令的表达形式需要多样化。例如你可以把问题和祈使句结合起来
3. 指令的类型应该多样化,包括但不限于开放式生成、分类、抽取、问答、文本编辑等等
4. 指令应该是GPT模型可以完成的任务。例如,指令不能是输出图像或者视频,另一个例子,不要让助手在下午5点叫醒你或设置提醒,因为GPT不能执行任何动作
5. 指令必须是中文
6. 指令应该是1到2句话,可以是祈使句或问句。
20个任务的列表:
"""

我第一遍读完SELF是一脑门子问号

1.jpg

后来我(似乎&努力)说服了自己,就是LLM做了类似非线性差值的工作,因为每个Step都会采样不同的指令作为上下文,而模型也会根据随机采样得到的不同的上下文融合出新的指令。

2. 样本生成

只有指令还不够,还需要生成指令对应的输入和输出。在SELF原论文中,作者多加了一步分类任务,也就是让LLM先判断指令本身是否为分类任务,如果是则先生成输出,再生成输入。如果否则先生成输入再生成输出。原因是作者发现,对于分类任务模型倾向于只生成其中一个标签的输入。

但在Alpaca项目中,因为模型升级到Davinci-003,以上问题也似乎不再显著。并且随着模型输入长度变长,Alpaca直接把生成样本和生成指令的步骤合在了一起,一步到位。于是以上指令生成的模板被扩充成了以下

"""
7. 你应该为指令生成一个合适的输入。输入字段应该包含为指令提供的一个具体示例。它应该涉及真实的数据,而不应该包含简单的占位符。输入应该提供足够的内容,使指令具有挑战性,但理想情况下不应超过100个单词。
8. 不是所有的指令都需要输入。例如,当一个指令询问一些一般信息时,“世界上最高的山峰是什么”,就不需要提供具体的上下文。在这种情况下,我们只需在输入字段中放置“<无输入>”。
9. 输出应该是对指令和输入的合适回应。确保输出少于100个单词。
20个任务的列表:
"""

于是每一步其实是直接生成指令,以及指令对应的输入和输出样本。对于自由生成类的任务,也支持没有输入只有输出。

3. 过滤和后处理

针对以上生成的指令和样本还需要进行一些系列的后处理,主要包括模型预测解析,不合理指令的过滤,以及相似指令的过滤,解析的部分建议直接看代码

  1. 不可用指令过滤

  • 因为输出长度被截断的指令:response停止原因是length,则过滤最后一个指令

  • 过滤包含不可用关键词的指令:例如图片,音频等GPT模型无法完成的任务

  • 过滤过长,过短的指令

  • 过滤指令前几个字非英文/中文的指令

  1. 相似指令过滤

为了保证指令集的多样性,每轮都会计算新生成指令和已有指令的Rouge-L相似度,也就是摘要任务评估中用最长公共子串的长度计算的F值。只保留F值小于0.7的新的指令。同时也可以根据最近几轮生成指令的整体相似度,来判断是否要停止生成。

我用上面APE生成的4个医学NLP任务作为种子指令集,每轮采样2个人工,1个机器指令作为few-shot,生成2个新的指令任务。我对以上指令做了些调整,限制只生成医学领域的任务,得到了如下的结果。哈哈我决定去给账户充钱了。。。

img

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

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

相关文章

plt.animation绘制动画

目录 一&#xff1a;介绍 二&#xff1a;创建线动画 一&#xff1a;介绍 matplotlib.animation 是 Matplotlib 库中的一个模块&#xff0c;用于创建动画。它提供了多种工具和函数&#xff0c;使您能够轻松地创建各种类型的动画。 二&#xff1a;创建线动画 import numpy as…

【Linux】第三十站:进程间通信

文章目录 一、是什么二、为什么三、怎么办四、管道1.什么是管道2.管道的原理3.接口4.编码实现5.管道的特征6.管道的四种情况 一、是什么 两个或者多个进程实现数据层面的交互 因为进程独立性的存在&#xff0c;导致进程通信的成本比较高 通信是有成本的&#xff0c;体现在要打破…

【禅道】的介绍及安装使用

文章目录 一、禅道入门1.1 概述1.2 特点1.2.1 私有化部署&#xff08;禅道&#xff09;&#xff1a;1.2.2 SaaS云部署&#xff08;云禅道&#xff09;&#xff1a; 1.3 安装1.4 启动禅道 二、禅道的使用2.1 编辑公司信息2.2 搭建组织架构2.2.1 创建部门2.2.2 增加员工 2.2 产品…

Solana Mobile开启第二代Saga手机预售,怎么购买Solana Mobile?

PANews 1月17日消息&#xff0c;Solana Mobile官方宣布开启其第二代Saga手机&#xff08;Chapter 2&#xff09;的预售&#xff0c;预购押金为450美元&#xff0c;预计将于2025年上半年发货。同时&#xff0c;Chapter 2的发售将会包括推荐&#xff08;Referrals&#xff09;和积…

用MATLAB函数在图表中建立模型

本节介绍如何使用Stateflow图表创建模型&#xff0c;该图表调用两个MATLAB函数meanstats和stdevstats。meanstats计算平均值&#xff0c;stdevstats计算vals中值的标准偏差&#xff0c;并将它们分别输出到Stateflow数据平均值和stdev。 请遵循以下步骤&#xff1a; 1.使用以下…

sql570 | 至少有5名下属的经理 | join on | group by | having

讲给一张表&#xff0c;表字段分别为 id 、姓名、部分、经理id&#xff0c;可能存在张三既是下属也是经理 现在找出下属起码有5名员工的经理 CREATE TABLE Employee (id INT,name VARCHAR(255),department VARCHAR(255),managerId INT );INSERT INTO Employee (id, name, depar…

数据库的内连接和外连接

数据库的内连接和外连接 内连接: 两个或两个以上的表进行关联查询时&#xff0c;查询的结果集中 返回所有满足连接条件的行。 外连接: 两个或两个以上的表进行关联查询时&#xff0c;查询的结果集中 除了返回满足连接条件的行以外&#xff0c;还返回左&#xff08;或右&…

rabbitmq的介绍、使用、案例

1.介绍 rabbitmq简单来说就是个消息中间件&#xff0c;可以让不同的应用程序之间进行异步的通信&#xff0c;通过消息传递来实现解耦和分布式处理。 消息队列&#xff1a;允许将消息发到队列&#xff0c;然后进行取出、处理等操作&#xff0c;使得生产者和消费者之间能够解耦&…

scratch打蝙蝠 2023年12月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

目录 scratch打蝙蝠 一、题目要求 1、准备工作 2、功能实现 二、案例分析

基于SpringBoot Vue博物馆管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Qt拖拽组件与键盘事件

1.相关说明 1.设置widget或view的拖拽和放置模式函数setDragDropMode参数说明&#xff0c;NoDragDrop(无拖拽和放置)、DragOnly(只允许拖拽)、DropOnly(只允许放置)、DragDrop(允许拖拽和放置)、InternalMove(只移动不复制) 2.设置widget或view的放置动作函数setDefaultDropAct…

MacOS X 安装免费的 LaTex 环境

最近把工作终端一步步迁移到Mac上来了&#xff0c;搭了个 Latex的环境&#xff0c;跟windows上一样好用。 选择了 Mactex 做编译&#xff0c;用 Texmaker 做编辑&#xff1b; 1. 下载与安装 1.1 Mactex 下载安装 MacOS 安装和示例 LaTex 的编译器 与 编辑器 编译器使用免费…

Cocos在VsCode中调试-端口安全问题 net::ERR_UNSAFE_PORT

问题: POST http://127.0.0.1:6000/api/login net::ERR_UNSAFE_PORT 原因&#xff1a; 这个错误表明你在尝试使用一个被认为是不安全的端口进行网络请求。通常情况下&#xff0c;浏览器会限制使用一些特定的端口&#xff0c;因为它们被认为是潜在的安全风险。 在这种情况下&a…

IO、NIO、IO多路复用

IO是什么&#xff1f; IO分为两类&#xff0c;它们之间是有区别的&#xff0c;而且有很大的区别&#xff1b;1. 文件系统的IO 也叫本地io&#xff0c;就是和磁盘或者外围存储设备进行读写操作&#xff0c;外围设备有USB、移动硬盘等等&#xff1b;2. 网络的IO 将数据发送给对方…

Jetson Orin Nano使用OpenCV获取视频帧率和帧数的方法

测试过程 首先确认下视频的播放时间 使用cv库来获取帧率和帧数&#xff0c;测试代码如下 import cv2 cap cv2.VideoCapture("xxx.mp4") if not cap.isOpened():print("Cannot open camera")exit()# get default video FPS fps cap.get(cv2.CAP_PROP_F…

Peter算法小课堂—拓扑排序与最小生成树

拓扑排序 讲拓扑排序前&#xff0c;我们要先了解什么是DAG树。所谓DAG树&#xff0c;就是指“有向无环图”。请判断下列图是否是DAG图 第一幅图&#xff0c;它不是DAG图&#xff0c;因为它形成了一个环。第二幅图&#xff0c;它也不是DAG图&#xff0c;因为它没有方向。第三幅…

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析&#xff0c;频繁将前端人员问题指派给后端人员&#xff0c;后端人员问题指派给前端人员&#xf…

pytest log配置

发现用print在console里面打不出来&#xff0c;所以查了一下关于pytest的log配置&#xff0c;记录 首先需要在根目录新建 pytest.ini 如果你只需要使用print打印日志的话&#xff0c;就只需要这样写 [pytest] addopts -s #addopts 是一个配置项&#xff0c;用于指定传递给 p…

hdu 3709 Balanced Number

Balanced Number 题意 定义一个非负整数在第 p p p 位为 p i v o t pivot pivot 的权重为&#xff1a;这个数位的值 \times 这个数位到 p i v o t pivot pivot 的距离 之和。如果在 p i v o t pivot pivot 左边的权重等于在 p i v o t pivot pivot 右边的权重&#xf…

CSS中隐藏页面元素的几种方式和区别

前言、 在平常的样式排版中&#xff0c;我们经常遇到将某个模块隐藏的场景&#xff0c;通过css隐藏的元素方法有很多种&#xff0c;它们看起来实现的效果是一致的&#xff0c;但实际上每一种方法都有一丝轻微的不同&#xff0c;这些不同决定了在一些特定场合下使用哪一种方法。…