EXPO-SQL:基于执行的子句级策略优化用于Text-to-SQL

arXiv cs.CL 论文

摘要

EXPO-SQL 提出了一种细粒度的子句级策略优化方法用于 Text-to-SQL,通过执行反馈为每个子句而不是每个查询分配奖励,显著提升了性能,优于现有的监督微调和强化学习方法。

arXiv:2606.23693v1 Announce Type: new 摘要:Text-to-SQL 使用户能够通过自然语言生成可执行的 SQL 查询来查询数据库。最近的方法越来越多地采用基于大语言模型的强化学习(RL),利用执行反馈进行训练。然而,现有的 RL 方法为 SQL 查询中的所有子句分配统一的查询级奖励,将正确和错误的子句等同对待。这种粗粒度的奖励设计导致正确 SQL 生成的学习信号不足。为了解决这个问题,我们提出了 EXPO-SQL(基于执行的子句级策略优化用于 Text-to-SQL),它通过子句级奖励提供细粒度的监督。为了分配子句级奖励,我们的方法通过分析执行结果(包括错误消息和子句增量执行)来识别错误子句。在广泛使用的 Text-to-SQL 基准上的实验表明,EXPO-SQL 通过细粒度的子句级学习显著优于现有的监督微调、提示和基于 RL 的方法。我们的代码可在 https://github. com/jhn25/EXPO-SQL 获取。
查看原文
查看缓存全文

缓存时间: 2026/06/24 07:43

# EXPO-SQL: 基于执行的子句级策略优化方法用于文本到SQL转换  
来源:https://arxiv.org/html/2606.23693  
Jaehoon Lee, CheolWon Na, Suyoung Bae, Jin-Seop Lee, Jihyung Lee, YunSeok Choi, Jee-Hyong Lee∗  
韩国成均馆大学计算机与信息学院  
\{hoon1223, ncw0034, sybae01, wlstjq0602, jjklle, ys.choi, john\}@skku.edu  

###### 摘要  
文本到SQL技术通过生成可执行的SQL查询,使用户能够使用自然语言查询数据库。最近的方法越来越广泛地采用基于大型语言模型的强化学习(RL),以利用执行反馈进行训练。然而,现有的RL方法将均匀的查询级奖励分配给SQL查询中的所有子句,将正确子句和错误子句同等对待。这种粗粒度奖励设计导致正确生成SQL的学习信号不足。为解决此问题,我们提出了 **EXPO-SQL**(基于执行的子句级策略优化用于文本到SQL),它通过子句级奖励提供细粒度监督。为了分配子句级奖励,我们的方法通过分析执行结果(包括错误消息和逐子句增量执行)来识别错误的子句。在广泛使用的文本到SQL基准上的实验表明,EXPO-SQL通过细粒度的子句级学习显著优于现有的监督微调、提示和基于RL的方法。我们的代码可在 https://github.com/jhn25/EXPO-SQL 获取。

EXPO-SQL: 基于执行的子句级策略优化用于文本到SQL  
Jaehoon Lee, CheolWon Na, Suyoung Bae, Jin-Seop Lee, Jihyung Lee, YunSeok Choi††thanks: 通讯作者, Jee-Hyong Lee∗  
韩国成均馆大学计算机与信息学院  
\{hoon1223, ncw0034, sybae01, wlstjq0602, jjklle, ys.choi, john\}@skku.edu  

## 1 引言  
文本到SQL旨在根据给定的自然语言问题和数据库模式生成可执行的SQL查询。这是一项核心技术,通过使非专业用户能够直接查询数据库来促进数据检索(Iacob 等人,2020 (https://arxiv.org/html/2606.23693#bib.bib4);Affolter 等人,2019 (https://arxiv.org/html/2606.23693#bib.bib5))。最近关于文本到SQL的研究越来越多地采用大型语言模型(LLM),利用它们强大的推理能力(Liu 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib9);Deng 等人,2022 (https://arxiv.org/html/2606.23693#bib.bib8);Maamari 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib6);Hong 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib7))。早期方法采用监督微调(SFT)来优化与黄金SQL查询的令牌级匹配(Gao 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib50);Pourreza 和 Rafiei,2024 (https://arxiv.org/html/2606.23693#bib.bib21))。基于提示的方法利用推理时的上下文学习和迭代改进(Gao 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib50);Pourreza 和 Rafiei,2024 (https://arxiv.org/html/2606.23693#bib.bib21))。然而,这两种方法仍然会产生错误的SQL查询,因为缺少针对文本到SQL推理的执行感知监督。

参见图注  
Figure 1: 奖励分配策略的比较。现有的RL方法将所有子句均匀分配查询级奖励,而EXPO-SQL分配子句级奖励,仅惩罚错误的子句。

为解决此问题,多项研究探索了面向文本到SQL生成的强化学习(RL)方法(Zhong 等人,2017 (https://arxiv.org/html/2606.23693#bib.bib10);Liang 等人,2018 (https://arxiv.org/html/2606.23693#bib.bib12);Shi 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib11);Liu 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib17))。这些方法使用执行结果作为奖励信号来优化模型策略(Ma 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib51);Yao 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib48);Zhai 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib49);Pourreza 等人,2025b (https://arxiv.org/html/2606.23693#bib.bib45);Weng 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib47);Zhang 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib46))。然而,这些基于RL的方法有一个局限性:它们依赖于查询级学习信号。通常,一个SQL查询由几个子句组成,例如SELECT、FROM、WHERE等。在实践中,执行失败往往是由少数几个子句的错误引起的,而不是整个SQL查询中的所有子句。然而,现有方法将相同的奖励分配给生成的SQL查询中的所有子句,如图1 (https://arxiv.org/html/2606.23693#S1.F1) 所示,即使只有FROM子句不正确,所有子句也获得相同的奖励。这种查询级奖励将正确子句和错误子句同等对待,导致粗粒度的信用分配(Pignatelli 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib14)),甚至惩罚了正确生成的子句。结果,模型只能收到粗粒度的学习信号,这不足以生成正确的SQL。

为了解决这种粗粒度信用分配问题,我们提出了 **EXPO-SQL**(基于执行的子句级策略优化用于文本到SQL),它分别评估SQL查询中每个子句的正确性,并通过子句级奖励提供细粒度监督。然而,在在线强化学习中评估每个子句仍然极具挑战性。首先,对SQL查询的词法分析无法确定哪些子句有错误。其次,由于SQL查询的一对多性质——即各种不同的查询可以产生相同的执行结果——直接与黄金SQL进行令牌匹配并不合适。最后,执行结果仅提供关于整个查询是否正确的是非二元反馈。为了克服这些限制,我们分析执行结果以识别错误子句,而不是直接将其用作二元奖励。我们首先将执行结果分为三种情况,并设计相应的策略:正确结果、不正确结果和执行错误。在 **正确结果** 的情况下(查询成功执行并产生正确答案),我们为所有子句分配正奖励。对于 **不正确结果**(查询可执行但产生错误答案),我们按照逻辑执行顺序分解生成的SQL查询,并增量执行每个子句。然后,我们分析添加每个子句前后结果的变化,以识别错误的子句。此外,在 **执行错误** 的情况下(查询执行失败),我们分析错误消息来识别导致失败的子句。针对每种情况,我们分析每个子句如何影响结果,并设计提供细粒度学习信号的子句级奖励。通过基于执行的分析,EXPO-SQL提供了更准确的子句级学习信号,这是现有查询级奖励的RL方法无法实现的。

我们在广泛使用的文本到SQL基准(包括 Spider (Yu 等人,2018 (https://arxiv.org/html/2606.23693#bib.bib24)) 和 BIRD (Li 等人,2023 (https://arxiv.org/html/2606.23693#bib.bib23)))上评估了 EXPO-SQL 的优越性,并与包括 SFT、提示和近期基于RL方法在内的各种基线进行了比较。实验结果表明,EXPO-SQL 通过有效的子句级学习信号显著提高了执行准确率,达到了最先进的性能。具体来说,EXPO-SQL 在 Spider-Dev 上比最佳RL基线高出1.2个百分点,在 BIRD-Dev 上高出2.4个百分点。在复杂查询上的提升更为显著,达到了5.6个百分点。

## 2 相关工作  

### 2.1 传统的文本到SQL方法  
早期的文本到SQL方法使用大规模文本-SQL对数据集对模型进行微调(Yang 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib40);Pourreza 和 Rafiei,2024 (https://arxiv.org/html/2606.23693#bib.bib21);Li 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib29), 2025b (https://arxiv.org/html/2606.23693#bib.bib33)),近期的工作通过模式链接和查询分解引入了链式思维推理(Wei 等人,2022 (https://arxiv.org/html/2606.23693#bib.bib1))(Wang 等人,2025b (https://arxiv.org/html/2606.23693#bib.bib19);Qin 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib42))。随着LLM的出现,基于提示的方法得到了广泛研究,包括使用精心设计的示例进行上下文学习(Gao 等人,2023 (https://arxiv.org/html/2606.23693#bib.bib20);Pourreza 和 Rafiei,2023 (https://arxiv.org/html/2606.23693#bib.bib26);Lee 等人,2025b (https://arxiv.org/html/2606.23693#bib.bib52))、特定于SQL的链式思维提示(Dong 等人,2023 (https://arxiv.org/html/2606.23693#bib.bib18);Liu 和 Tan,2023 (https://arxiv.org/html/2606.23693#bib.bib54)),以及基于执行一致性的多候选选择策略(Lee 等人,2025a (https://arxiv.org/html/2606.23693#bib.bib55))。然而,这些方法没有利用执行反馈作为学习信号。

### 2.2 文本到SQL中的强化学习  
最近,强化学习被应用于文本到SQL,利用执行反馈(Ma 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib51);Pourreza 等人,2025b (https://arxiv.org/html/2606.23693#bib.bib45);Yao 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib48))。大多数方法采用 GRPO(Shao 等人,2024 (https://arxiv.org/html/2606.23693#bib.bib38))进行策略优化(Yao 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib48);Ma 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib51);Zhang 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib46);Pourreza 等人,2025b (https://arxiv.org/html/2606.23693#bib.bib45)),而一些方法则通过从执行结果构建偏好对来探索 DPO(Rafailov 等人,2023 (https://arxiv.org/html/2606.23693#bib.bib39))(Zhai 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib49))。

参见图注  
Figure 2: EXPO-SQL 的整体框架。根据执行结果和正确性,预测的查询被分为三种情况。针对每种情况,检测错误的子句以分配子句级奖励:正确结果没有错误子句(第3.2.1节 (https://arxiv.org/html/2606.23693#S3.SS2.SSS1)),不正确结果通过增量执行进行差异类型检测(第3.2.2节 (https://arxiv.org/html/2606.23693#S3.SS2.SSS2)),执行错误则利用错误消息和子句级追踪(第3.2.3节 (https://arxiv.org/html/2606.23693#S3.SS2.SSS3))。

由于执行结果仅提供二元反馈,一些方法设计了额外的奖励以获得更具信息量的信号。ReasoningSQL(Pourreza 等人,2025b (https://arxiv.org/html/2606.23693#bib.bib45))结合了 LLM-as-a-judge 评估与语法有效性和模式匹配奖励。RewardSQL(Zhang 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib46))引入了一个过程奖励模型来评估中间推理步骤。GraphRewardSQL(Weng 等人,2025 (https://arxiv.org/html/2606.23693#bib.bib47))提出了基于图的奖励并与黄金SQL进行比较。然而,这些方法在查询级别分配奖励,将所有子句同等对待,尽管只有特定子句是错误的。它们未能区分正确子句和错误子句,导致学习信号不足。

## 3 EXPO-SQL  
在本节中,我们介绍 EXPO-SQL,一种新颖的子句级强化学习框架。图2 (https://arxiv.org/html/2606.23693#S2.F2) 展示了 EXPO-SQL 的整体框架。我们不是将执行反馈用作查询级奖励,而是利用执行结果来识别子句级别的错误并设计子句级奖励。我们首先在第3.1节 (https://arxiv.org/html/2606.23693#S3.SS1) 中将文本到SQL生成建模为子句级策略优化。然后,我们在第3.2节 (https://arxiv.org/html/2606.23693#S3.SS2) 中介绍针对不同执行结果的基于执行的子句级奖励设计,并在第3.3节 (https://arxiv.org/html/2606.23693#S3.SS3) 中描述如何将这些奖励整合到策略优化中。

### 3.1 问题形式化  
给定一个自然语言问题和一个数据库模式,策略模型 \(\pi_{\theta}\) 生成一个SQL查询 \(O\)。我们将生成的SQL查询定义为 \(n\) 个子句的序列:\((c_1, c_2, \ldots, c_n)\),其中每个子句对应SQL查询的一个结构组件。生成的查询在数据库上执行以获得执行结果表 \(R_{pred}\),然后通过将 \(R_{pred}\) 与真实的 \(R_{\text{gold}}\) 进行比较来提取奖励信号。我们的目标是通过为单个子句 \(c \in O\) 分配差异化的奖励 \(r_c\) 来提供子句级学习信号,而非查询级奖励。为此,我们通过利用详细的执行反馈(包括错误消息和执行结果之间的差异)来识别错误子句 \(C_{\text{err}} \subseteq \{c_1, \ldots, c_n\}\)。基于识别出的错误子句,我们设计子句级奖励 \(r_c\),引导策略模型生成改进的SQL。

### 3.2 子句级奖励设计  
为了采用细粒度的子句级奖励,我们通过分析生成的SQL查询的执行结果来识别错误子句。由于用于识别错误子句的信息因执行结果而异,因此需要相应地采用不同的方法。因此,我们将执行结果分为以下三种情况:(1) **正确结果**:查询成功执行且 \(R_{pred} = R_{gold}\)。(2) **不正确结果**:查询可执行但 \(R_{pred} \neq R_{gold}\)。(3) **执行错误**:查询执行失败。针对每种情况,我们通过利用详细的执行反馈有效地识别 \(C_{\text{err}}\),并为每个子句 \(c \in O\) 分配不同的奖励 \(r_c\),以提供细粒度的学习信号。

#### 3.2.1 正确结果  
当生成的SQL查询成功执行并产生正确结果时,所有子句都被认为是正确的,即 \(C_{\text{err}} = \emptyset\)。因此,我们为所有子句分配相同的正奖励。

\[
r_c = +1.5 \quad \forall c \in O \tag{1}
\]

#### 3.2.2 不正确结果  
当生成的SQL查询可执行但执行结果不正确时,没有直接信息显示哪个子句导致了错误。在这种情况下,为了识别 \(C_{\text{err}}\),我们考虑分析 \(R_{pred}\) 和 \(R_{gold}\) 之间的差异。然而,由于这两个结果都显示了所有子句的累积效应,我们无法直接确定哪些子句导致了错误结果。为了应对这一挑战,我们利用每个SQL子句对结果执行不同操作的特点。通过分析这些子句特定的效应,我们可以追溯哪些子句导致了最终结果的差异。我们通过两个步骤实现这一点。首先,我们从 **执行结果中定义差异类型**,以指定每个子句可能产生的差异。其次,利用这些类型,我们执行 **子句级增量执行** 来检测每个子句实际产生的效应,从而识别 \(C_{\text{err}}\)。

级别     差异类型      描述
列       col_count     列数不同
          col_name     列名不同
行       row_order     行顺序不同
          row_dedup    重复计数不同
          row_subset   子集关系不同

相似文章

通过SFT和DPO学习Text-to-SQL的推理时机

arXiv cs.CL

提出了AutoThinkSQL,一个将自动思考机制集成到Text-to-SQL的SFT和DPO中的框架,使模型能够动态跳过简单查询的推理,并对复杂查询调用深度CoT,在Spider和BIRD基准测试上取得提升,同时将输出token减少24.6%,延迟减少17.1%。

SLPO:通过代理策略扩展潜在推理

Hugging Face Daily Papers

介绍了一种代理潜在策略优化(SLPO)方法,将结果奖励强化学习应用于自回归潜在推理器,实现测试时扩展和变长策略,从而在更难实例上提高准确率。