RSL - SQL:文本到 SQL 生成中的鲁棒模式链接
Gihub:https://github.com/Laqcce-cao/RSL-SQL
论文:https://arxiv.org/abs/2411.00073 A b s t r a c t {Abstract} Abstract -文本到SQL生成旨在将自然语言问题转换为SQL语句。在基于大语言模型的文本到SQL任务中,模式链接(schema linking)是一种广泛采用的策略,它通过仅选择相关的模式元素来简化大语言模型(LLM)的输入,从而减少噪声和计算开销。然而,模式链接面临一些需要谨慎对待的风险,包括可能遗漏必要元素以及破坏数据库结构完整性。为应对这些挑战,我们提出了一个名为RSL - SQL的新颖框架,该框架结合了双向模式链接、上下文信息增强、二元选择策略和多轮自我修正。我们使用前向和后向剪枝方法提高了模式链接的召回率,在将输入列数量减少83%的同时,实现了 94 % {94}\% 94% 的严格召回率。此外,它通过在全模式和增强了上下文信息的简化模式之间进行投票来规避风险。在BIRD和Spider基准测试上的实验表明,我们的方法在开源解决方案中实现了最优执行准确率,使用GPT - 4o时在BIRD上达到67.2%,在Spider上达到 87.9 % {87.9}\% 87.9% 。此外,当采用DeepSeek(成本低得多)且提示信息完整时,我们的方法优于一系列基于GPT - 4的文本到SQL系统。广泛的分析和消融实验证实了我们框架中每个组件的有效性。代码可在https://github.com/Laqcce-cao/RSL-SQL获取。
一、引言
将自然语言问题转换为结构化查询语言(SQL)的任务,即文本转SQL(Text-to-SQL或Text2SQL生成),对于使非专业用户能够与关系数据库进行交互至关重要 [1]、[2]。通过弥合自然语言和结构化查询语言之间的差距,文本转SQL系统使数据访问更加民主化,并使用户无需深厚的技术知识就能提取有价值的信息 [3]。
近年来,利用大语言模型(Large Language Models,LLMs)[4]-[6]强大的理解和生成能力来处理文本到SQL(Text-to-SQL)任务已成为提升性能的主要方法,而提示工程(prompt engineering)也成为了主流技术策略。为文本到SQL任务提供给大语言模型的典型提示通常包括数据库描述、用户查询和小样本示例[7]、[8],这使得该系统能够适用于各种数据库。直观地说,假设大语言模型具备足够强大的能力,数据库描述越精确、详细,生成的SQL查询质量就越好。事实证明,数据库结构、注释、样本数据和关系映射等特征能够在特定场景下提升文本到SQL任务的性能[9]、[10]。
数据库的细粒度描述带来了挑战。对于数据库,尤其是大规模工业数据库而言,拥有成百上千个字段是很常见的。在提示中纳入完整的数据库特征会导致输入令牌过多、计算成本增加,而且至关重要的是,会引入大量噪声[11]。由于用户查询通常仅涉及数据库模式元素的一小部分,大量不相关的模式信息会使大语言模型(LLM)产生混淆并降低其性能。为了缓解这一问题,模式链接[8]、[12]技术已被广泛采用,以识别并仅在提示中包含相关的模式元素。
然而,模式链接(schema linking)既带来了机遇,也带来了风险。一方面,修剪无关的模式元素可以降低输入的复杂性,并将大语言模型(LLM)的注意力集中在相关信息上,这有可能提高SQL生成的准确性。另一方面,在简化过程中,某些在原始问题中重要但不明显的表或列可能会被忽略,导致生成的SQL中缺少必要信息。这就产生了风险1)如果模式链接未能识别出所有必要的表和列,生成的 S Q L {SQL} SQL 必然会出错(假设大语言模型不会产生幻觉,即SQL中的模式元素完全来自输入的数据库模式)。此外,模式链接可能会忽略表之间的关系(如外键约束),从而在多表查询中正确建立连接时出现问题。而且,简化后的模式可能会导致列名或表名更加通用,从而加剧语义歧义。这就导致了风险2)最近的研究表明,即使识别出了所有所需元素,模式链接仍然可能导致性能下降。这些风险表明需要进行微妙的平衡:虽然模式链接可以减少噪声和计算成本,但它也可能会移除准确生成SQL所需的关键信息或上下文。
我们的分析进一步强调了这种权衡。通过模式链接简化完整模式具有双重效果:它可以纠正原本在完整模式中错误的查询(正向收益,记为 y y y ),但也可能导致原本正确的查询变得错误(负向影响,记为 x x x )。因此,模式链接的净收益取决于这些效果之间的平衡。只有当 y − x > 0 y - x > 0 y−x>0 时,模式链接才会产生正向净效果;否则,它可能弊大于利。
为了增强模式链接的益处同时降低其风险,我们提出了 RSL - SQL,这是一个基于稳健模式链接的文本到 SQL 生成框架。我们的方法旨在最大化模式链接的正向收益(y)并最小化其负向影响(x)。
在我们的框架中,我们首先使用完整的数据库模式生成初步的SQL语句,并通过双向模式链接实现高召回率,以降低模式元素召回不完整的风险。接下来,我们简化数据库模式,并利用丰富的上下文信息对其进行增强,以生成另一个SQL语句,这增加了正确查询的数量,但在较小程度上也增加了新引入错误的数量。随后,我们采用二元选择策略(从完整或简化的数据库模式生成的SQL语句中选择更优的一个),以进一步增加正确查询的数量,同时减少新引入的错误。最后,我们采用多轮自我修正方法,整合SQL执行结果的反馈,迭代地改进和优化有问题的SQL语句。通过这些策略,RSL - SQL增强了模式链接的积极效果,同时减轻了其负面影响,从而显著提高了整体性能。
在我们的实验中,我们在BIRD和Spider数据集上评估了所提出的方法RSL - SQL,并将其性能与一系列现有的文本到SQL(Text - to - SQL)方法进行了比较。实验结果表明,当使用GPT - 4o作为骨干大语言模型(LLM)时,RSL - SQL在BIRD开发数据集上实现了67.21%的执行准确率和70.32%的有效效率得分(为开源方法创下了新的最优水平),在Spider测试数据集上实现了87.9%的执行准确率(与最优水平相当)。此外,我们证明了,当使用成本效益显著更高的DeepSeek时,尽管GPT - 4的每令牌成本是DeepSeek的215倍,但RSL - SQL在BIRD和Spider数据集上的表现都优于许多基于GPT - 4的方法。消融研究表明,我们方法的每个组件都对整体性能提升有贡献。值得注意的是,我们的双向模式链接技术在BIRD数据集上实现了 94 % {94}\% 94% 的高严格召回率(新的最优水平),同时显著减少了每个查询的平均列数。上下文信息增强和二元选择策略都被证明能稳步提高准确率,从而降低了与模式链接相关的潜在风险。
本文的主要贡献可总结如下:
(1) 我们研究了模式链接(schema linking)相关的潜在风险,并提出了RSL - SQL,这是一种新颖的文本到SQL生成框架,具有强大的模式链接功能,能在减轻模式链接相关风险的同时实现效益最大化,在BIRD数据集上达到了最先进的性能。
(2) 大量实验结果证明了所提出方法的有效性和鲁棒性。我们的框架还表现出良好的可迁移性,在使用成本低得多的DeepSeek时,其性能超过了许多基于GPT - 4的方法,展现出了出色的性价比。
二、相关工作
早期关于文本到SQL(Text-to-SQL)任务的研究主要依赖于手工设计的模板[13]。尽管这些方法在简单场景中表现良好,但它们高度依赖于手动规则,并且难以扩展到更复杂和多样化的应用场景。随着Transformer模型的广泛应用,尤其是基于序列到序列架构的模型[14]、[15],文本到SQL的研究取得了显著进展。例如,IRNet[16]和RAT - SQL[1]采用了关系感知注意力机制,将数据库模式信息与SQL生成过程紧密结合。在大语言模型(LLM)被广泛证明在自然语言处理(NLP)任务中具有强大能力后,越来越多的研究探索其在文本到SQL任务中的潜力。诸如QDecomp[17]、C3[18]、QDMR[19]和DIN - SQL[8]等方法引入了任务分解和推理策略,如思维链(Chain of Thought,CoT)[20],以逐步提高SQL生成性能。在SQL生成过程中,使用大语言模型生成多个候选SQL语句并选择最佳候选的方法已被证明是有效的[21] - [23]。例如,可以通过不同的提示生成多个候选SQL,然后选择最优解[24]。这种策略无疑可以提高生成的准确性。相比之下,我们的方法仅分别基于完整模式和简化模式生成两条候选SQL语句,从而显著减少了标记(tokens)的使用并显著提高了效率。
模式链接(Schema linking)是文本到SQL(text-to-SQL)任务中的关键步骤,旨在识别与自然语言查询相关的数据库表和列。为了加强模式信息的整合并捕捉其与问题的关系,如RAT - SQL [16]、模式图神经网络(SchemaGNN) [25]和影子图神经网络(ShadowGNN) [26]等模型采用了关系感知的自注意力机制。此外,基于自注意力的双图聚合(SADGA) [27]引入了一种新颖的双图框架,旨在对自然语言问题和数据库模式中的结构信息进行交互式编码和聚合。由于大语言模型(LLM)在自然语言处理(NLP)任务中表现出色,许多研究试图将其应用于模式链接任务。例如,国际象棋(CHESS) [11]通过从数据库目录和数据库值中检索相关信息,实现了更准确的模式链接。另一种方法,多提示多候选SQL(MCS - SQL) [10]依赖于使用多个提示并从大语言模型中采样多个响应,利用大语言模型的大样本库过滤掉不相关的表和列,以减少错误匹配的可能性。我们采用双向模式链接方法,深入挖掘数据库提供的外部知识,并分析生成的初始SQL语句与回答用户问题所需元素之间的关系。
图1:该框架由四个主要组件组成:(1)初步SQL生成;(2)结合上下文信息增强的SQL生成;(3)二元选择策略;(4)多轮自我修正。
三、方法
在本节中,我们介绍RSL - SQL,这是一个使用大语言模型(LLMs)进行文本到SQL转换的提议框架。如图1所示,RSL - SQL由四个关键组件组成:1)双向模式链接;2)上下文信息增强;3)二元选择策略;4)多轮自我修正。
该框架首先进行双向模式链接,以尽可能全面地召回所有必要的数据库元素,实现高召回率。接下来,上下文信息增强进一步提高模式链接的正向增益。随后,应用二元选择策略来最大化模式链接的正向增益,同时减少任何负面影响。最后,多轮自我修正迭代地改进生成的任何错误SQL。以下各节将详细讨论这些组件。算法1概述了该策略生成最终SQL输出的逐步过程。
A. 提示工程
利用大语言模型(LLMs)完成文本到SQL(结构化查询语言)的任务,需要仔细考虑提示工程,因为它会影响模型在不同数据库上的可移植性以及生成SQL查询的准确性。在本文中,我们考虑以下关键输入元素:
数据库模式 ( S ) \left( \mathcal{S}\right) \; (S) 有关数据库结构的详细信息,如表名、列名和外键关系。提供此模式对于帮助大语言模型理解现实世界中多样化的数据库架构,并确保生成的查询引用适当的表和列至关重要。
值样本(V)从每个表中随机选择几行,使大语言模型能够更好地理解每列的潜在值以及表和列的语义。对于过长的值,我们会进行截断以控制输入大小。
模式描述 ( D ) \left( \mathcal{D}\right) \; (D) 文本描述,为任何具有确定模式的数据库中的所有表和列提供额外的语义上下文。我们按照文献 [28] 中的方法,利用大语言模型(LLMs)生成模式描述 D \mathcal{D} D ,以丰富每个数据库所有模式元素的语义上下文。
小样本示例 ( E ) \left( \mathcal{E}\right) \; (E) 对于每个问题,我们从训练集中检索几对自然语言问题及其对应的 SQL 查询。为了找出与目标问题最相似的问题,我们采用基于欧几里得距离的问题选择器来选择前 k 对,具体方法完全遵循文献 [9]。
用户问题(Q)用户提出的自然语言问题,作为 SQL 翻译的主要输入。
额外上下文(可选)©任何可以澄清用户问题的补充信息,如定义、约束条件或特定领域的知识。
我们在图 2 中展示了上述元素的各个部分在大语言模型(LLMs)的提示中是如何组织的。
B. 步骤 1:双向模式链接(BSL)
我们首先介绍我们的双向模式链接方法。双向模式链接的流程图如图3所示。在这个过程中,基于完整的数据库模式生成一个初步的SQL查询。
- 正向模式链接(FSL):正向模式链接旨在从完整的数据库模式中直接识别与 Q \mathcal{Q} Q 潜在相关的模式元素。受文献[10]的启发,我们输入完整模式 S \mathcal{S} S 、值样本 V \mathcal{V} V 和用户的问题 Q \mathcal{Q} Q 。然后,我们提示大语言模型(LLMs)识别相关表并将其格式化为表名,将相关列格式化为表名.列名。如果有额外的上下文 C \mathcal{C} C 可用,我们会遍历所有列名,并将出现在 C \mathcal{C} C 中的列名添加到列表中。这个组合列表形成了一组表和列,记为 L f w d {L}_{\mathrm{{fwd}}} Lfwd 。
图2:提示中元素的组织。
-
初步SQL生成:我们的目标是使用完整模式 S \mathcal{S} S 生成初步的SQL查询 S Q L 1 {\mathrm{{SQL}}}_{1} SQL1 。大语言模型(LLMs)的输入组件包括完整模式 S \mathcal{S} S 、值样本 V \mathcal{V} V 、小样本示例 E \mathcal{E} E 、用户问题 Q \mathcal{Q} Q 和额外上下文 C \mathcal{C} C 。我们还将前向模式链接的结果 L f w d {L}_{\mathrm{{fwd}}} Lfwd 作为补充上下文,我们发现这可以略微提高初步SQL查询的准确性。这可以形式化表示为: S Q L 1 = f L L M ( S , V , E , Q , C , L f w d ) (1) {\mathrm{{SQL}}}_{1} = {f}_{\mathrm{{LLM}}}\left( {\mathcal{S},\mathcal{V},\mathcal{E},\mathcal{Q},\mathcal{C},{L}_{\mathrm{{fwd}}}}\right) \tag{1} SQL1=fLLM(S,V,E,Q,C,Lfwd)(1) 我们不包含模式描述 D \mathcal{D} D ,因为在完整模式中用段落描述每个表和列会导致输入过长,可能会超过一些大语言模型(LLMs)的长度限制。
-
反向模式链接(Backward Schema Linking,BSL):反向模式链接是正向模式链接的补充,在该方法中,我们解析初步的SQL查询语句 S Q L 1 {\mathrm{{SQL}}}_{1} SQL1 ,以提取一组额外的引用表和列 L b w d {L}_{\mathrm{{bwd}}} Lbwd 。对于数据库中的每个元素表名.列名,如果列名在生成的初步SQL中被使用,则会相应地被召回。列名精确匹配方法可能会导致召回一些冗余的列。当然,你也可以使用sqlglot [29]工具来解析SQL,以准确召回SQL使用的表名.列名。
两种方法各有优缺点:使用全列名匹配可以提高召回率,但可能会召回更多不相关的列;而使用SQLGlot工具的优点是噪声较少,但召回率会降低。此外,如果初步的SQL本身存在错误,若使用sqlglot工具召回方法,即使经过简化模式处理,仍可能会出现问题。相比之下,虽然精确匹配方法会引入冗余列,但基于简化模式生成的SQL的出错概率会降低。因此,我们最终选择使用列名的精确匹配来实现反向模式链接。
这一步至关重要,因为如果 S Q L 1 {\mathrm{{SQL}}}_{1} SQL1 已经正确,那么 L bwd {L}_{\text{bwd }} Lbwd 应该包含所有必要的元素。
- 模式简化:我们将正向和反向模式链接的结果合并,以获得更完整的表和列子集,即 L f w d ∪ L b w d {L}_{\mathrm{{fwd}}} \cup {L}_{\mathrm{{bwd}}} Lfwd∪Lbwd ,并简化数据库模式、值样本和模式描述,得到它们的精简版本 S ′ , V ′ {\mathcal{S}}^{\prime },{\mathcal{V}}^{\prime } S′,V′ 和 D ′ {\mathcal{D}}^{\prime } D′ ,我们将此称为双向模式链接。它可以显著减少与用户问题无关的冗余数据库信息,缩短所需的输入长度,并减少后续 SQL 生成的决策空间,同时保持必要模式元素的高召回率。
图 3:双向模式链接框架。 L fwd {L}_{\text{fwd }} Lfwd 和 L bwd {L}_{\text{bwd }} Lbwd 分别指正向模式链接和反向模式链接的结果。
C. 步骤 2:上下文信息增强(CIA)
模式链接(Schema linking)简化了数据库结构,并将大语言模型(LLM)的注意力集中在相关信息上。为了进一步发挥这一优势,我们利用大语言模型独立生成SQL语句的关键组件,包括模式元素、条件以及SQL中包含的关键字。然后,我们将这些组件作为额外信息输入,并附上简化模式中每列的详细描述。最后,我们根据这些综合输入生成完整的SQL语句。具体示例见图4。
- SQL组件生成:我们输入用户查询 Q \mathcal{Q} Q 、简化模式 S ′ {\mathcal{S}}^{\prime } S′ 、值样本 V ′ {\mathcal{V}}^{\prime } V′ 、列描述 D ′ {\mathcal{D}}^{\prime } D′ 以及可选上下文 C , S Q L \mathcal{C},{SQL} C,SQL 。组件生成旨在预先生成SQL生成所需的每个组件,其中包括:
-
元素 ( H E ) \left( {H}_{\mathbf{E}}\right) (HE) :SQL查询可能需要的表和列的列表,这与前向模式链接(forward schema linking)完全相同。
-
条件 ( H C ) \left( {H}_{\mathrm{C}}\right) (HC) :通过对问题进行分解和分析得出的WHERE子句可能的条件和约束。
-
关键字 ( H K ) \left( {H}_{\mathbf{K}}\right) (HK) :通过定位问题中的关键指示词确定的可能相关的SQL关键字(例如,DISTINCT、GROUP BY)。
我们将简化的模式描述 D ′ {\mathcal{D}}^{\prime } D′ 与大语言模型生成的 H E , H C {H}_{\mathrm{E}},{H}_{\mathrm{C}} HE,HC 和 H K {H}_{\mathrm{K}} HK 一起定义为上下文增强信息,统称为 H Aug = {H}_{\text{Aug }} = HAug = { D ′ , H E , H C , H K } \left\{ {{\mathcal{D}}^{\prime },{H}_{\mathrm{E}},{H}_{\mathrm{C}},{H}_{\mathrm{K}}}\right\} {D′,HE,HC,HK} ,以帮助大语言模型更好地理解简化的数据库模式和目标SQL语句。
- 基于简化模式的SQL生成:我们基于简化模式生成另一个SQL查询。大语言模型(LLM)的提示信息包括简化模式
S
′
{\mathcal{S}}^{\prime }
S′ 、值样本
V
′
{\mathcal{V}}^{\prime }
V′ 、上下文增强信息
H
A
u
g
{H}_{\mathrm{{Aug}}}
HAug 、小样本示例
E
\mathcal{E}
E 、用户问题
Q
\mathcal{Q}
Q 以及可选的问题上下文
C
\mathcal{C}
C 。这一过程可以形式化表示为:
S
Q
L
2
=
f
L
L
M
(
S
′
,
V
′
,
H
A
u
g
,
E
,
Q
,
C
)
(2)
{\mathrm{{SQL}}}_{2} = {f}_{\mathrm{{LLM}}}\left( {{\mathcal{S}}^{\prime },{\mathcal{V}}^{\prime },{H}_{\mathrm{{Aug}}},\mathcal{E},\mathcal{Q},\mathcal{C}}\right) \tag{2}
SQL2=fLLM(S′,V′,HAug,E,Q,C)(2)
图4:上下文信息增强示例。
D. 步骤3:二元选择策略(BSS)
这种二元选择策略是降低模式链接风险的重要一步。实际上,完整模式和简化模式各有优势。前者保留了完整的数据库结构,但存在冗余信息;而后者去除了大量冗余信息,但存在信息丢失的风险。使用大语言模型(LLM)比较两个独立生成的SQL并选择最佳的一个,可以更形象地理解为一种风险对冲。图5展示了一个具体示例。
我们生成两个SQL查询:从完整模式
S
\mathcal{S}
S 生成的
S
Q
L
1
{\mathrm{{SQL}}}_{1}
SQL1 以确保结构完整性,以及从简化模式
S
′
{\mathcal{S}}^{\prime }
S′ 生成的
S
Q
L
2
{\mathrm{{SQL}}}_{2}
SQL2 以减少噪声。为了选择最优查询
S
Q
L
3
{\mathrm{{SQL}}}_{3}
SQL3 ,我们使用了大语言模型(LLM)。
S
Q
L
1
{\mathrm{{SQL}}}_{1}
SQL1 和
S
Q
L
2
{\mathrm{{SQL}}}_{2}
SQL2 都会被执行,生成结果
R
1
{\mathcal{R}}_{1}
R1 和
R
2
{\mathcal{R}}_{2}
R2 用于正确性评估。为了评估这些查询,我们利用用户的问题
Q
\mathcal{Q}
Q 、额外的上下文信息
C
\mathcal{C}
C 、简化的模式
S
′
{\mathcal{S}}^{\prime }
S′ 、值样本
V
′
{\mathcal{V}}^{\prime }
V′ 和小样本示例
E
\mathcal{E}
E 。然后,大语言模型(LLM)会分析
R
1
{\mathcal{R}}_{1}
R1 和
R
2
{\mathcal{R}}_{2}
R2 ,选择最优查询作为
S
Q
L
3
{\mathrm{{SQL}}}_{3}
SQL3 ,以确保其与
Q
\mathcal{Q}
Q 在语义上保持一致。这一过程可以形式化表示为:
S
Q
L
3
=
f
L
L
M
(
S
′
,
V
′
,
D
′
,
E
,
Q
,
C
,
{\mathrm{{SQL}}}_{3} = {f}_{\mathrm{{LLM}}}\left( {{\mathcal{S}}^{\prime },{\mathcal{V}}^{\prime },{\mathcal{D}}^{\prime },\mathcal{E},\mathcal{Q},\mathcal{C},}\right.
SQL3=fLLM(S′,V′,D′,E,Q,C,
S
Q
L
1
,
S
Q
L
2
,
R
1
,
R
2
)
(3)
\left. {{\mathrm{{SQL}}}_{1},{\mathrm{{SQL}}}_{2},{\mathcal{R}}_{1},{\mathcal{R}}_{2}}\right) \tag{3}
SQL1,SQL2,R1,R2)(3)
图5:二元选择策略示例。
E. 步骤4:多轮自我修正(MTSC)
无法执行的查询被视为错误查询。同样,空的执行结果可能表示存在故障。我们应用规则来识别高错误概率的查询,以便进行迭代优化。
- 迭代优化过程: S Q L 3 {\mathrm{{SQL}}}_{3} SQL3 可能仍然包含语法错误或产生空结果。如果执行过程中出现语法错误或结果集为空,我们会捕获并将此结果记录为 E ( 0 ) {E}^{\left( 0\right) } E(0) 。
图 6:多轮自我修正流程图。
对于极有可能出错的SQL查询,我们采用基于多轮对话的修正流程。首先,如图6所示,我们将用户的问题 Q \mathcal{Q} Q 、上下文 C \mathcal{C} C 、简化模式 S ′ {\mathcal{S}}^{\prime } S′ 、值样本 V ′ {\mathcal{V}}^{\prime } V′ 、示例 E \mathcal{E} E 、查询语句 S Q L 4 ( 0 ) {\mathrm{{SQL}}}_{4}^{\left( 0\right) } SQL4(0) (初始化为 S Q L 3 {\mathrm{{SQL}}}_{3} SQL3 )以及错误信息 E ( 0 ) {E}^{\left( 0\right) } E(0) 提供给大语言模型(LLM)。然后,大语言模型会生成一条新的SQL语句并执行。如果仍然存在错误或结果为空,我们会告知大语言模型SQL错误,继续对话,不断迭代,直到达到最大对话轮数。这一过程可以形式化表示为: S Q L 4 ( i + 1 ) = f L L M ( S ′ , V ′ , D ′ , E , Q , C , S Q L 4 ( ≤ i ) , E ( ≤ i ) ) (4) {\mathrm{{SQL}}}_{4}^{\left( i + 1\right) } = {f}_{\mathrm{{LLM}}}\left( {{\mathcal{S}}^{\prime },{\mathcal{V}}^{\prime },{\mathcal{D}}^{\prime },\mathcal{E},\mathcal{Q},\mathcal{C},{\mathrm{{SQL}}}_{4}^{\left( \leq i\right) },{E}^{\left( \leq i\right) }}\right) \tag{4} SQL4(i+1)=fLLM(S′,V′,D′,E,Q,C,SQL4(≤i),E(≤i))(4) 2) 终止条件:当 S Q L 4 i {\mathrm{{SQL}}}_{4}^{i} SQL4i 成功执行且无语法错误、返回非空结果,或达到最大迭代次数 N N N 时,细化过程结束。
四、实验
A. 数据集
-
BIRD数据集:BIRD数据集[38]是一个大规模、跨领域的文本转SQL(Text-to-SQL)数据集。其关键特征在于强调处理数据库值,同时凸显了外部知识库数据质量不佳、数据库值存在噪声以及SQL查询效率等方面带来的挑战,尤其是在大规模数据库环境中。BIRD数据集中的SQL查询通常比Spider数据集中的查询更为复杂。
-
Spider数据集:Spider数据集[39]是一个大规模、跨领域的文本转SQL任务数据集。其关键特征是不仅包含复杂的SQL查询,还涵盖了多表数据库,因此它是测试模型泛化能力的重要资源。
-
子采样开发集(SDS):为了便于进行消融研究、降低计算成本并保留BIRD开发集的分布,我们采用了CHESS[11]中概述的子采样开发集。SDS由BIRD开发集中每个数据库的 10 % {10}\% 10% 组成。
B. 评估指标
-
执行准确率(EX):该指标定义为预测的SQL查询输出与真实SQL查询完全匹配的查询所占的比例。我们以评估集中查询的百分比形式报告执行准确率(EX)。
-
有效效率得分(VES):它衡量模型生成的有效SQL查询的效率。“有效SQL查询”是指那些结果集与真实SQL查询相匹配的预测SQL查询。
-
非严格召回率(NSR):在现有论文中,召回率尚未明确定义,但它在确定模式链接后SQL生成的准确性方面起着关键作用。因此,我们对召回率给出了精确的定义。
我们将非严格召回率(NSR)定义为每个问题的链接模式集与真实模式集的交集元素数量之和与真实模式集元素总数的比率。从数学角度来看,这可以表示为: NSR = ∑ i = 1 n ∣ S g t , i ∩ S ~ i ∣ ∑ i = 1 n ∣ S g t , i ∣ (5) \operatorname{NSR} = \frac{\mathop{\sum }\limits_{{i = 1}}^{n}\left| {{S}_{\mathrm{{gt}}, i} \cap {\widetilde{S}}_{i}}\right| }{\mathop{\sum }\limits_{{i = 1}}^{n}\left| {S}_{\mathrm{{gt}}, i}\right| } \tag{5} NSR=i=1∑n∣Sgt,i∣i=1∑n Sgt,i∩S i (5) 其中 n n n 是问题的数量, S g t , i {S}_{\mathrm{{gt}}, i} Sgt,i 表示第 i i i 个问题的真实模式元素, S ~ i {\widetilde{S}}_{i} S i 表示第 i i i 个问题的链接模式元素。
- 严格召回率(SRR):如果生成正确 SQL 查询所需的所有列都包含在 S ~ \widetilde{S} S 中,则该值视为 1;否则,该值为 0。严格召回率是成功召回所有所需模式元素的示例数与示例总数的比率。 S R R = ∑ i = 1 n I ( S ~ i ⊇ S g t , i ) n (6) \mathrm{{SRR}} = \frac{\mathop{\sum }\limits_{{i = 1}}^{n}\mathbb{I}\left( {{\widetilde{S}}_{i} \supseteq {S}_{\mathrm{{gt}}, i}}\right) }{n} \tag{6} SRR=ni=1∑nI(S i⊇Sgt,i)(6) 我们的方法旨在最大化 SRR,同时尽可能减小 ∣ S ~ ∣ \left| \widetilde{S}\right| S 的大小以减少提示长度。
表一:不同方法和模型在 BIRD 开发集上的执行准确率和有效效率得分比较。开放列表示代码是否发布。* 符号表示微调方法。
严格召回率是一种评估模式链接召回效果的指标。它被定义为正确召回的列组合的比例。具体而言,如果模式链接召回的列组合与正确组合完全匹配,则认为召回成功。然而,由于目前只有一个正确的SQL,我们首先采用公式6中描述的计算方法。
C. 基线方法
在我们的实验中,我们将所提出的方法与一系列不同的最先进文本到SQL(Text-to-SQL)方法进行了比较。这些基线方法采用了各种策略来提升性能,代表了该领域的当前前沿水平。DIN - SQL [8]和MAC - SQL [35]采用任务分解策略,将复杂查询分解为可处理的子任务。E - SQL [36]和CHESS [11]专注于模式丰富化和链接,旨在弥合自然语言查询与数据库结构之间的差距。SQL - PaLM [32]和SuperSQL [33]采用不同的提示和微调技术,以适应大语言模型(LLM)进行SQL生成。TA - SQL [28]和CodeS [31]引入了减轻基于大语言模型的SQL生成中幻觉问题的策略。DAIL - SQL [7]旨在处理复杂的数据库环境。还包括基于多阶段策略的方法,例如采用两阶段微调的DTS - SQL [30]、采用多智能体生成方法的MAG - SQL [34],以及利用多个提示和多项选择的MCS - SQL [10]。MSc - SQL [37]通过对多个SQL查询结果进行采样和比较,缩小了较小开源模型的性能差距。
表二:Spider测试集上执行准确率(EX)的比较。 ∗ {}^{ * } ∗ 符号表示微调方法。
五、结果与分析
A. 主要结果
-
BIRD数据集结果:我们使用GPT - 4o和DeepSeek模型在BIRD开发集上进行了实验,以展示我们提出的RSL - SQL框架的性能。我们将其与17个基线模型进行了比较,结果如表一所示。我们对基于微调的方法和基于大语言模型(LLM)的方法进行了对比分析。在基于微调的方法中,MSc - SQL基线模型目前在BIRD开发集上保持着最优(SOTA)指标。然而,其执行准确率仍略低于我们使用GPT - 4o模型的框架。值得注意的是,表1中展示的几个使用GPT - 4模型的基线模型,其性能未能达到我们使用DeepSeek模型的框架。在使用GPT - 4o模型的相同条件下,与E - SQL方法相比,我们的方法不仅实现了更高的执行准确率,而且成本显著降低。我们的框架以67.21%的执行准确率在开源领域树立了新的最优(SOTA)基准。
-
Spider测试结果:为了评估所提出的RSL - SQL的泛化能力,我们进一步在Spider测试集上进行了实验,结果如表二所示。使用DeepSeek模型时,RSL - SQL的执行准确率达到了 87.7 % {87.7}\% 87.7% ,使用GPT - 4o模型时,该准确率提高到了87.9%。这一性能与最新的MCS - SQL模型(GPT - 4)非常接近,后者的执行准确率为89.6%。这凸显了RSL - SQL强大的泛化能力及其在生成高质量文本到SQL转换方面的潜力。
表三:不同方法在BIRD开发集上的模式召回率(SRR)和非严格召回率(NSR)指标对比,其中Avg. T和Avg. C分别表示每个问题输入的平均表数和列数。DeepSeek缩写为(D),GPT - 4o缩写为(G)。
- 模式链接结果:模式链接的质量会影响最终生成的SQL的准确性,也会影响输入标记的长度。为了评估我们提出的双向模式链接的效果,我们在BIRD数据集上进行了实验,并报告了与以往研究相同的召回率指标。
如表三所示,CHESS方法通过检索结合使用大语言模型(LLMs)的多轮过滤来实现模式链接,严格召回率达到89.7%。MCS - SQL方法采用多提示和多选择解码策略,利用大语言模型进行迭代选择,严格召回率达到 89.8 % {89.8}\% 89.8% 。相比之下,我们的方法仅需一到两轮输入,显著减少了标记消耗。利用GPT - 4o模型,我们的双向模式链接方法在NSR和SRR指标上均达到了最优性能,完全召回了SQL生成所需的 94 % {94}\% 94% 列。
在性能方面,我们的正向模式链接的召回率相对较低,而反向模式链接的召回率接近 90 % {90}\% 90% ,这凸显了其至关重要性。值得注意的是,在以往的方法中,只有PET - SQL(PET - SQL)在Spider(Spider)测试数据集上应用了类似的策略,但它仅专注于表简化,而未处理列简化问题[9]。我们的方法不仅能召回绝大多数表,还能显著减少列的数量。此外,由于正向和反向模式链接具有高度互补性,两种方法的列的并集不会大幅增加列的总数。因此,我们的双向模式链接总体上达到了最优(SOTA)性能。
B. 分析
我们进行了消融实验,以研究我们提出的方法的每个组件对执行准确率(EX)的增量影响。这项在BIRD(BIRD)开发集上的实验结果见表IV。该表展示了DeepSeek(DeepSeek)和GPT - 4o在不同任务难度级别下的执行准确率,显示了逐步将不同实验步骤纳入模型所取得的效果。
- 提示词优化:对于大语言模型而言,提示词起着至关重要的作用。在进行实验之前,我们通过调整提示词的结构和所提供的信息对其进行优化。如表四所示,我们验证了提示词中包含的每条额外信息的有效性。
基础提示词基于完整的数据库模式构建,包括表名、列名和外键信息。它还包含用户问题和额外的上下文。少量样本示例的添加使DeepSeek和GPT - 4o的执行准确率分别提高了 10 % {10}\% 10% ,凸显了这些示例的重要性。随后,额外数据样本的加入使准确率进一步提高了 2 % 2\% 2% ,标志着我们的提示词调整过程完成。在对提示词进行微调后,即使不添加任何额外组件,使用GPT - 4o和DeepSeek模型时的执行准确率分别达到了62.06%和57.63%。这进一步证明了我们提示词的稳健性。
- RSL - SQL框架:如表四所示,我们框架的每一步都有效地提高了执行准确率,提升幅度在1%到3%之间,最终帮助该框架达到了开源的最优(SOTA)性能。在这些步骤中,步骤2和步骤3是我们方法的核心,贡献了超过 70 % {70}\% 70% 的整体提升。
a) 步骤1:BSL:在之前提示的基础上,我们将前向模式链接(Forward Schema Linking)的结果融入提示中,以生成初步的SQL查询。这种整合带来了约 1 % 1\% 1% 的性能提升。这个初步的SQL是在完整的数据库模式中生成的,确保了数据库结构的完整性。在这一步,我们还使用双向模式链接方法来简化数据库模式,旨在尽可能多地召回必要的列,从而减少后续步骤中的输入噪声。
表四:BIRD开发集上不同难度级别下的执行准确率以及各组件的贡献。
图7:负面影响与积极收获。
表五:不同方法的令牌消耗与成本分析。
b) 步骤2:上下文信息增强(CIA):如表四所示,此步骤是我们方法的核心步骤之一,使执行准确率提升了 2 % 2\% 2% 至 3 % 3\% 3% 。如图7a所示,模式链接(schema linking)有时会将原本在完整模式下正确的SQL查询转变为错误的查询,从而引入错误,这表明模式链接可能存在负面影响。上下文信息增强可能会略微加剧这种负面影响;然而,如图7b所示,它通过大幅增加纠正后查询的数量,显著提高了模式链接的正向收益。通过对20个示例的抽样检查,我们发现生成的文本信息有效地帮助模型理解用户查询与数据库之间的映射关系,以及识别关键词匹配情况。这就是该步骤显著提高正向收益的原因。由于正向收益远远超过负面影响,上下文信息增强有效地降低了模式链接的风险。
c) 步骤3:二元选择策略(BSS):二元选择策略的有效性在于,完整的数据库结构信息能使大语言模型(LLM)全面了解整个数据库。然而,这也可能导致信息冗余和干扰。相比之下,简化的数据库结构可减少此类干扰,但可能导致列召回不完整,从而影响数据库结构的完整性。因此,这两种方法生成的SQL各有优缺点。
如表四所示,这一步在我们的方法中起着关键作用,使执行准确率提高了1.5%。这一步的目的是降低与模式链接(schema linking)相关的风险,减少其负面影响,同时增加正面收益。如图7a所示,应用二元选择策略后,无论使用DeepSeek模型还是GPT - 4o模型,负面影响都显著降低。图7b表明,使用DeepSeek模型可显著增加正面收益,而GPT - 4o模型则使正面收益略有增加。这是因为,在第二步使用GPT - 4o模型进行上下文信息增强(CIA)之后,执行准确率已经达到 65.06 % {65.06}\% 65.06% ,通过选择策略进一步提升性能的潜力变得有限。
表六:第二步中信息增强组件对执行准确率的影响。
- 令牌消耗与成本:为了验证我们方法的低消耗性,我们对MAC - SQL、TA - SQL和E - SQL方法进行了实验,并估算了它们的令牌消耗和成本。结果如表五所示
比较结果表明,采用DeepSeek模型的RSL - SQL开销更低,并且比一些使用GPT - 4模型的方法表现更好。当使用GPT - 4o模型时,E - SQL方法消耗的令牌数量是我们方法的三倍,性能大约低 2 % 2\% 2% 。
C. 消融实验
- 双向模式链接:我们的双向模式链接由两个部分组成:前向模式链接和后向模式链接。为了评估仅使用前向或后向模式链接对后续步骤的影响,我们进行了消融实验。结果如图8所示
如图8a所示,当使用GPT - 4o模型时,双向›模式链接在后续步骤中实现的执行准确率高于仅使用前向或后向模式链接的情况。然而,图8b表明,对于DeepSeek模型,仅使用后向模式链接时,后续步骤的执行准确率比双向模式链接略高。这是因为,对于DeepSeek模型,虽然双向模式链接实现了更高的召回率,但也引入了更多的噪声,这对SQL生成产生了负面影响。这一现象与论文[40]的研究结果一致:对于较强的模型(例如GPT - 4o),精确率对执行准确率的影响较小,提高召回率通常会带来更高的执行准确率。相比之下,对于较弱的模型(例如DeepSeek),精确率的影响更为显著,过高的召回率并不一定意味着更高的执行准确率。
表七:子采样开发集上的执行准确率(EX), H E K C = { H E , H C , H K } {H}_{\mathrm{{EKC}}} = \left\{ {{H}_{\mathrm{E}},{H}_{\mathrm{C}},{H}_{\mathrm{K}}}\right\} HEKC={HE,HC,HK} 。
如图8所示,当使用GPT - 4o或DeepSeek模型时,仅基于前向模式链接结果的步骤2:CIA的执行准确率呈下降趋势。这是由于前向模式链接的召回率较低,进一步凸显了在模式链接过程中反向模式链接的必要性。
然而,即使在这些情况下,应用我们的二元选择策略后,基于前向模式链接结果的执行准确率显著提高,证明了该策略的有效性和鲁棒性。尽管前向模式链接的结果并不理想,可能会引入一些噪声,但其在提高召回率方面的作用不可或缺,为后续的模式链接优化奠定了坚实的基础。
- 上下文信息增强:步骤2:上下文信息增强(Contextual Information Augmentation,CIA)是我们的RSL - SQL框架的核心步骤之一,能显著提高正向增益。此步骤的关键功能在于其各个组件,其中生成的文本信息有助于大语言模型(LLM)理解用户查询与数据库之间的映射关系,以及关键词的使用方式。如表VI所示,这些组件使性能提升了约 2 % 2\% 2% 至 3 % 3\% 3% 。无论是使用DeepSeek还是GPT - 4o,列描述的性能提升都超过了1%。然而,对于SQL组件,使用DeepSeek时的性能提升仅为 0.46 % {0.46}\% 0.46% 。通过对部分示例进行抽样,我们发现DeepSeek生成的组件文本质量较低,导致性能提升不太显著。
图8:在BIRD开发集上,基于前向(Forward.)、后向(Backward.)和双向模式链接(Bidirectional)的结果进行模式链接,并展示了每个步骤的执行准确率。
为了进一步验证SQL组件生成(SQL Components Generation)中每个组件的有效性,我们在子采样开发集(Subsampled Development Set)上进行了消融实验。如表VII所示,无论是在DeepSeek还是GPT - 4o模型上,SQL组件生成的每个组件都对执行准确率有显著贡献。此外,SQL组件生成整体上可以将执行准确率提高超过 2 % 2\% 2% ,这充分证明了其在模型性能优化方面的有效性。
六、案例研究
RSL - SQL框架通过上下文信息增强、二元选择策略和多轮自我修正来确保SQL生成的正确性。如图9所示,即使在早期步骤中出现错误,后续步骤也可以通过特定方法纠正这些错误并提高SQL的准确率。
该框架的核心在于步骤2:上下文信息增强(CIA)和步骤3: B S S {BSS} BSS 。为了更直观地说明上下文信息增强如何通过增加正向增益来提升性能,以及二元选择策略如何通过减少负面影响来降低风险,我们选择了两个具有代表性的示例来详细展示其底层机制。
A. 最大化正向增益
每列的描述无疑是有用的,因为它有助于大语言模型(LLM)理解每列的具体含义,并在用户问题和列之间建立映射关系。大语言模型生成的文本信息涵盖数据库元素、SQL关键字和查询条件。其中,进一步筛选后的数据库元素可以引导大语言模型关注更有可能使用的元素;生成的SQL关键字可以提醒大语言模型注意关键但常被忽视的约束条件;生成的条件是通过分解用户问题得到的,能够帮助大语言模型更有序地逐步解决问题。有了这些增强信息,大语言模型能够将更多注意力集中在之前关注不足的关键部分,从而显著提高正向收益。例如,以下是BIRD(鸟类数据库,具体需结合实际场景确定)中的一个示例
在这个例子中, S Q L 1 {\mathrm{{SQL}}}_{1} SQL1 的错误生成源于未能考虑并行条件,导致初始SQL出现偏差。生成的文本信息全面涵盖了SQL生成所需的关键列,并且包含关键字“MIN”明确表明了存在并行条件的可能性。这些补充信息使大语言模型(LLM)能够更好地理解查询的语义细微差别和数据库的结构,有效地引导其生成正确的SQL。
图9:展示我们框架鲁棒性的四个示例。
B. 最小化负面影响
二元选择策略是我们方法中的关键一步。通过分别从使用完整模式和简化模式生成的两条语句中选择更准确的SQL,该策略在保留模式完整性和最小化噪声之间取得了平衡。下面提供一个示例说明,
在步骤2中引入新组件可能不可避免地导致一些原本正确的SQL语句被错误修改。然而,我们的二元选择策略尽可能地将这种负面影响降到最低。通过纳入执行信息,该策略使大语言模型(LLM)能够进一步分析候选结果,有助于更准确地选择正确的SQL,并显著降低相关风险。
七、结论
我们提出了RSL - SQL框架,该框架在BIRD开发集上达到了开源的最先进性能。该框架采用了双向模式链接方法,实现了 94 % {94}\% 94% 的严格召回率。我们深入分析了模式链接召回率如何影响不同模型的SQL生成执行准确性。通过消融实验,我们严格验证了框架内每个组件的有效性,并全面研究了它们的运行机制。此外,我们比较了各种方法的计算成本,表明我们的框架在性能和成本之间实现了出色的平衡,是一种高效且经济的解决方案。