首页 > 数据库 >【学习日记3】DAIL-SQL论文:Text-to-SQL Empowered by Large Language Models: A Benchmark Evaluation

【学习日记3】DAIL-SQL论文:Text-to-SQL Empowered by Large Language Models: A Benchmark Evaluation

时间:2024-08-09 09:26:51浏览次数:12  
标签:DAIL 示例 Text 微调 Large LLM SQL

PS:自己回顾用的

ABSTRACT

        大型语言模型(LLMs)已成为 Text-to-SQL 任务的新模式。然而,缺乏系统的基准测试限制了有效、高效和经济的基于 LLM 的 Text-to-SQL 方案的发展。为了解决这一挑战,本文首先对现有的提示工程方法进行了系统且广泛的比较,包括问题表示、示例选择和示例组织,并详细说明了它们的优缺点。基于这些发现,我们提出了一种新的综合解决方案,名为 DAIL-SQL,它以 86.6% 的执行准确率刷新了 Spider 榜单,并设定了新的标准。

        为了探索开源大型语言模型(LLMs)的潜力,我们在各种场景中对它们进行了研究,并通过监督微调进一步提升了它们的性能。我们的研究突显了开源 LLM 在 Text-to-SQL 任务中的潜力,以及监督微调的优缺点。此外,为了实现高效且经济的基于 LLM 的 Text-to-SQL 解决方案,我们强调了在提示工程中token的高效性,并在这一指标下比较了先前的研究。我们希望我们的工作能够加深对使用 LLMs 进行 Text-to-SQL 转换的理解,并激发进一步的研究和广泛的应用。

        GPT翻译的。

1.INTRODUCTION

         以往的研究大多是question-to-SQL模式,并通过训练编码器-解码器模型来泛化这些模式。与以往的研究不同,基于 LLM 的 Text-to-SQL 解决方案的核心在于如何引导 LLM 生成正确的 SQL 查询,即提示词工程。提示词工程涉及到问题表示、实例选择和实例组织。

        Text-to-SQL 提示词工程需要系统性的研究。在问题表示方面,大多数现有研究将结构化知识文本转化为模式,并进一步添加任务说明和外键以形成提示词。此外,一些研究将数据库的表表示为若干“CREATE TABLE” SQL 语句,并在注释中提示 LLM 回答目标问题。然而,即使采用类似的表示方式,仍可能导致显著的性能差异。例如,在 OpenAI 的官方 Text-to-SQL 演示中,他们使用井号“#”来区分提示和响应,从而获得了较高的性能;如果移除这个标记,性能将显著下降。因此,对不同表示方式的系统研究以及如何与 LLM 良好配合的是现在研究的重要方面。

        真正意义上的用“#”号区分,真没有别的了,可以在写提示词的时候加入这个习惯。

        在示例选择方面,常见的做法是将与目标问题最相似的示例编码到相同的表示中。

        例如使用向量数据库?

        在组织方面,大多数以往的研究用完整的信息来表示示例,包括指令、模式、问题和实际的 SQL 查询。基于 LLM 的 Text-to-SQL 解决方案中的最佳选择和组织策略仍然模糊,因此,对提示词工程进行系统性的研究,非常有必要。

        开源大型语言模型(LLMs)的潜力尚未得到充分探索。之前的研究都基于OPENAI的大模型。现在是否可以考虑通过监督微调来增强开源大模型的实力,从而完成text2sql任务。

        效率也是一个很大的问题。根据 Chang 等人观察到的执行准确率与提示长度呈倒 U 形的关系,他们推测 LLMs 在提示长度方面可能有一个最佳点,但探索高效的提示工程仍然是一个具有挑战性的问题。

        鉴于上述挑战,本文提供了一个全面、系统且公平的基准,用于基于 LLM 的Text-to-SQL 任务。具体来说,我们的基准不仅讨论了各种提示工程策略的有效性和效率,还探讨了开源 LLM 的可行性。具体内容如下:

                1.为了系统且深入地理解 Text-to-SQL 提示词工程,本文对以往研究中的几种策略进行了评估。首先,在zero-shot场景中比较了几种典型的问题表示方式,并使用不同的 LLMs 来识别其优缺点。之后,在few-shot场景中调查了示例选择和组织策略。对于示例选择,比较了不同的选择策略,并进一步验证了 LLMs 从问题与 SQL 框架之间的映射中学习的假设。在示例组织方面,探索了仅展示完整信息、仅展示 SQL 查询和展示question-SQL 对应关系这三种策略。

                2.强调了开源 LLMs 在上下文学习和监督微调中的潜力。对各种开源 LLMs 使用不同的提示词工程策略进行了研究,观察到 LLMs 规模的增加和良好的格式排列带来的显著收益。为了进一步提升它们的性能,使用各种表示方法对开源 LLMs 进行了微调和评估。通过这一比较,证明了与上下文学习相似,表示策略对监督微调也至关重要。还观察到微调后上下文学习能力的下降,这需要进一步研究。

                3.为了实现更经济高效的解决方案,我们进一步从 token 效率的角度评估了不同的策略。为实现这一目标,我们在整个提示工程过程中考虑 token 效率。

                4.最后,我们的集成解决方案 DAIL-SQL 以 86.6% 的执行准确率刷新了 Spider 榜单,并获得了第一名。与之前的解决方案相比,DAIL-SQL 将结构化知识编码为 SQL 语句,根据结构相似性选择示例,并从示例中移除跨领域知识以提高 token 效率。

        本文的贡献如下:

                1.我们系统地研究了基于 LLM 的 Text-to-SQL 方法中的提示词工程,包括五种问题表示、两种提示组件、四种示例选择和三种示例组织方式,并在四种 LLM 上进行了实验。这项研究有助于识别合适的问题表示方式,并找出利用 LLM 上下文学习能力进行 Text-to-SQL 任务的关键点。

                2.首个探索开源 LLMs 在 Text-to-SQL 任务中进行上下文学习和监督微调的研究。通过在 Text-to-SQL 任务中使用 SFT,证明了开源 LLMs的潜力。

                3.我们还从成本效益的角度对不同的提示词进行了比较,为现实的 Text-to-SQL 应用提供了指导。

                4.最后,我们提出了一种新的解决方案,名为 DAIL-SQL,该方案成功利用了 LLMs 的上下文学习能力,并在性能和 token 效率之间达到了平衡。值得注意的是,它以 86.6% 的执行准确率刷新了 Spider 榜单,比最先进的解决方案高出 1.3%,且 token 成本更低。

2.PRELIMINARY

        text-to-sql旨在将自然语言问题自动转换为SQL查询问题,弥补非专家用户和数据库系统间的使用鸿沟,提高数据处理的效率,为智能数据库、自动数据分析和数据库问答等更广泛的应用做出贡献。

        最近,大型语言模型(LLM) 已经成为自然语言处理和机器学习的里程碑。与一般的机器学习模型不同,LLM 是在大规模文本语料库上进行预训练的,可以执行各种自然语言任务。基本的操作原理是根据输入提示逐渐产生具有最高概率的下一个单词。因此,要使用 LLM 处理text-to-SQL 的任务,核心是找到最佳提示符,也称为提示词工程。

        具体的根据提示中的实例数量将提示词工程分为两种:zero-shot和few-shot。本文将自然语言问句及相关信息的表征过程称为question representation。LLM从上下文事例的学习过程称为上下文学习,它使LLM能够从输入的提示词中识别显式或非显式的模式,并生成相应的输出。通过这种方式,LLM 能够在推理过程中执行新的任务,而不需要任何明确的对于特定任务的训练阶段。本文将从实例选择和实例组织的角度来讨论上下文学习。

        虽然 LLM 在先前的研究中被证明在zero-shot和few-shot场景中都是有效的,但是它们的性能可以通过监督微调(SFT)进一步提高,使其更适合特定的下游任务。在最近的研究中,监督微调被用作校准训练,它校准 LLM 的行为,以避免产生攻击性的,有偏见的回复。本文将着重于通过监督微调来提高LLM的text-to-SQL 的能力。

        总之,问题表示(question representation),上下文学习( in-context learning), 监督微调(together with supervised fine-tuning)是基于文本到 SQL 的大型语言模型中的三个关键环节。本文将对它们进行系统的研究和探讨。

3.METHODOLOGY

3.1 Question Representation

        考虑一个数据库D中的目标自然语言问题q,question representation 的目标是最大化大模型M生成正确SQL的可能性:

  

        其中函数\sigma(\cdot,\cdot )决定了目标问题q的表示形式,利用数据库D模式中的有用信息,\sigma(\cdot,\cdot )还可以包含指令语句、规则蕴含和外键等信息。

        根据上述定义,本文调查了zero-shot场景中不同\sigma的不同选择,并选取了其中四种。此外还包括Alpaca使用的问题表示法(因为在监督微调中很流行),具体见下表:

         表中INS表示指令,RI表示蕴含规则,FK表示外键,EX表示执行精度

        下面将介绍之前提过的五种问题表示方法。

         BS(Basic prompt,基础提示词):由表模式、前缀为“Q:”的自然语言问题和响应前缀“A:SELECT”组成

         TR(Text Representation Prompt):相比于基本提示词,在开头添加了指令。

        OD(OpenAI Demostration Prompt) :由指令、表模式和问题组成,其中所有信息都由“ #”注释。与上一种相比,其中的提示指令更加具体,4.3将继续讨论。

        CR(Code Representation Prompt ) :提供了创建数据库的全面信息,提高了正确预测率

        AS(Alpaca SFT Prompt ):Alpaca的SFT提示词是一个监督微调的提示设计。它通过 Markdown 格式的输入上下文,提示 LLM 遵循指令并完成任务。我们将其纳入研究,以检验其在提示工程和监督微调场景中的有效性和效率。

        不同的提示词表示方法在不同的 LLM 中进行了实验,并集成在不同的框架中,这使得它们很难进行公平比较。此外,外键信息和蕴含规则等各个组件所扮演的具体角色仍不清楚。因此,有必要进行系统的研究,以更好地理解question representations,并通过公平比较调查它们的优缺点。 

3.2 In-Context Learning for Text-to-SQL

        上下文学习的关键是实例选择和实例组织,首先给出上下文学习的表述,给定一个三元组Q={(qi,si,Di)},其中qi和si是自然语言问题及其在数据库Di上相应的SQL查询,在上下文学习Text-to-SQL的目标是最大限度地提高LLM在目标问题q和数据库D上生成正确SQL语句s的可能性,如下图所示:

        其中,函数\sigma(\cdot,\cdot,\cdot)决定目标问题q的表示形式,利用数据库D中模式的有用信息和从Q中选择的k个例子。本文主要研究跨域文本SQL,即目标数据库D不包含在前面提到的数据库中,即D\notin \{ D_{i}|(q_{i},s_{i},D_{i})\in Q \}

        text-to-sql的上下文学习包括选择最有用的示例Q^{'},并将这些示例组织成prompt,即有两个子任务:示例选择和示例组织。

3.2.1 示例选择

(1)Random:直接随机从候选示例中抽取k个例子。

(2)Question Similarity Selection:选择5千个问题最相似的例子,使用预先训练好的模型计算目标问题的向量,然后计算各个示例到目标的距离,最后用kNN计算出k个示例。

(3)Masked Question Similarity Selection:使用掩码标记替换所有问题中的表名、列名和值,消除了领域特定信息的负面影响,然后用kNN计算相似性

(4)Query Similarity Selection:选择与目标SQL查询结果最相似的k个示例,本文指出,在示例选择过程中,同时考虑问题和 SQL 查询可能有利于text-to-sql任务。

3.2.2 示例组织

作用:确定选定的示例的哪些信息组织到prompt。

(1)Full-Information Organization:完整提供问题(包含问题、schema等)和问题对应的SQL查询

(2)SQL-Only Organization:仅包含SQL查询,不提供问题的描述。能提供更多的SQL查询,但是每个SQL查询的质量较低。

是否存在一种示例组织形式能权衡质量和数量 

3.3 DAIL-SQL 

        为了解决上述示例组织和示例选择方面的问题,本文提出了一种新的text-to-sql的方法DAIL-SQL。其中示例组织形式如下图:

        即保留了问题-SQL的示例组织形式,删去了schema。 

        DAIL-SQL示例选择是如下流程:

              (1)DAIL选择首先在目标问题q和候选集Q中的示例问题qi中屏蔽特定领域的词汇。

              (2)根据屏蔽后的q和qi的embedding的欧几里得距离并进行排序。同时计算预测的SQL和Q中的SQL们间的距离相似度

              (3)选择标准优先考虑按问题相似度排序的候选项,并且查询相似度大于预定义阈值

标签:DAIL,示例,Text,微调,Large,LLM,SQL
From: https://blog.csdn.net/qq_51700285/article/details/140843877

相关文章

  • Tool-Postgresql
    Tool-PostgresqlUbuntu18.04安装postgresql安装&修改密码&导入sqlaptinstallpostgresqlsupostgres//postgres账户psql-hlocalhost-Upostgres//localhost用户postgresalteruserpostgreswithpassword'123456';//修改密码\ixx.sql\q修改访问权限s......
  • nodejs语言,MySQL数据库;springboot的个性化资讯推荐系统66257(免费领源码)计算机毕业设计
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,个性化资讯推荐系统当然也不能排除在外。个性化资讯推荐系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot技术构建的一个管理系统。整......
  • c#语言,SQL server数据库;基于Web的社区人员管理系统的设计与实现36303(免费领源码)计算机
    目 录摘要1绪论1.1慨述1.2课题意义1.3B/S体系结构介绍1.4ASP.NET框架介绍2 社区人员管理系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程52.2.3数据删除流程52.3系统功能分析62.3.1功能性分析62.3.2非功能性......
  • node.js: mysql sequelize es6 ORM in vscode
    mysql:select*fromtutorials;#CREATETABLEIFNOTEXISTS`tutorials`(`id`INTEGERNOTNULLauto_increment,`title`VARCHAR(255),`description`VARCHAR(255),`published`TINYINT(1),`createdAt`DATETIMENOTNULL,`updatedAt`DATETIMENOTNULL,PRIMA......
  • MySQL体系结构及存储引擎
    一、MySQL体系结构二、存储引擎        存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。不同的表可以指定不同的存储引擎。默认为InnoDB。--查询建表语句showcreatetable[表......
  • activiti初始化报:java.sql.SQLSyntaxErrorException: Table ‘activiti.act_ge_proper
    在学习activiti过成中,由于使用的MySQL是8版本的,所以报了:org.apache.ibatis.exceptions.PersistenceException: ###Errorqueryingdatabase. Cause:java.sql.SQLSyntaxErrorException:Table'activiti.act_ge_property'doesn'texist###Theerrormayexistinorg/......
  • MySQL:修改数据库密码及开启外部访问数据库
    修改数据库密码cd到数据库bin路径下mysql.exe-uroot-p登录成功ALTERUSER'root'@'localhost'IDENTIFIEDBY'123456';再打开一个cmd重新登陆mysql.exe-uroot-p登录成功开启外部访问数据库回到上层路径找到my.ini将内容bind-address行注释掉或者改成0.0.0.0......
  • MySQL4多表查询 内连接
    多表查询数据准备CREATEDATABASEdb4;USEdb4;--创建部门表createtableifnotexistsdept(deptnovarchar(20)primarykey,--部门号namevarchar(20)--部门名字);--创建员工表createtableifnotexistsemp(eidvarchar(20)primarykey......
  • 【mysql随机获取3条不重复数据】最佳实践
    需求:从商品库中随机获取3个不重复的商品,推荐给用户。假设product表数据为10000行。方案一【最佳实际】1.mysql数据库中获取所有商品数据的IDselectidfromproduct;2.通过Java获取随机3个商品ID//假设List中存的为上述数据库ID值List<Integer>productIdList=newA......
  • Mysql:初始化
    免费的社区版下载地址:https://dev.mysql.com/downloads/mysql 下载mysql.zip包,直接解压cdmysql-8.0.28-winx64新增my.ini文件[mysql]default-character-set=utf8#默认字符集[mysqld]port=3306#端口basedir=D:/XXX/mysql-8.0.28-winx64#修改成实......