本文详细精读了DAIL-SQL论文,论文是通过AI翻译加人工逐行精读修改的结果,希望对想要了解Text-to-SQL的同学有所帮助
文章目录
- 摘要
- 1 引言
- 2 任务概述
- 3 研究方法
- 3.1 问题表示
- 3.2 上下文学习用于文本到SQL的转换
- 3.2.1 示例选择example selection
- 3.2.2 示例组织 Example Organization
- 3.3 DAIL-SQL方法
- 3.4 将监督式微调用于文本到SQL
- 4 实验
- 4.1 实验设计
- 4.2 结果与分析
- 论文总结
摘要
大型语言模型(LLMs)已成为文本到SQL任务的新范式。然而,缺乏系统性的基准测试阻碍了设计有效、高效和经济基于LLM的文本到SQL解决方案的发展。为了应对这一挑战,本文首先对现有的提示工程方法进行了系统而广泛的比较,包括问题表示、示例选择和示例组织,并通过这些实验结果阐述了它们的优缺点。基于这些发现,我们提出了一个新的综合解决方案,名为DAIL-SQL,该方案以86.6%的执行准确率刷新了Spider排行榜,并树立了新的标杆。
为了探索开源LLM的潜力,我们在各种场景中对其进行了研究,并通过监督微调进一步提升了它们的性能。我们的探索突显了开源LLMs在文本到SQL方面的潜力,以及监督微调的优势和劣势。此外,为了实现高效且经济的基于大型语言模型(LLM)的文本到SQL解决方案,我们强调提示工程中的Token效率,并比较了在此指标下的先前研究。我们希望我们的工作能够加深对使用LLM进行文本到SQL转换的理解,并激发进一步的调查和广泛应用。
1 引言
文本到SQL作为自然语言处理和数据库领域的一个挑战性任务,将给定关系数据库上的自然语言问题映射为SQL查询[9, 18]。大多数以往的工作[17, 22, 23, 51, 60]集中于提取问题到SQL的模式,并通过用文本到SQL语料库训练编码器-解码器模型来泛化这些模式。近年来,大型语言模型(LLMs)已成为文本到SQL的新范式[26, 41, 50]。值得注意的是,配备了GPT-4[30],Pour-reza等人[37]在Spider排行榜[3]上以85.3%的执行准确率获得了第一名。与以往的研究不同,基于LLM的文本到SQL解决方案的核心问题是,如何提示LLM生成正确的SQL查询,即提示工程
。这样的提示工程涉及问题表示 question representations[7,13,33,37]、示例选择examples selection[14, 28, 29]以及示例组织 example organization[14]。
文本到SQL的提示工程需要系统性的研究
。尽管先前的研究取得了显著的进展,但在基于LLM的文本到SQL解决方案中,提示工程的系统性研究仍然缺乏。
(1)具体来说,在 问题表示question representations
然而,即使采用相似的表示方法,他们的详细任务指令也可能导致显著的效果差距。例如,在OpenAI的官方文本到SQL演示[33]中,他们使用井号“#”来区分提示和响应,从而取得了令人印象深刻的性能[26];如果移除这个符号,性能将显著下降。因此,系统性地研究不同的表示方法,并检验如何与大型语言模型良好配合的需求正在迅速增长。
(2)关于 示例选择examples selection
(3)而在 示例组织example organization
结合不同大型语言模型的偏好,基于大型语言模型的文本到SQL解决方案中的最佳选择和组织的策略仍然模糊不清。因此,系统性地研究提示工程,涵盖不同的大型语言模型(LLMs)、问题表示、示例选择和组织,是非常令人期待的。
开源大型语言模型的潜力尚未被充分探索
。最近,开源大型语言模型不断扩展,在编程、数学推理和文本生成任务上表现出显著的进步。然而,以往针对“文本到SQL”的研究主要集中于OpenAI的大型语言模型,而忽略了开源大型语言模型。此外,与OpenAI的大型语言模型相比,开源模型在理解上下文和生成连贯响应方面的功能通常有限。因此,开源大型语言模型面临的一个关键挑战是进一步提升它们在“文本到SQL”上的表现,这可以 通过监督微调来实现
提示效率Prompt efficiency仍然是一个具有挑战性的未解之谜
。在以大型语言模型为基础的“文本到SQL”中,另一个关键挑战是效率。原因是大多数先前的研究都集中在OpenAI的大型语言模型上,调用它们的API既昂贵又耗时,并且受到速率限制的约束[32],特别是对于包含多个示例的上下文学习提示。然而,先前的这些研究可能并没有很好地解决这一挑战。具体来说,基于执行准确率与提示长度呈倒U型变化的观察结果,常等人[7]推测大型语言模型可能在提示长度方面存在一个最佳点,但将高效的提示工程作为一个具有挑战性的未解之谜留给了后人。
鉴于上述挑战,我们专注于提供一个全面、系统和公正的基准测试,用于评估以大型语言模型为基础的“文本到SQL”的性能。具体来说,我们的基准测试讨论了各种提示工程策略的有效性和效率,以及开源大型语言模型(LLM)的可行性。具体细节如下。
为了系统而深入地理解文本到SQL的提示工程,我们根据先前的几项研究实证评估了几种策略。首先,我们比较了不同大型语言模型在零样本场景下的几种典型问题表示,并探索出它们的优缺点。之后,我们调查了小样本场景下的示例选择和组织策略。在示例选择方面,我们比较了不同的选择策略,并进一步验证了大型语言模型通过问题与SQL骨架之间的映射进行学习的假设。关于示例组织,我们探讨了显示完整信息、仅SQL查询或问题-SQL对的选项。
此后,我们强调了开源大型语言模型在上下文学习和有监督微调中的潜力。具体来说,我们根据不同的提示工程策略实证研究了多种开源大型语言模型,并观察到随着大型语言模型规模的增大以及良好的对齐性带来的显著好处[34]。为了进一步提升它们的性能,我们使用各种表示对开源大型语言模型进行了微调和评估。通过这一比较,我们展示了与上下文学习类似,表示策略对于有监督微调也是至关重要的。这些探索强调了有效解决文本到SQL问题的潜力。此外,在微调后我们还观察到上下文学习能力的下降,这需要进一步研究。我们相信这些探索将有益于实际的文本到SQL应用。
为了实现更加经济高效的解决方案,我们从Token效率的角度进一步评估不同策略。此类评估旨在寻找一种性价比高的策略,该策略应该用较少的令牌达到可观的性能。为实现这一目标,我们在提示工程的全过程考虑Token效率,包括问题表示、示例选择和组织。
最后但同样重要的是,我们整合的解决方案DAIL-SQL以86.6%的执行准确率刷新了Spider排行榜,并荣获第一名。与之前的解决方案相比,DAIL-SQL将结构知识编码为SQL语句,基于它们的骨架相似性选择示例,并从示例中移除跨域知识以提高令牌效率(即Token效率)。在DAIL-SQL之前,Spider排行榜上的最先进技术表现为85.3%[37]。因此,我们的解决方案树立了新的标杆,并希望我们的全面研究能够激发更多进一步的工作。
我们的主要贡献和成果总结如下:
- 我们系统地研究了基于大型语言模型(LLM)的文本到SQL方法的提示工程,包括五种问题表示five question representations、两种提示组件example selections、四种示例选择 example organization,以及四种LLM上的三种示例组织。该研究揭示了如何识别合适的问题表示和关键点,以利用大型语言模型(LLMs)的上下文学习能力来执行文本到SQL的任务。
- 据我们所知,我们是第一个探索开源大型语言模型在文本到SQL任务的上下文学习 in-context learning和监督微调supervised fine-tuning方面的团队。我们通过应用监督微调(SFT)于文本到SQL任务,提供了关于开源大型语言模型潜力的见解。
- 我们还从成本效益的角度实证比较了不同的提示,这为实际应用中的文本到SQL提供了实用的指导。
- 最后但同样重要的是,我们提出了一种新解决方案,名为DAIL-SQL,它成功地利用了大型语言模型的上下文学习能力,并在性能和Token效率之间实现了平衡。值得注意的是,它以86.6%的执行准确率刷新了Spider排行榜,比最佳现有技术解决方案高出1.3%,且Token成本更低。
2 任务概述
文本到SQL旨在自动将自然语言问题转换为SQL查询。它弥合了非专家用户与数据库系统之间的差距,极大提高了数据处理的效率,并促进了更广泛的应用,如智能数据库服务、自动数据分析和数据库问答。然而,由于完全理解自然语言问题和生成正确SQL查询的难度,文本到SQL仍然是一项颇具挑战性的任务[18, 39]。
数据库和自然语言处理社区已经进行了大量关于文本到SQL的研究。一些早期研究采用预定义规则或查询枚举来处理文本到SQL的任务[4,40,44],或者将其视为序列到序列任务,专注于用编码器-解码器架构训练机器学习模型[6, 36, 38]。随着深度学习的快速发展,许多技术被应用于辅助文本到SQL的任务,例如注意力机制[27]、图表示[17,23,38,51,55,60]、句法解析[15,22,43,52]等。其中最具代表性的是BERT[11],它已被广泛用于文本到SQL,并在当时取得了最佳性能[5, 56]。此外,为了缩小文本到SQL研究与实际应用之间的差距,已经发布了许多大规模基准数据集,包括WikiSQL[62]、Spider[57]、KaggleDBQA[21]、BIRD[24]等。在这些巨大努力下,研究界在文本到SQL方面取得了令人瞩目的进展。
最近,大型语言模型(LLMs),如OpenAI的GPT-4[30]和Meta的LLaMA[48],已成为自然语言处理和机器学习的一个里程碑。不同于一般的机器学习模型,LLMs在大量文本语料库上进行预训练,能够执行各种自然语言任务。其基本操作原理是通过输入提示逐步生成下一个最大概率的Token。因此,使用LLMs解决文本SQL任务,核心要点是要找到最优的提示词,也称为提示工程。
具体来说,根据提示中提供的示例数量,提示工程被划分为两种场景:零样本场景和少样本场景。在零样本场景中,不提供任何示例,主要挑战在于有效表示自然语言问题,包括整合相关信息,如相应的数据库模式 [7,13,26,50]。在本文中,表示自然语言问题及相关信息的过程被称为问题表示
。而在少样本场景中,有有限数量的示例可用,因此除了问题表示外,我们还需要研究如何选择最有用的示例,并将其适当组织在提示中。在自然语言处理中,上述大型语言模型从上下文示例中学习的过程被称为上下文学习in-context learning [12]。它使大型语言模型能够从输入提示中识别显式或隐式的模式,并生成相应的输出。这样,大型语言模型在推理过程中能够执行新任务,而无需任何显式的任务特定训练阶段。最近的研究 [14,28,37] 证实了包含示例对有效上下文学习的重要作用。在本文中,我们将在示例选择和示例组织的范围内讨论上下文学习。
尽管在先前的研究 [7,19,26,29,46] 中已经证明大型语言模型在零样本和少样本场景中都表现出色,但它们的表现还可以通过监督微调(SFT)进一步提升,该方法使用额外的特定于任务的训练数据来提升大型语言模型(LLMs),使其更适合特定的下游任务。在最近的研究中,监督微调被用作 对齐范式paradigms of Alignment
,使LLMs的行为保持一致,以避免生成冒犯性、有偏见的回应和幻觉[31]。本文将 重点讨论通过监督微调提升LLMs的文本到SQL能力
总之,问题表示(在本文中,表示自然语言问题及相关信息的过程被称为问题表示
)、上下文学习以及监督微调是大型语言模型驱动的文本到SQL中的三个关键要素。本文将提供对这些要素的系统研究和讨论。
3 研究方法
如上所述,本文重点关注问题表示、上下文学习和监督微调。在本节中,我们将为这三个问题提供形式化定义,系统性地调查现有的解决方案,并指出现有技术中潜在的问题。为解决这些问题,我们提出了一种新的文本到SQL提示工程方法,名为DAIL-SQL,该方法刷新了Spider排行榜上的最佳表现,执行准确率为86.6%。
3.1 问题表示
在本文中,
表示自然语言问题及相关信息的过程被称为问题表示
在本节中,我们首先讨论在零样本场景下文本到SQL的问题表示。考虑在特定数据库
表1:现有工作中问题表示的情况,以及它们在零样本场景下报告的执行准确率(EX)。指令(INS)、规则含义(RI)和外键(FK)可能是提示中的组成部分。INS是任务描述 task description,例如“写一个SQL来回答问题”。RI是指引性陈述 guiding statement,,例如“仅完成sqlite SQL查询且不附带解释”。FK是数据库的外键信息 foreign key。
函数
根据上述定义,我们在零样本场景中调查了σ的不同选择,并从文献中挑选出四个最具代表性的。另外,我们还包括了Alpaca[47]中使用的问题表示,因为它在监督微调中很受欢迎。表1总结了这五种表示方法,并列出了它们原始论文中报告的详细信息。
- 基础提示Basic Prompt 。基础提示[37]是列表1中显示的一个简单表示。它由表格模式table schemas、以“Q:”开头的前缀自然语言问题和提示大型语言模型生成SQL的响应前缀“A: SELECT”组成。在本文中,我们称其为基础提示,因为其缺乏指令instructions.。
- 文本表示提示Text Representation Prompt 。如列表2所示,文本表示提示[29]既包含了表格schema、也包含了用户查询问题question。与基本提示相比,它在提示最开始增加了指令来指导大型语言模型(LLM)。在[29]中,它在零样本场景下于Spider-dev上实现了69.0%的执行准确率。
- OpenAI示范提示OpenAI Demostration Prompt 。OpenAI示范提示(列表3)首次用于OpenAI的官方文本到SQL演示[33],并在[26, 37]中进行了评估。它由指令、表模式和问题组成,所有信息都用井号“#”进行注释。与文本表示提示相比,OpenAI示范提示中的指令更为具体,有一条规则:“仅完成sqlite SQL查询且不做解释”,我们将在第4.3节结合实验结果进一步讨论。
- 代码表示提示Code Representation Prompt 。代码表示提示[7, 29]以SQL语法呈现文本到SQL任务。具体来说,如列表4所示,它直接展示“CREATE TABLE” SQL语句,并用自然语言问题在注释中提示大型语言模型。与其他表示方式相比,CR p因能提供创建数据库所需的综合信息而脱颖而出,例如列类型和主键/外键。有了这样的表示,[29]使用LLM CODE-DAVINCI-002正确预测了大约75.6%的SQL语句。
- Alpaca监督微调提示Alpaca SFT Prompt。Alpaca监督微调提示是为监督微调设计的提示[47]。如列表5所示,它提示大型语言模型遵循指令并根据Markdown格式的输入上下文完成任务。我们将其纳入考量,以检验其在提示工程和监督微调场景中的有效性和效率。
- 如表1所示,不同的表示方法与不同的LLM一起实验,并整合到不同的框架中,使得公平和有效地比较它们变得困难。此外,像外键信息和规则含义这样的单个组件所扮演的具体角色仍然不清楚。因此,进行系统研究以更好地理解问题表示法,并通过公平比较探究它们的优势和劣势是至关重要的。
3.2 上下文学习用于文本到SQL的转换
上述问题表示方法使大型语言模型能够通过零样本学习直接输出期望的SQL语句。然而,大型语言模型可以通过上下文学习更好地执行文本到SQL的转换,其中输入提示中仅提供少量示例。
因此,在本小节中,我们讨论了上下文学习的要点,即示例选择和示例组织。我们首先给出上下文学习的一个表述,以便于进一步讨论。
在文本到SQL的转换中,给定一组三元组
是自然语言问题,
函数
文本到 SQL 的上下文学习涉及选择最有用的示例并决定如何将这些选定示例的信息组织成提示
。接下来我们讨论这两个子任务:示例选择example selection和示例组织 example organization。
3.2.1 示例选择example selection
我们将先前研究中各种示例选择策略总结如下。
- 随机Random。该策略从可用候选者中随机抽取 k 个示例。先前的工作[14, 28, 29]已将其作为示例选择的基线。
- 问题相似性选择Question Similarity Selection 。[28] 选择具有最相似问题的 k 个示例。具体来说,它使用预训练的语言模型将 Q 中的示例问题和目标问题 q 都进行嵌入。然后,它应用预定义的距离度量,如欧几里得距离或负余弦相似度,对每个示例-目标对进行计算。最后利用 k 近邻算法从 Q 中选取与目标问题 q 紧密匹配的 k 个示例。
- 掩码问题相似性选择 Masked Question Similarity Selection 。对于跨域的文本到SQL任务,MQS S[14]通过用掩码标记替换所有问题中的表名、列名和值,消除了特定领域信息的负面影响,然后使用k近邻算法计算它们嵌入之间的相似性。
- 查询相似性选择 Query Similarity Selection 。[29]不是使用目标问题q,而是旨在选择k个与目标SQL查询s相似的例子。具体来说,它采用一个初步模型,利用目标问题q和数据库D生成SQL查询KaTeX parse error: Expected group after '^' at position 2: s^̲' ,这个生成的 KaTeX parse error: Expected group after '^' at position 2: s^̲'可以被视为的近似。然后,它根据关键词将来自例子examples的查询queries编码成二进制离散语法向量 binary discrete syntax vectors。之后,通过考虑与近似查询的相似性和选定例子之间的多样性来选择k个例子。
上述策略侧重于仅使用目标问题或查询来选择例子。然而,根据先前的研究[12],上下文学习本质上是从类比中学习。在文本到SQL的情况下,目标是生成与给定问题匹配的查询,因此大型语言模型应该学习从问题到SQL查询的映射
。因此,我们指出,在例子选择过程中,同时考虑问题和SQL查询可能会对文本到SQL任务有益。我们将在第3.3节进一步讨论这一点。
3.2.2 示例组织 Example Organization
例子组织在决定上述选定例子的哪些信息将被组织进提示中起着关键作用。我们将先前研究中现有的策略总结为两类:全信息组织和仅SQL组织,如列表6和列表7所示。
- 全信息组织Full-Information Organization ,[7, 29] 将与目标问题以相同的表示形式组织示例。如列表6所示,示例的结构与目标问题完全相同,唯一的区别在于,在末尾不是“SELECT”标记,而是选定的示例在“SELECT”后有相应的SQL查询。
- 仅SQL组织SQL-Only Organization 。[14] 仅包括在提示符中具有前缀指令的选定示例的SQL查询,如列表7所示。这种组织的目的是最大化示例的数量,因为Token长度是有限的。然而,它移除了问题与相应SQL查询之间的映射信息,而这种信息可能是有用的,不能移除,我们稍后会展示。
在这些示例中,${DATABASE_SCHEMA}表示数据库模式, ${TARGET_QUESTION}表示信息表示
总之,
3.3 DAIL-SQL方法
为了解决上述例子选择和组织的不足,在本小节中,我们提出了一种名为DAIL-SQL的新颖文本到SQL方法。请参阅附录A.1获取DAIL-SQL的伪代码。
在例子选择方面,受到MQS S和QRS S的启发,我们提出了DAIL示例选择方法
问题questions相似度
排序的候选者,其查询queries相似度
大于预设阈值为了保持问题与SQL查询之间的映射信息,同时提高标记效率,我们提出了一种新的示例组织策略DAIL组织
在DAIL-SQL中,我们采用
总之,DAIL-SQL利用
请注意,DAIL-SQL是一种灵活的基于大型语言模型的文本到SQL解决方案,可以进一步扩展并轻松与其他组件集成。例如,为了提高性能,我们为DAIL-SQL配备了自一致性self-consistency [53],其执行准确率达到了86.6%。尽管自一致性提高了0.4%的执行准确率,但它非常耗时,并且产生的成本是原始DAIL-SQL的多倍。因此,在本文中我们仍然关注DAIL-SQL。
3.4 将监督式微调用于文本到SQL
监督式微调supervised fine-tuning作为一种前景光明的选择,但是到目前为止却探索得较少。与针对各种语言任务进行监督式微调类似,我们可以将其应用于文本到SQL领域,并提高大型语言模型在此下游任务上的表现。为了进一步理解监督式微调如何作用于文本到SQL,我们首先简要提供如下公式。
本节将主要关注数据准备
对于一般领域,监督数据
微调完成后,优化后的大型语言模型(LLM)
4 实验
4.1 实验设计
- 数据集:实验在两个广泛认可的文本到SQL数据集上进行评估,分别是Spider和Spider-Realistic。Spider是一个大规模跨域文本到SQL数据集,包含8659个训练实例和1034个开发实例。Spider-Realistic是Spider的一个更具挑战性的变体,选取了508个实例并手动修改了问题,同时保持SQL查询不变。
- 指标:为了公平比较,实验采用了精确集匹配准确率(EM)和执行准确率(EX)作为评估指标。执行准确率提供了更精确的模型性能估计,因为它可以处理单个问题有多个有效SQL查询的情况。
- LLMs:实验使用了四种LLMs:GPT-4、GPT-3.5-TURBO、TEXT-DAVINCI-003和Vicuna-33B。为了确保公平比较,所有方法都使用相同的最大上下文长度,分别是4096(对于OpenAI LLMs)和2048(对于开源LLMs)。
4.2 结果与分析
- 问题表示:实验结果表明,ODP在所有LLMs上表现最佳,执行准确率为75.5%(使用GPT-3.5-TURBO)。此外,DAIL-SQL在Spider-dev上的执行准确率为83.5%,在Spider-Realistic上的执行准确率为76.0%。
- 上下文学习:在少样本场景下,DAIL选择在所有LLMs上表现最佳,执行准确率在5样本情况下达到82.4%(使用GPT-4)。DAIL组织在GPT-4上效果显著,执行准确率从72.3%提高到83.5%。
- 监督微调:对开源LLMs进行监督微调后,LLaMA-33B在Spider-dev上的执行准确率为36.4%,在Spider-Realistic上的执行准确率为51.5%。尽管微调后的LLMs未能从上下文示例中学习,但其性能仍优于未微调的LLMs。
- token效率:在零样本场景下,DAIL-SQL在执行准确率和token数量之间取得了平衡,表现出较高的token效率。与其他最先进的方法相比,DAIL-SQL在执行准确率和效率上均表现出色。
论文总结
这篇论文系统研究了基于LLMs的文本到SQL提示工程,提出了DAIL-SQL综合解决方案,刷新了Spider排行榜,达到了86.6%的执行准确率。论文的贡献包括:
- 系统研究了提示工程,提出了DAIL选择和组织策略。
- 首次探索了开源LLMs在文本到SQL任务中的潜力,并通过监督微调提升了其性能。
- 提出了DAIL-SQL解决方案,结合了高执行准确率和token效率,适用于实际应用。
未来的研究方向包括进一步探索更多的规则、增加额外的文本到SQL数据、以及研究在微调后保持上下文学习能力的方法。