导语
本文聚焦于利用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
- 链接:arxiv.org/pdf/2308.15...
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的可能性:
其中函数𝜎(·, ·)决定了目标问题𝑞的表示方式,以及数据库D的模式中的有用信息。此外,𝜎(·, ·)还可以包括指令语句、规则含义和外键信息。
本文调查了零次示例场景下的不同𝜎选择,并从文献中选择了五种最具代表性的方法进行比较。
- Basic Prompt ( <math xmlns="http://www.w3.org/1998/Math/MathML"> B S 𝑃 BS_𝑃 </math>BSP ):是一个简单的表示,如清单1所示。它包含表模式、以"Q:"为前缀的自然语言问题和以"A: SELECT"为前缀的响应,以提示LLM生成SQL。
- Text Representation Prompt ( <math xmlns="http://www.w3.org/1998/Math/MathML"> T R 𝑃 TR_𝑃 </math>TRP ):如清单2所示,文本表示提示用自然语言表示模式和问题。与基础提示相比,它在提示的最开始添加了指令来指导LLM。
- OpenAI Demostration Prompt ( <math xmlns="http://www.w3.org/1998/Math/MathML"> O D 𝑃 OD_𝑃 </math>ODP ):OpenAI演示提示(清单3)首次用于OpenAI的官方Text-to-SQL演示。它包括指令、表模式和问题,所有信息都由井号"#"注释。与文本表示提示相比,OpenAI演示提示中的指令更具体,规则为"只完成sqlite SQL查询且不提供解释"
- Code Representation Prompt ( <math xmlns="http://www.w3.org/1998/Math/MathML"> C R 𝑃 CR_𝑃 </math>CRP ):代码表示提示以SQL语法呈现Text-to-SQL任务。具体来说,如清单4所示,它直接呈现"CREATE TABLE" SQL,并在注释中用自然语言问题提示LLM。与其他表示相比,CR 𝑃因其提供数据库创建所需的全面信息(如列类型和主/外键)而脱颖而出。
- Alpaca SFT Prompt ( <math xmlns="http://www.w3.org/1998/Math/MathML"> A S 𝑃 AS_𝑃 </math>ASP ):Alpaca SFT提示是为监督微调设计的提示[47]。如清单5所示,它提示LLM遵循指令,并根据Markdown格式的输入上下文完成任务。
表1总结了这五种表示方法,并列出了它们在原始论文中的详细信息。注意到,由于不同表示法在不同LLM上进行实验,并集成到不同框架中,这使得它们难以进行公平且有效的比较。此外,外键信息和规则含义等单个组件的具体作用仍然不清楚。因此,进行系统性研究以更好地了解问题表示,并通过公平比较研究它们的优缺点是必要的。
3.2 上下文学习
上述问题表示方法使LLM能够通过零次学习直接输出期望的SQL。然而,通过上下文学习,LLM可以在Text-to-SQL任务中表现得更好,其中在输入提示中只提供少数示例。因此,在这一小节中讨论上下文学习的关键点:示例选择和示例组织。首先给出上下文学习的公式化,以便于进一步讨论。
Text-to-SQL的上下文学习涉及选择最有帮助的示例 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑄 ′ 𝑄′ </math>Q′,并决定如何将这些选定示例的信息组织到提示中。接下来,我们将讨论这两个子任务:示例选择和示例组织。
3.2.1 示例选择
这里总结了以前研究中的各种示例选择策略:
- 随机:这种策略从可用候选者中随机抽样𝑘个示例。
- 问题相似性选择( <math xmlns="http://www.w3.org/1998/Math/MathML"> Q T S S QTS_S </math>QTSS):选择与目标问题最相似的𝑘个示例。
- 掩蔽问题相似性选择( <math xmlns="http://www.w3.org/1998/Math/MathML"> M Q S S MQS_S </math>MQSS):通过掩蔽所有问题中的表名、列名和值来消除特定领域信息的负面影响,然后计算它们的嵌入相似度。
- 查询相似性选择( <math xmlns="http://www.w3.org/1998/Math/MathML"> Q R S S QRS_S </math>QRSS):选择与目标SQL查询相似的𝑘个示例。
上述策略只关注使用目标问题或查询选择示例。然而,根据以前的研究,上下文学习本质上是从类比中学习。在Text-to-SQL的情况下,目标是生成与给定问题匹配的查询,因此LLM应该学习从问题到SQL查询的映射。因此,本文指出,在示例选择期间,考虑问题和SQL查询可能有助于Text-to-SQL任务。
3.2.2 示例组织
示例组织在决定上述选定示例的哪些信息将被组织到提示中发挥着关键作用。将现有研究中的策略归纳为两类(见下图):
- 完整信息组织(Full-Information Organization <math xmlns="http://www.w3.org/1998/Math/MathML"> F I 𝑂 FI_𝑂 </math>FIO ))
- 仅SQL组织(SQL-Only Organization <math xmlns="http://www.w3.org/1998/Math/MathML"> S O 𝑂 SO_𝑂 </math>SOO )。
3.3 DAIL-SQL
为解决示例选择和组织中提到的问题,本节提出了一种新的Text-to-SQL方法,命名为DAIL-SQL。在示例选择方面,受 <math xmlns="http://www.w3.org/1998/Math/MathML"> M Q S 𝑆 MQS_𝑆 </math>MQSS和 <math xmlns="http://www.w3.org/1998/Math/MathML"> Q R S 𝑆 QRS_𝑆 </math>QRSS的启发,提出了DAIL选择( <math xmlns="http://www.w3.org/1998/Math/MathML"> D A I L 𝑆 DAIL_𝑆 </math>DAILS),考虑问题和查询来选择候选项。具体来说:
- DAIL选择首先在目标问题 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑞 𝑞 </math>q和候选集 <math xmlns="http://www.w3.org/1998/Math/MathML"> Q Q </math>Q中的示例问题 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑞 𝑖 𝑞_𝑖 </math>qi中屏蔽特定领域的词汇。
- 根据屏蔽后的 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑞 𝑞 </math>q和 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑞 𝑖 𝑞_𝑖 </math>qi的嵌入之间的欧几里得距离对候选示例进行排序。同时,计算预先预测的SQL查询 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑠 ′ 𝑠′ </math>s′和 <math xmlns="http://www.w3.org/1998/Math/MathML"> Q Q </math>Q中的 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑠 𝑖 𝑠_𝑖 </math>si之间的查询相似度。
- 选择标准优先考虑按问题相似度排序的候选项,并且查询相似度大于预定义阈值𝜏。
这样,选定的前𝑘个示例在问题和查询上都具有良好的相似性。
在组织方面,本文提出了一种新的示例组织策略DAIL组织( <math xmlns="http://www.w3.org/1998/Math/MathML"> D A I L 𝑂 DAIL_𝑂 </math>DAILO),在质量和数量上进行权衡。具体而言, <math xmlns="http://www.w3.org/1998/Math/MathML"> D A I L 𝑂 DAIL_𝑂 </math>DAILO呈现了问题 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑞 𝑖 𝑞_𝑖 </math>qi和相应的SQL查询 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑠 𝑖 𝑠_𝑖 </math>si,如清单8所示。作为 <math xmlns="http://www.w3.org/1998/Math/MathML"> F I 𝑂 FI_𝑂 </math>FIO和 <math xmlns="http://www.w3.org/1998/Math/MathML"> S O 𝑂 SO_𝑂 </math>SOO之间的折中方案, <math xmlns="http://www.w3.org/1998/Math/MathML"> D A I L 𝑂 DAIL_𝑂 </math>DAILO保留了问题-SQL映射,并通过删除代价昂贵的数据库模式来减少示例的token长度。
DAIL-SQL选择 <math xmlns="http://www.w3.org/1998/Math/MathML"> C R 𝑃 CR_𝑃 </math>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在这个下游任务上的性能。这里首先提供一个简要的公式化定义。
给定一个大型语言模型 <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>M和一组Text-to-SQL训练数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> T = ( 𝑞 𝑖 , 𝑠 𝑖 , D 𝑖 ) T = {(𝑞_𝑖, 𝑠_𝑖, D_𝑖)} </math>T=(qi,si,Di),其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑞 𝑖 𝑞_𝑖 </math>qi是自然语言问题, <math xmlns="http://www.w3.org/1998/Math/MathML"> 𝑠 𝑖 𝑠_𝑖 </math>si是对应的数据库 <math xmlns="http://www.w3.org/1998/Math/MathML"> D 𝑖 D_𝑖 </math>Di上的查询,SFT的目标是最小化经验损失函数L,该函数衡量生成的查询与真实查询之间的差异。这一过程涉及两个子任务:使用监督数据T对给定的LLM <math xmlns="http://www.w3.org/1998/Math/MathML"> M M </math>M进行微调以获得优化后的LLM <math xmlns="http://www.w3.org/1998/Math/MathML"> M ∗ M_∗ </math>M∗,以及寻找最佳的问题表示方式𝜎。
在数据准备和微调过程中,研究者使用特定于Text-to-SQL的数据集T生成<提示-响应>对,将目标问题和给定数据库作为提示,将期望的查询作为LLM的响应。微调后,优化的LLM <math xmlns="http://www.w3.org/1998/Math/MathML"> M ∗ M_∗ </math>M∗可用于推理,即通过自然语言问题生成查询。值得注意的是,在微调和推理过程中都使用相同的问题表示方式𝜎。研究将进行一系列实验,并探讨SFT在Text-to-SQL中的巨大潜力。
4 实验
4.1 设置
- 数据集:使用Spider和Spider-Realistic数据集进行评估。
- 度量标准:使用准确匹配度(EM)和执行准确度(EX)进行评估。
- LLM:确保所有方法使用相同的最大上下文长度(OpenAI LLMs为4096,开源LLMs为2048)。实验中留出200个token用于生成回应。
4.2 问题表示
- 评估了不同的问题表示方法:在零样本场景下,测试不同的问题表示方法,使用GPT-4, GPT-3.5-TURBO, TEXT-DAVINCI-003, 和Vicuna-33B。
- 发现 : <math xmlns="http://www.w3.org/1998/Math/MathML"> O D 𝑃 OD_𝑃 </math>ODP 在所有LLMs中表现最佳,尤其是与GPT-3.5-TURBO结合时。
- 外键和规则暗示的影响:外键对执行准确度的提高有显著影响,而"无解释"规则则普遍提升了所有LLMs的性能。
4.3 上下文学习
- 实验设置 :使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> C R 𝑃 CR_𝑃 </math>CRP 作为问题表示,测试了不同的样本选择和组织策略,使用GPT-4, GPT-3.5-TURBO, TEXT-DAVINCI003, 和Vicuna-33B。
- 样本选择 : <math xmlns="http://www.w3.org/1998/Math/MathML"> D A I L 𝑆 DAIL_𝑆 </math>DAILS 在选择策略中表现最佳。
- 样本组织 : <math xmlns="http://www.w3.org/1998/Math/MathML"> D A I L 𝑂 DAIL_𝑂 </math>DAILO 在GPT-4上表现最佳,证明其有效性。
4.4 监督式微调
- 开源LLM:对开源LLMs(如LLaMA)进行了全面评估,发现在零样本和少样本场景中表现不佳。
- 监督式微调:对开源LLMs进行微调后,性能大幅提升,但在添加上下文样本后性能降低。
4.5 Token效率
- 对比分析:在零样本和有样本场景中分析了不同LLMs的Token效率。
- DAIL-SQL:与其他最先进的方法相比,DAIL-SQL在准确度和效率方面都有更好的表现。
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的全面研究,为实际应用提供一些指导,并帮助人们推进其前沿。