Text-to-SQL小白入门(四)指令进化大模型WizardLM

news2024/11/18 9:24:53

摘要

本文主要对大模型WizardLM的基本信息进行了简单介绍,展示了WizardLM取得的优秀性能,分析了论文的核心——指令进化方法。

论文概述

基本信息

  • 英文标题:WizardLM: Empowering Large Language Models to Follow Complex Instructions
  • 中文标题:WizardLM:授权大型语言模型遵循复杂的指令
  • 发表时间:2023年4月-arxiv
  • 作者单位:北京大学 & 微软
  • 论文链接:https://arxiv.org/abs/2304.12244
  • 代码链接:GitHub - nlpxucan/WizardLM: Family of instruction-following LLMs powered by Evol-Instruct: WizardLM, WizardCoder and WizardMath

摘要

  • 论文展示了使用LLM而不是人工来创建具有不同复杂程度的大量指令数据的途径。
  • 从一组初始指令开始,通过进化指令逐步将它们重写为更复杂的指令。然后,将生成的所有指令数据进行混合来微调LLaMA。
  • 论文将生成的模型称为WizardLM
  • 在复杂平衡测试平台和Vicuna测试集上的人类评估表明,来自evolution - instruct的指令优于人类创造的指令。
  • 通过分析高复杂性部分的人工评估结果,论文证明了WizardLM模型的输出比OpenAI,ChatGPT的输出更受欢迎。在GPT-4自动评估中,WizardLM在29项技能中的17项达到了ChatGPT 90%以上的能力

WizardLM模型性能优越,可以作为text2sql的基座模型,github上有个DB-GPT-Hub项目开源了大模型微调text2sql的pipline,模型支持也有WizardLM模型(这是DB-GPT项目的子项目),其中提供了数据集下载-数据集预处理-模型下载-模型微调-模型权重合并-模型预测-模型评估,如果没有GPU可以使用AutoDL平台按需使用。

  • DB-GPT项目:目前已有6.4k star,可以关注一波,目前该项目最新版本——DB-GPT V0.3.7 发布,支持用自然语言分析和查询Excel表格数据

  • DB-GPT_Hub项目:目前有200多star,专注于text2sql大模型微调领域,大家也可以去贡献代码,比如模型支持里面也有WizardLM

WizardLM模型的思想值得借鉴,后面还有模型Code Llama更加出色,后面再介绍。

结果

收集测试集

  • 网上收集的指令测试集:总共218个例子,分成了29项类别,比如有数学math、代码生成、写作等等。
  • 图3a说明了测试集中实例和技能的分布。测试集由218个实例组成,每个实例都是针对特定技能的指令。
  • 图3b比较了和Vicuna小羊驼、Alpaca羊驼

人工打分评估

为了评估WizardLM,在evolution - directive测试集上进行了人类评估。我们在WizardLM和基线之间进行盲两两比较。具体来说,招募了10名受过良好教育的注释员。对于每个注释者,提供了来自Alpaca、Vicuna-7b、WizardLM和ChatGPT的四个响应,这些响应被随机打乱以隐藏其来源。然后评注者根据附录h中的标准判断哪一个回答更好,然后他们应该将四个回答从1到5进行排序(1表示最好),并允许同等分数的可比较实例。

  • 比如图4a中Evol-Instruct testset数据集上,跟ChatGPT相比,WizardLM赢了61次,ChatGPT赢了89次,平局68次。(总共218)

GPT4自动评估

  • 如图5a和5b所示,WizardLM-78.0%在evolo-instruct测试集上的性能明显优于Alpaca-7B-71.8%和Vicuna-7B-72.2%(分别优于Alpaca-7B和Vicuna-7B的性能6.2%和5.8%)

  • 图6比较了WizardLM和ChatGPT在evolution - directive测试集上的技能水平。结果表明,WizardLM的平均性能达到了ChatGPT的78%,17项技能的容量几乎超过了90%。然而,WizardLM在代码、数学和推理场景方面遇到了困难,显示出与ChatGPT的明显差距。(所以后面有WizardCoder)

结论

本文提出了一种进化算法——evolution-directive,用于生成多种复杂的LLM指令数据。论文证明提出的方法提高了LLM的性能,WizardLM,在高复杂性任务上取得了最先进的结果,在其他指标上取得了具有竞争力的结果。

局限性(评估方法):本文承认我们的自动GPT-4和人工评估方法的局限性。这种方法对可扩展性和可靠性提出了挑战。此外,我们的测试集可能无法代表LLM可以应用或与其他方法进行比较的所有场景或领域。

更广泛的影响。evolo - instruct可以提高LLM在各个领域和应用中的性能和交互性,但它也可能产生不道德、有害或误导性的指令。因此,我们敦促未来对人工智能进化指令的研究,以解决伦理和社会影响。

核心思想

这个图看着还挺有意思的

很简约

图形化很不错

只不过作为模型核心结构会有点懵

instruction data evolution指令数据演化

输入指令I1-instruction,通过LLM得到答复R1-response

输入指令I2-instruction,通过LLM得到答复R2-response

不断迭代

指令I1如何更新为指令2?

  • 通过LLM instruction evolution prompt 指令进化提示词

instruction evolution prompt是什么?

  • 参考下方的指令进化器

Automatic Instruction Data Evolution自动指令数据演化

pipline 分成3个部分:

  • 1)指令进化
  • 2)响应生成
  • 3)消除进化,即过滤无法进化的指令。

指令进化instruction evolution

作者发现LLM可以使用特定的提示使给定的指令变得更加复杂和困难。此外,它们可以生成同样复杂但完全不同的全新指令

利用这一发现,我们可以迭代地进化一个初始指令数据集,提高难度水平,扩大其丰富性和多样性。

1.用给定的初始指令数据集D(0)初始化指令池。

2.在每个进化时期,从前一个时期升级的指令从池中取出。

3.然后利用指令进化器instruction evolver来进化每条获取到的指令,并利用指令消除器instruction eliminator来检查是否存在进化失败的指令。

  • 成功进化的指令被添加到池中
  • 不成功的指令被放回原处,希望在下一个进化时期成功升级它们。

指令进化器instruction evolver

指令进化器是一种LLM,它使用提示来进化指令,有两种类型:深度进化和广度进化

深度进化

深度进化通过五种类型的提示来增强指令的复杂性和难度:

  • 添加约束
  • 使得深度化
  • 使得具体化
  • 增加推理步骤
  • 使输入变得复杂化。

举例子:

  • 这是添加约束add contraints:
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#:
  • 这是Deepening Prompt深化:
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:
If #Given Prompt# contains inquiries about certain issues, the depth and breadth of the inquiry can be increased. or
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#:
  • 这是具体化Concretizing Pormpt:
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 replace general concepts with more specific concepts. or
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#:

  • Increased Reasoning Steps Prompt:
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:
If #Given Prompt# can be solved with just a few simple thinking processes, you can rewrite it to explicitly request multiple-step reasoning.
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#:
  • 这是complicating input:
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.
You must add [XML data] format data as input data in [Rewritten Prompt]
#Given Prompt#:
<Here is Demonstration instruction 1.>
#Rewritten Prompt#:
<Here is Demonstration Example 1.>
... N -1 Examples ...
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.
You must add [#Given Dataformat#] format data as input data, add [#Given Dataformat#] code as input code in [Rewritten Prompt]
Rewrite prompt must be a question style instruction
#Given Prompt#:
<Here is instruction.>
#Rewrite prompt must be a question style instruction Rewritten Prompt(MUST contain a specific JSON data as input#:

广度进化

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#:

生成response

  • 使用与进化相同的LLM来为进化的指令生成相应的响应。生成提示符是" <Here is instruction.> "。

消除进化

有以下4种情况归类为失败:

  • 指令进化失败;与原始指令相比,进化后的指令没有提供任何信息增益。我们使用ChatGPT进行此确定。
  • 进化的指令使得LLM很难产生响应。我们发现,当生成的响应包含“sorry”并且长度相对较短(即少于80个单词)时,它通常表明LLM努力响应进化的指令。所以我们可以用这个规则来做判断。
  • LLM生成的响应只包含标点和停止词。
  • 进化指令显然从进化提示中复制了一些单词,如“给定提示”、“重写提示”、“#重写提示#”等。

baseline

  • ChatGPT
    • OpenAI
    • AI bot
    • 基于GPT-3.5 or GPT-4
  • Alapaca
    • 开源模型,基于LLaMA
    • 斯坦福大学Standford University
  • Vicuna
    • 开源的chat bot
    • 基于LLaMA

参考文献

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

DB-GPT项目:https://github.com/eosphoros-ai/DB-GPT/blob/main/README.zh.md

DB-GPT-Hub项目:GitHub - eosphoros-ai/DB-GPT-Hub: A repository that contains models, datasets, and fine-tuning techniques for DB-GPT, with the purpose of enhancing model performance, especially in Text-to-SQL.

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

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

相关文章

【实践篇】Redis使用规范清单详解

Redis 使用规范清单详解 文章目录 Redis 使用规范清单详解0. 前言参考资料 1. 键值对使用规范1. Key的命名规范2. 避免使用 bigkey2.1. "bigkey"的导致的问题2.2 避免"bigkey"问题解决方法2.2 1. 数据分片2.2.2. 数据压缩 3. 使用高效序列化方法和压缩方法…

jmeter 计数器Counter

计数器可以用于生成动态的数值或字符串&#xff0c;以模拟不同的用户或数据。 计数器通常与用户线程组结合使用&#xff0c;以生成不同的变量值并在测试中应用。以下是计数器的几个常用属性&#xff1a; 变量前缀&#xff08;Variable Name Prefix&#xff09;&#xff1a;定义…

C语言中结构体和位段的一些知识

一、结构体 struct stu {char name[20];//20//对齐数为8int age;//4//两个数中最大对齐数为8&#xff0c;而24又是8的整数倍 }; int main () {printf("%d\n", sizeof(struct stu));//只有vs中有对齐数为8&#xff0c;gcc没有对齐数&#xff0c;对齐数为成员变量自…

【MySQL】MySQL8.0安装教程

下载 MySQL官网下载安装包 安装 1、双击安装程序开始安装 2、选择安装类型 选Server only&#xff08;只安装mysql&#xff09;&#xff0c;然后点击“next”。 3、检测需要的安装&#xff0c; 直接点击Execute开始安装 4、点击next 5、点击next 6、next 7、密码验证方式&a…

EXCEL 中find,if and,if or

接上一篇sql中find函数的作用&#xff0c;由于工作需求是用帆软做报表&#xff0c;他的一些代码不仅有js&#xff0c;sql中的还有一些excel的相关知识&#xff0c;故作整理。 FIND() excel中的find原理和sql中相似&#xff0c;具体可查看 SQL函数 $FIND_Yangshiwei....的博客…

SAP 邮件发送配置

SICF激活服务SCOT邮箱发送配置 具体步骤如下&#xff1a; 1. SICF激活服务 进入事务码&#xff1a; SCIF 选中SAPconnect,右击选中激活SMT机&#xff0c;进行激活 2. SCOT配置邮箱发送设置 进入事务码&#xff1a; SCOT 点开业务通信管理-》设置-》SMTP连接-》出站信息-》…

vscode新建vue3文件模板

输入快捷新建的名字 enter 确认后在文件中输入以下内容 {// Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and// description. The prefix is what is used to trigger the snippet and the body will be expand…

【计算机网络】 静态库与动态库

文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态、动态是指链接。静态库是将整个库文件都拷…

Github 下载指定文件夹(git sparse-checkout)

比如要下载这里的 data_utils 步骤 1、新建空文件夹&#xff0c;并进入新建的空文件夹。 2、git init 初始化 3、git remote add origin 添加远程仓库 4、git config core.sparsecheckout true 允许稀疏检出 5、git sparse-checkout set 设置需要拉取的文件夹&#xff08;可…

Lite transformer

图片以及思想来源请参考论文 Lite Transformer with Long-Short Range Attention 瓶颈结构&#xff08;bottleneck&#xff09;是否真的有效 注意力机制被广泛应用在诸多领域&#xff0c;包括自然语言处理&#xff0c;图像处理和视频处理。它通过计算所有输入元素的点积来建模…

idea 无法识别maven的解决

问题描述 从git拉取代码或者修改文件夹以后&#xff0c;整个项目所有依赖爆红无法通过修改或者重新加载maven解决版本为idea 2021 问题定位 maven的版本太高&#xff0c;而idea的般本太低&#xff0c;导致识别的时候稳定性差 解决 使用idea原生的maven版本 选择已捆绑的m…

Tribon二次开发-tbwautodraw

在Assembly模块中,通过设置和生成,可以在手动的基础上自动生成组立装配图。 1、设置视向,根据组立的具体情况选择,一般横向结构,是向船首看,纵向结构向左舷看,水平结构向下看。 2、在组立节点上右键,选项“Generate Assembly Drawing…” 确保图框A4L_…

无涯教程-JavaScript - DAYS函数

描述 DAYS函数返回两个日期之间的天数。 语法 DAYS (end_date, start_date)争论 Argument描述Required/OptionalEnd_dateStart_date and End_date are the two dates between which you want to know the number of days.RequiredStart_dateStart_date and End_date are th…

C# 基础面试题(万字)

1.选择题 1. 简述下面选项能够捕获运算溢出的异常类型的有 &#xff1f; A)Exception B)SystemException C)ArithmeticException D)OverflowException 试题回答&#xff1a;AD 2. 程序员可使用&#xff08;&#xff09;语句以程序方式引发异常 &#xff1f; A)run B)try C)th…

并发编程的故事——JUC

JUC 文章目录 JUC一、Semaphore二、CountDownLatch三、线程安全类 一、Semaphore 为什么需要用到Semaphore? 限流 Semaphore的场景&#xff1f; 秒杀商品的时候&#xff0c;不能够让那些没有秒杀成功的线程进入&#xff0c;只有占了坑位的才可以使用&#xff0c;这里可以用re…

Myvatis关联关系映射与表对象之间的关系

目录 一、关联关系映射 1.1 一对一 1.2 一对多 1.3 多对多 二、处理关联关系的方式 2.1 嵌套查询 2.2 嵌套结果 三、一对一关联映射 3.1 建表 ​编辑 3.2 配置文件 3.3 代码生成 3.4 编写测试 四、一对多关联映射 五、多对多关联映射 六、小结 一、关联关系映射 …

现货黄金代理好吗?

做黄金代理这个职业好吗&#xff1f;从目前的市场现状来看&#xff0c;其实做黄金代理很不错的。在股票市场中&#xff0c;投资者只能通过买涨进盈利&#xff0c;所以当市场行情不好的时候&#xff0c;股票经纪人的业务将很难展开&#xff0c;而现货黄金投资者不一样&#xff0…

mac 安装java1.8

1、下载jdk1.8 https://www.oracle.com/java/technologies/downloads/#java8-mac 2、 安装jdk1.8 一路默认&#xff0c;安装后的位置在这儿。 /Library/Java/JavaVirtualMachines/jdk-1.8.jdk 3、配置环境 打开终端&#xff0c;输入命令 sudo vim /etc/profile 添加以下配…

经管博士科研基础【19】齐次线性方程组

1. 线性方程组 2. 非线性方程组 非线性方程,就是因变量与自变量之间的关系不是线性的关系,这类方程很多,例如平方关系、对数关系、指数关系、三角函数关系等等。求解此类方程往往很难得到精确解,经常需要求近似解问题。相应的求近似解的方法也逐渐得到大家的重视。 3. 线…

Groovy 下载安装

Groovy 简介 在某种程度上&#xff0c;Groovy 可以被视为Java 的一种脚本化改良版,Groovy 也是运行在 JVM 上&#xff0c;它可以很好地与 Java 代码及其相关库进行交互操作。它是一种成熟的面向对象编程语言&#xff0c;既可以面向对象编程&#xff0c;又可以用作纯粹的脚本语…