导语

这是现在运用GPT-4在Text-to-SQL使命上到达SOTA功能的一篇论文。

  • 会议:Arxiv 2023
  • 链接:arxiv.org/abs/2304.11…

1 简介

数据库的自然言语查询接口旨在使终究用户更简略拜访联系数据库中的数据,例如Text-to-SQL使命极大地促进了非专业用户拜访数据库进行查询的才能。当前,大言语模型LLM与精心规划和微调的模型比较,在常用的基准测试(例如Spider)上落后。表1显现了两个最新的llm (CodeX和GPT4)在Spider数据集开发集上的功能。尽管其体现强劲,但与现有办法比较仍落后,特别是在中等和杂乱的查询。本文研讨的问题是这些llm在哪里失败,以及它们面临的一些问题是否能够得到缓解,以推进功能到达或超越微调的SOTA模型。

Text-to-SQL学习整理(三十三):GPT-4屠榜Text-to-SQL数据集Spider

与运用预练习或微调的传统办法比较,Prompt有几个优点。首要的好处是llm能够执行猜测使命,而不需求很多特定于使命的练习数据。从头开始练习大型言语模型或对其进行微调是一个资源密集型的进程,通常需求很多的练习样本和机器资源,而这些或许是不可用的。此外,在几个基准数据集上,Few-shot Prompt已被证明优于曾经最先进的办法,而且即使在有限的练习示例中也能够到达很高的准确性。最近有研讨标明,llm的功能能够在更杂乱的使命上得到改进,其间使命被分化成多个进程,中心成果用于生成终究答案。可是,与代数表达式不同的是,每个进程的输出直接供给给下一步,由于言语的声明性结构和查询子句之间的杂乱联系,中断杂乱的SQL查询或许是一项更艰巨的使命。

本文提出了一种根据Few-shot Prompt的新办法,将自然言语文本到SQL(称为文本到SQL)的使命分化为多个进程。曾经运用llm进行Text-to-SQL的作业仅在Zero-shot设置中进行评估。但是,关于大多数使命,零射提示只供给了llm潜在才能的下Few-shot提示办法。本文在Spider上进行了实验并取得了新的SOTA体现。

2 相关作业

Text-to-SQL学习整理(三十三):GPT-4屠榜Text-to-SQL数据集Spider

3 Few-shot过错分析

为了更好地理解llm在少量镜头设置下的失败,本文在Spider数据集的练习集中随机抽样了来自不同数据库的500个查询,排除了提示中运用的所有数据库。手动检查这些过错,并将它们分为六类,如图1所示,下面将进行评论。

  1. 形式链接:包括模型无法辨认问题中说到的列名、表名或实体的实例。在某些状况下,查询需求聚合函数,但挑选了匹配的列名。
  2. JOIN:包括需求JOIN的查询,但模型无法辨认衔接表所需的所有表或正确的外键。
  3. GROUP BY:这种状况包括SQL句子需求GROUP BY子句,可是模型没有认识到分组的需求,或许运用了过错的列对成果进行分组。
  4. 嵌套和调集查询:关于这个类别,gold query运用嵌套或调集操作,但模型不能辨认嵌套结构,或许无法检测正确的嵌套或调集操作。
  5. 无效SQL:一小部分生成的SQL句子有语法过错,无法执行。
  6. 其他:这一类包括不属于上述任何一类的状况。

4 办法

尽管few-shot模型在zero-shot的基础上有所改进,但在更杂乱的查询上仍然存在问题,如3所述。

应对这些挑战的办法是将问题分化为更小的子问题,处理每个子问题,并运用这些处理方案来构建原始问题的处理方案。类似的办法(例如,思维链提示和最小到最多提示)已被用于进步数学单词问题。在这些领域中,使命具有一个进程直接进入下一个进程的进程结构,而在大多数状况下,SQL查询是声明性的,或许的进程及其边界不太清楚。但是,编写SQL查询的思维进程能够分化为(1)检测与查询相关的数据库表和列,(2)辨认更杂乱查询的一般查询结构(例如分组、嵌套、多重衔接、调集操作等),(3)假如能够辨认,则制定任何进程子组件,(4)根据子问题的处理方案编写终究查询。

Text-to-SQL学习整理(三十三):GPT-4屠榜Text-to-SQL数据集Spider

根据这个思维进程,咱们提出的分化文本到SQL使命的办法由四个模块组成(如图2所示):(1)形式链接,(2)查询分类和分化,(3)SQL生成,(4)自校对,这些将在下面的小节中具体解释。尽管这些模块能够运用文献中的技能来实现,但咱们都运用提示技能来实现它们,以标明llm能够处理所有问题。

4.1 形式链接模块

形式链接负责在自然言语查询中辨认对数据库形式和条件值的引证,作者为形式链接规划了一个根据提示符的模块。提示符包括从Spider数据集的练习集中随机挑选的10个样本。依照思维链模板,提示以Kojima et al.建议的“Let’s think step by step”开始。关于问题中每次说到的列名,将从给定的数据库形式中挑选相应的列及其表。还从问题中提取或许的实体和单元格值。图3给出了一个示例。

4.2 分类分化模块

查询分类和分化模块。该模块将每个查询分为三类:简略查询、非嵌套杂乱查询和嵌套杂乱查询。简略类包括单表查询,无需衔接或嵌套即可答复。非嵌套类包括需求衔接但不需求子查询的查询,嵌套类中的查询能够需求衔接、子查询和设置操作。类标签关于咱们的查询生成模块很重要,它对每个查询类运用不同的提示。除了类标签之外,查询分类和分化还检测非嵌套查询和嵌套查询要衔接的表集,以及或许为嵌套查询检测到的任何子查询。图4显现了给定给模型的示例输入和模型生成的输出。

Text-to-SQL学习整理(三十三):GPT-4屠榜Text-to-SQL数据集Spider

4.3 SQL生成模块

查询生成由三个模块组成,每个模块面向不同的类。

  • 简略类中的问题,没有中心进程的简略提示。
  • 非嵌套杂乱类包括需求衔接的查询。本文运用一种中心表示来弥合查询和SQL句子之间的差距,即NatSQL。
  • 嵌套的杂乱类是最杂乱的类型,在生成终究答案之前需求几个中心进程。这个类能够包括的查询不仅需求运用嵌套和set操作(如EXCEPT、UNION和INTERSECT)的子查询,还需求多个表衔接,与前一个类相同。为了将问题进一步分化为多个进程,咱们为这个类规划的提示是这样规划的:LLM应该首先处理子查询,然后运用它们来生成终究答案。

4.4 自校对模块

生成的SQL查询有时或许缺少或冗余关键字,如DESC、DISTINCT和聚合函数。为了处理这个问题,本文提出了一个自我纠正模块,在这个模块中,模型被指示纠正这些小过错。

5 实验

实验成果如下图所示:

Text-to-SQL学习整理(三十三):GPT-4屠榜Text-to-SQL数据集Spider

Text-to-SQL学习整理(三十三):GPT-4屠榜Text-to-SQL数据集Spider

6 总结

提示使大型言语模型能够在不同领域的很多NLP使命上取得令人形象深入的功能,而不需求大型练习集。但是,Text-to-SQL使命的提示办法的功能不如微调模型。在本研讨中,作者开发了一种运用提示来处理问题的分化办法。实验成果标明,所提出办法能够有效地弥合两种范式之间的差距,并在具有挑战性的Spider数据集上供给与最先进办法相当的成果。