DAIL-SQL:LLM在Text-to-SQL任务中的详细评估

导语

本文聚焦于利用LLMs进行Text-to-SQL任务,并指出缺乏系统性基准测试限制了有效、高效和经济的LLM-based Text-to-SQL解决方案的发展。研究者首先系统地比较了现有的提示工程方法,并分析了它们的优缺点。基于这些发现,提出了一个新的综合解决方案,名为DAIL-SQL,该解决方案在Spider排行榜上以86.6%的执行准确率刷新了SOTA。

  • 标题:Text-to-SQL Empowered by Large Language Models: A Benchmark Evaluation
  • 链接:https://arxiv.org/pdf/2308.15363.pdf

1 简介

Text-to-SQL任务是将自然语言问题转换成SQL查询,这对自然语言处理和数据库领域都是一项挑战。近年来,大型语言模型(LLMs)成为Text-to-SQL任务的新范式。特别是,GPT-4实现了在Spider排行榜上85.3%的执行准确率。尽管已有研究取得进展,但LLM基础的Text-to-SQL解决方案的提示工程缺乏系统性研究。目前研究集中在问题表示、示例选择和示例组织上,以适应LLM的偏好和性能。

与OpenAI LLMs相比,开源LLMs的性能和上下文理解能力相对有限,需要通过监督式微调来提升。效率是LLM基础Text-to-SQL的另一个关键挑战,尤其是在使用多个示例的上下文学习提示时。

为了应对这些挑战,本研究旨在提供一个全面、系统和公平的LLM基础Text-to-SQL的基准评估。具体包括:

  • 全面评估提示工程策略:对不同LLMs下的多种问题表示、示例选择和组织策略进行实证评估。
  • 探索开源LLMs的潜力:研究不同开源LLMs在上下文学习和监督式微调中的应用。
  • 强调提示工程的token效率:评估不同策略在Token效率方面的表现,寻找成本效率高的策略。
  • 提出新的解决方案DAIL-SQL:该方案在Spider排行榜上刷新了记录,达到86.6%的执行准确率,成为新的领先方案。

2 预备知识

Text-to-SQL的目标是将自然语言问题自动转换成SQL查询,促进了智能数据库服务、自动数据分析和数据库问答等应用的发展。由于理解自然语言问题和生成正确SQL查询的难度,Text-to-SQL仍然是一个充满挑战的任务。最初的研究集中于用预定义规则、查询枚举或将其视为序列到序列任务来解决Text-to-SQL任务。随着深度学习的迅速发展,例如注意力机制、图表示、语法解析等技术被应用于Text-to-SQL任务。BERT是Text-to-SQL领域广泛使用的技术之一,在当时取得了最佳性能。

随着大型语言模型(LLMs)的兴起,如GPT-4和LLaMA等LLMs成为自然语言处理和机器学习的新里程碑。LLMs是在大量文本语料上预训练的,能够执行各种自然语言任务。其操作原理是基于输入提示逐步产生概率最高的下一个词。在用LLMs处理Text-to-SQL任务时,关键是找到最佳的提示(Prompt)。根据在提示中提供的示例数量,提示工程分为零次示例(Zero-shot)和少次示例(Few-shot)场景。零次示例场景的挑战是有效地表示自然语言问题,包括数据库模式等相关信息。少次示例场景下,除了问题表示,还需要研究如何选择最有帮助的示例并适当地组织它们。LLMs通过上下文学习从输入提示中识别显式或隐含的模式,并生成相应的输出。尽管以前的研究证明LLMs在零次和少次示例场景下有效,但通过监督式微调,可以进一步提升它们的性能。

本文将对Text-to-SQL的问题表示上下文学习监督式微调进行系统性研究和讨论,这些是基于大型语言模型的Text-to-SQL的三个关键要素。

3 方法

本节重点关注问题表示、上下文学习和监督式微调这三个方面。在这一部分,将为这三个问题提供正式定义,系统地回顾它们现有的解决方案,并指出现有技术中的潜在问题。为了解决这些问题,本文提出了一种新的Text-to-SQL提示工程方法,名为DAIL-SQL,该方法刷新了Spider排行榜上的最佳性能,达到了86.6%的执行准确率。

3.1 问题表示

在零次示例场景下,我们首先讨论Text-to-SQL的问题表示。考虑到针对特定数据库D的自然语言目标问题𝑞,问题表示的目标是最大化LLM模型M生成正确SQL的可能性:

image.png

其中函数𝜎(·, ·)决定了目标问题𝑞的表示方式,以及数据库D的模式中的有用信息。此外,𝜎(·, ·)还可以包括指令语句、规则含义和外键信息。

image.png

本文调查了零次示例场景下的不同𝜎选择,并从文献中选择了五种最具代表性的方法进行比较。

  • Basic Prompt ( B S P BS_P BSP ):是一个简单的表示,如清单1所示。它包含表模式、以“Q:”为前缀的自然语言问题和以“A: SELECT”为前缀的响应,以提示LLM生成SQL。
  • Text Representation Prompt ( T R P TR_P TRP ):如清单2所示,文本表示提示用自然语言表示模式和问题。与基础提示相比,它在提示的最开始添加了指令来指导LLM。
  • OpenAI Demostration Prompt ( O D P OD_P ODP ):OpenAI演示提示(清单3)首次用于OpenAI的官方Text-to-SQL演示。它包括指令、表模式和问题,所有信息都由井号“#”注释。与文本表示提示相比,OpenAI演示提示中的指令更具体,规则为“只完成sqlite SQL查询且不提供解释”
  • Code Representation Prompt ( C R P CR_P CRP ):代码表示提示以SQL语法呈现Text-to-SQL任务。具体来说,如清单4所示,它直接呈现“CREATE TABLE” SQL,并在注释中用自然语言问题提示LLM。与其他表示相比,CR 𝑃因其提供数据库创建所需的全面信息(如列类型和主/外键)而脱颖而出。
  • Alpaca SFT Prompt ( A S P AS_P ASP ):Alpaca SFT提示是为监督微调设计的提示[47]。如清单5所示,它提示LLM遵循指令,并根据Markdown格式的输入上下文完成任务。

image.png

image.png

image.png

表1总结了这五种表示方法,并列出了它们在原始论文中的详细信息。注意到,由于不同表示法在不同LLM上进行实验,并集成到不同框架中,这使得它们难以进行公平且有效的比较。此外,外键信息和规则含义等单个组件的具体作用仍然不清楚。因此,进行系统性研究以更好地了解问题表示,并通过公平比较研究它们的优缺点是必要的。

3.2 上下文学习

上述问题表示方法使LLM能够通过零次学习直接输出期望的SQL。然而,通过上下文学习,LLM可以在Text-to-SQL任务中表现得更好,其中在输入提示中只提供少数示例。因此,在这一小节中讨论上下文学习的关键点:示例选择和示例组织。首先给出上下文学习的公式化,以便于进一步讨论。

image.png

Text-to-SQL的上下文学习涉及选择最有帮助的示例 Q ′ Q' Q,并决定如何将这些选定示例的信息组织到提示中。接下来,我们将讨论这两个子任务:示例选择和示例组织。

3.2.1 示例选择

这里总结了以前研究中的各种示例选择策略:

  • 随机:这种策略从可用候选者中随机抽样𝑘个示例。
  • 问题相似性选择( Q T S S QTS_S QTSS:选择与目标问题最相似的𝑘个示例。
  • 掩蔽问题相似性选择( M Q S S MQS_S MQSS:通过掩蔽所有问题中的表名、列名和值来消除特定领域信息的负面影响,然后计算它们的嵌入相似度。
  • 查询相似性选择( Q R S S QRS_S QRSS:选择与目标SQL查询相似的𝑘个示例。

上述策略只关注使用目标问题或查询选择示例。然而,根据以前的研究,上下文学习本质上是从类比中学习。在Text-to-SQL的情况下,目标是生成与给定问题匹配的查询,因此LLM应该学习从问题到SQL查询的映射。因此,本文指出,在示例选择期间,考虑问题和SQL查询可能有助于Text-to-SQL任务。

3.2.2 示例组织

示例组织在决定上述选定示例的哪些信息将被组织到提示中发挥着关键作用。将现有研究中的策略归纳为两类(见下图):

  • 完整信息组织(Full-Information Organization F I O FI_O FIO ))
  • 仅SQL组织(SQL-Only Organization S O O SO_O SOO )。

image.png

3.3 DAIL-SQL

为解决示例选择和组织中提到的问题,本节提出了一种新的Text-to-SQL方法,命名为DAIL-SQL。在示例选择方面,受 M Q S S MQS_S MQSS Q R S S QRS_S QRSS的启发,提出了DAIL选择( D A I L S DAIL_S DAILS),考虑问题和查询来选择候选项。具体来说:

  1. DAIL选择首先在目标问题 q q q和候选集 Q Q Q中的示例问题 q i q_i qi中屏蔽特定领域的词汇。
  2. 根据屏蔽后的 q q q q i q_i qi的嵌入之间的欧几里得距离对候选示例进行排序。同时,计算预先预测的SQL查询 s ′ s' s Q Q Q中的 s i s_i si之间的查询相似度。
  3. 选择标准优先考虑按问题相似度排序的候选项,并且查询相似度大于预定义阈值𝜏。

这样,选定的前𝑘个示例在问题和查询上都具有良好的相似性。

在组织方面,本文提出了一种新的示例组织策略DAIL组织( D A I L O DAIL_O DAILO),在质量和数量上进行权衡。具体而言, D A I L O DAIL_O DAILO呈现了问题 q i q_i qi和相应的SQL查询 s i s_i si,如清单8所示。作为 F I O FI_O FIO S O O SO_O SOO之间的折中方案, D A I L O DAIL_O DAILO保留了问题-SQL映射,并通过删除代价昂贵的数据库模式来减少示例的token长度。

DAIL-SQL选择 C R P CR_P CRP作为问题表示方式,因为它提供了数据库的全面信息,包括对于LLMs重要的主键和外键信息。这有助于LLMs更好地理解提示并生成准确的SQL查询。

总体而言,DAIL-SQL通过其独特的问题表示和智能的示例选择与组织,有效地提高了Text-to-SQL任务的性能,实现了Spider排行榜上86.2%的执行准确率。DAIL-SQL还可以与其他组件集成,例如加入自我一致性策略以进一步提高性能,达到86.6%的执行准确率,尽管这会带来更高的时间和成本开销。

3.4 监督式微调

为了增强LLM在零次示例场景中的性能,Text-to-SQL方法的流行选择是上下文学习。作为一个有前途的替代选择,监督式微调迄今为止还未被广泛探索。与其他语言任务的监督式微调类似,我们可以将其应用到Text-to-SQL领域,提高LLM在这个下游任务上的性能。这里首先提供一个简要的公式化定义。

给定一个大型语言模型 M M M和一组Text-to-SQL训练数据 T = ( q i , s i , D i ) T = {(q_i, s_i, D_i)} T=(qi,si,Di),其中 q i q_i qi是自然语言问题, s i s_i si是对应的数据库 D i D_i Di上的查询,SFT的目标是最小化经验损失函数L,该函数衡量生成的查询与真实查询之间的差异。这一过程涉及两个子任务:使用监督数据T对给定的LLM M M M进行微调以获得优化后的LLM M ∗ M_∗ M,以及寻找最佳的问题表示方式𝜎。

image.png

在数据准备和微调过程中,研究者使用特定于Text-to-SQL的数据集T生成<提示-响应>对,将目标问题和给定数据库作为提示,将期望的查询作为LLM的响应。微调后,优化的LLM M ∗ M_∗ M可用于推理,即通过自然语言问题生成查询。值得注意的是,在微调和推理过程中都使用相同的问题表示方式𝜎。研究将进行一系列实验,并探讨SFT在Text-to-SQL中的巨大潜力。

image.png

4 实验

4.1 设置

  • 数据集:使用Spider和Spider-Realistic数据集进行评估。
  • 度量标准:使用准确匹配度(EM)和执行准确度(EX)进行评估。
  • LLM:确保所有方法使用相同的最大上下文长度(OpenAI LLMs为4096,开源LLMs为2048)。实验中留出200个token用于生成回应。

image.png

4.2 问题表示

  • 评估了不同的问题表示方法:在零样本场景下,测试不同的问题表示方法,使用GPT-4, GPT-3.5-TURBO, TEXT-DAVINCI-003, 和Vicuna-33B。
  • 发现 O D P OD_P ODP 在所有LLMs中表现最佳,尤其是与GPT-3.5-TURBO结合时。
  • 外键和规则暗示的影响:外键对执行准确度的提高有显著影响,而“无解释”规则则普遍提升了所有LLMs的性能。

image.png

4.3 上下文学习

  • 实验设置:使用 C R P CR_P CRP 作为问题表示,测试了不同的样本选择和组织策略,使用GPT-4, GPT-3.5-TURBO, TEXT-DAVINCI003, 和Vicuna-33B。
  • 样本选择 D A I L S DAIL_S DAILS 在选择策略中表现最佳。
  • 样本组织 D A I L O DAIL_O DAILO 在GPT-4上表现最佳,证明其有效性。

image.png

4.4 监督式微调

  • 开源LLM:对开源LLMs(如LLaMA)进行了全面评估,发现在零样本和少样本场景中表现不佳。
  • 监督式微调:对开源LLMs进行微调后,性能大幅提升,但在添加上下文样本后性能降低。

image.png

4.5 Token效率

  • 对比分析:在零样本和有样本场景中分析了不同LLMs的Token效率。
  • DAIL-SQL:与其他最先进的方法相比,DAIL-SQL在准确度和效率方面都有更好的表现。

image.png

5 讨论

主要洞见和指导原则

  • 问题表示:推荐使用代码表示提示(Code Representation Prompt)和OpenAI演示提示(OpenAI Demostration Prompt),并且额外信息如外键和规则暗示对提升性能很有帮助。
  • 示例选择:自然语言问题和SQL查询的相似性都很重要。这两个相似性指标共同构成了设计有效选择策略的良好指标。
  • 示例组织:如果采用的LLM足够强大(如GPT-4),则展示问题和SQL查询对是有效且高效的选择。否则,建议展示包含完整信息的示例。
  • 开源LLM:更多参数的LLM对Text-to-SQL任务有益,但训练语料的作用更为关键。此外,监督式微调对Text-to-SQL任务非常必要且具有巨大潜力。

本文局限性

由于资源限制,本文仅测试了两种规则暗示,更多规则的探索可以进一步促进基于LLM的Text-to-SQL解决方案。同时仅使用Spider训练集对开源LLM进行微调,更多Text-to-SQL数据将进一步增强LLM性能。Spider和Spider-Realistic的数据库可能不够大,如果Text-to-SQL任务中涉及大量表格,可能会出现新的有效性和效率挑战。当前评估指标更注重正确性而非效率,鼓励LLM在正确的SQL选项中生成更高效的SQL是一个重要且未探索的问题。

6 总结

本文对基于大型语言模型(LLM)的Text-to-SQL进行了系统性研究,涵盖了提示工程(prompt engineering)和监督式微调(supervised fine-tuning)两个方面。作者指出,现有的Text-to-SQL的在情境中学习(in-context learning)技术忽视了问题与查询之间的映射关系,以及示例质量与数量之间的权衡。为解决这些问题,本文提出了一种新的提示工程方法,命名为DAIL-SQL,它以86.6%的执行准确率刷新了Spider排行榜,并位居第一。关于监督式微调,本文展示了开源LLM在Text-to-SQL中的巨大潜力,强调了训练语料和模型规模的重要性,并指出微调后在情境学习能力的衰退。此外,还对现有解决方案在效率方面进行了观察,表明DAIL-SQL更为高效,并强调了在提示工程中Token效率的重要性。所有这些都是未来研究的开放挑战和机遇。作者希望这些工作能够提供一个关于Text-to-SQL的全面研究,为实际应用提供一些指导,并帮助人们推进其前沿。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高等数学基础【1】极限与连续

第一节 函数 一、基本概念 ①函数 设变量x的取值范围为D,若对任意的x∈D,按照某种对应关系总有唯一确定的值y与x对应,称y为x的函数,记为yf(z),其中D称为函数yf(x)的定义域 ②复合函数 设uφ(x)(x∈D1),yf(u)(u∈D,),且对任意的x∈D1有φ(x)∈D2,称y为x的复合函数,记为yf[φ…

iText操作pdf

最近有个任务是动态的创建pdf根据获取到的内容&#xff0c;百度到的知识点都比较零散&#xff0c;官方文档想必大家也不容易看懂。下文是我做出的汇总 public class CreatePdfUtils {public static void create(){//准备File file new File("C:\\code\\base-project-back…

pytorch学习笔记(十二)

以下代码是以CIFAR10这个10分类的图片数据集训练过程的完整的代码。 训练部分 train.py主要包含以下几个部件&#xff1a; 准备训练、测试数据集用DateLoader加载两个数据集&#xff0c;要设置好batchsize创建网络模型&#xff08;具体模型在model.py中&#xff09;设置损失函…

【大数据】Flink SQL 语法篇(三):窗口聚合(TUMBLE、HOP、SESSION、CUMULATE)

Flink SQL 语法篇&#xff08;三&#xff09;&#xff1a;窗口聚合 1.滚动窗口&#xff08;TUMBLE&#xff09;1.1 Group Window Aggregation 方案&#xff08;支持 Batch / Streaming 任务&#xff09;1.2 Windowing TVF 方案&#xff08;1.13 只支持 Streaming 任务&#xff…

自己实现的小功能

小功能实现 2024/1/31 问题一&#xff1a; 将文本模式的csv文件作为表编辑之后&#xff0c;先要再变回来。找了5分钟都没找到&#xff0c;去网上搜也没搜到 解决方案 复制一份&#xff0c;对没错。 不是把表遍历一遍&#xff0c;重新将数据写入。 3.5给的答案就是重新写入…

网络防御基础介绍和基本的策略集

1.什么是防火墙 防火墙的主要职责在于&#xff1a;控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之后做出对应的动作。 2.防火墙的分类 防火墙吞吐量 --- 防火墙同一时间处理的数据量 3.防火墙的历史 4.防火墙的分类 1.基于数据包的防火墙-包过滤防火墙 缺…

深度学习(9)--pydot库和graphviz库安装流程详解

目录 一.pydot库安装 二.graphviz库安装 一.pydot库安装 pydot的安装可直接在编译器安装相关包&#xff0c;以PyCharm举例&#xff1a; 如果搜索可用软件包显示为空&#xff0c;记得在此处把使用Conda软件包管理器”点亮 二.graphviz库安装 点击链接下载安装包graphviz-2.38…

网络协议与攻击模拟_11DHCP欺骗防护

开启DHCP 监听 ip dhcp snooping 指定监听vlan ip dhcp snooping vlan 1 由于开启监听后&#xff0c;交换机上的接口就全部变成非信任端口&#xff0c; 非信任端口会拒绝DHCP报文&#xff0c;会造成正常的DHCP请求和响应都无法完成。 现在是请求不到IP地址的&#xff0c;…

字符串匹配算法(BF、KMP)

一 字符串匹配算法—BF算法 BF算法简称暴力破解算法&#xff0c;时间复杂度很容易计算为O&#xff08;m*n&#xff09;(当n>>m时候) 本身字符串S&#xff0c;长度为m 模式字符串T,长度为n 最差情况&#xff0c;需要匹配(n-m)mm才可以成功&#xff0c;所以时间复杂度就是…

tarojs View多行文本无法换行问题解决

问题&#xff1a;未换行 code&#xff1a; 解决&#xff1a; 加上换行属性的css就好了 white-space: break-spaces;

银行ATM监控对讲系统分机可视对讲分机|ATM音视频终端IP网络可视对讲终端IP对讲终端对讲分机IP网络对讲系统

SV-6301T可视对讲终端 &#xff08;单键&#xff09; 产品简介 产品简介&#xff1a; 一键报警可视对讲终端是用于平安城市、银行、医院&#xff0c;智慧养老&#xff0c;景区&#xff0c;智慧路灯&#xff0c;平安校园&#xff0c;智慧电梯&#xff0c;无人超市等方案中的一…

哈希表算法模版

模拟散列哈希表 活动 - AcWing 拉链法 思路&#xff1a; 代码如下&#xff1a; #include <cstring> #include <iostream>using namespace std;const int N 1e5 3; // 取大于1e5的第一个质数&#xff0c;取质数冲突的概率最小 可以百度//* 开一个槽 h int h[…

jmeters响应结果反写csv文件及参数化

1.http响应结果反写csv文件 1.1各参数设置级别 线程组&#xff08;一级&#xff09;---->请求默认值、请求头、http请求、察看结果树&#xff08;二级&#xff09;----->正则表达式、BeanShell 后置处理程序&#xff08;三级&#xff09;。 1.2.正则表达式提取反写参数…

Backtrader 文档学习-Cheat-On-Open

Backtrader 文档学习-Cheat-On-Open 1.概述 V1.9.44.116增加了Cheat On Open的支持。对于全押的人来说&#xff0c;这似乎是一个必需的功能&#xff0c;用bar的收盘价后进行计算&#xff0c;希望与开盘价相匹配。 当开盘价差距&#xff08;上涨或下跌&#xff0c;取决于买入或…

SpringClound项目相关

nacos本机模式非虚拟机启动也可正常连接 nacos中的配置中心相当于在application.yml中的相关配置&#xff0c;转移位置&#xff0c;内容同application.yml完全一样均可。 黑马项目导入后&#xff0c;依赖缺失&#xff1a; 首先尝试maven重新加载&#xff0c;控制台提示传递依…

聊一聊GPT、文心、通义、混元

我使用同一个Prompt提示词“请以记叙文的文体来写”&#xff0c;分别发送给GPT-3.5&#xff08;调用API&#xff09;、文心、通义、混元&#xff0c;下面是它们各自生成的文本内容&#xff0c;大家一看便知了。 GPT-3.5&#xff1a; 在我个人使用GPT模型的过程中&#xff0c;我…

ESP32-C3 vscode USB-Serial-JTAG 调试

硬件 接线 查看驱动 vs code配置 debugging via builtin USB-JTAG 配置调试UART 配置下载类型 创建调试配置 调试 参考 esp32c3内置USB-Serial-JTAG的使用 链接: link 看了之后&#xff0c;还是不会ESP32-C3的调试及下载&#xff0c;你过来打我&#xff01;&#xff01;&…

KAFKA高可用架构涉及常用功能整理

KAFKA高可用架构涉及常用功能整理 1. kafka的高可用系统架构和相关组件2. kafka的核心参数2.1 常规配置2.2 特殊优化配置 3. kafka常用命令3.1 常用基础命令3.1.1 创建topic3.1.2 获取集群的topic列表3.1.3 获取集群的topic详情3.1.4 删除集群的topic3.1.5 获取集群的消费组列表…

微信小程序之下拉刷新事件、上拉触底事件和案例

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

【方法】RAR分卷压缩文件如何打开?

当RAR压缩文件比较大&#xff0c;不利于传输时&#xff0c;我们可以把文件压缩成分卷文件&#xff0c;那压缩后的分卷文件如何打开呢&#xff1f;今天就来说说RAR分卷压缩文件的两种打开方法。 方法一&#xff1a; 和普通压缩包一样&#xff0c;打开分卷压缩包也需要用到解压…