BASE-SQL:一种强大的开源Text-to-SQL基准方法
将自然语言转换为用于查询数据库的SQL语言(文本转SQL)具有广泛的应用前景,已引起广泛关注。目前主流的文本转SQL方法主要分为基于上下文学习(ICL)的方法和基于监督微调(SFT)的方法。ICL方法由于使用最先进的闭源模型而能够取得相对较好的结果。然而,在实际应用场景中,需要考虑数据隐私、SQL生成效率和成本等因素。SFT方法在这些方面具有一定优势。当前基于开源模型微调的方法缺乏易于实现且有效的
将自然语言转换为用于查询数据库的SQL语言(文本转SQL)具有广泛的应用前景,已引起广泛关注。目前主流的文本转SQL方法主要分为基于上下文学习(ICL)的方法和基于监督微调(SFT)的方法。ICL方法由于使用最先进的闭源模型而能够取得相对较好的结果。然而,在实际应用场景中,需要考虑数据隐私、SQL生成效率和成本等因素。SFT方法在这些方面具有一定优势。当前基于开源模型微调的方法缺乏易于实现且有效的(成本效益高的)基准方法。我们提出了一种基于开源模型微调的管道方法,称为BASE-SQL,包括四个组件:模式链接、候选SQL生成、SQL修订和SQL合并修订。实验结果显示,BASE-SQL使用开源模型Qwen2.5-Coder-32B-Instruct,在BIRD开发集上达到了67.47%的准确率,在Spider测试集上达到了88.9%的准确率,显著优于其他使用开源模型的方法,甚至超过了使用GPT-4o闭源模型的几种方法。同时,BASE-SQL易于实现且高效(平均每次生成SQL只需调用大型语言模型五次)。代码将在 https://github.com/CycloneBoy/base_sql 上开源。
文本转SQL任务是将自然语言转换为结构化查询语言(SQL)以查询数据库,近年来受到了越来越多的关注 。它可以降低用户与数据库交互的难度,特别是在数据分析、商业智能、智能客户服务等领域有广阔的应用前景。随着深度学习技术的快速发展,文本转SQL任务取得了快速进展,从只能回答特定领域的单表问题,到能够解决跨域多表复杂问题的SQL生成。在著名的Spider 基准上,它已经实现了90%的准确率。
早期的文本转SQL方法主要基于序列到序列(Seq2Seq)生成方法 。当前主流方法是基于大型语言模型(LLMs),大致可以分为基于上下文学习(ICL)的方法和基于监督微调(SFT)的方法 。ICL方法 主要使用最先进的闭源LLMs(如:GPT-4、GPT-4o、Gemini-1.5 Pro等),然后通过各种策略提高最先进水平(SOTA)性能,而不考虑SQL生成的效率和成本。得益于模型的强大推理能力,通常能取得更好的结果。SFT方法使用开源LLMs进行微调以改进SQL生成效果 。由于使用的模型较小,通常表现不如ICL方法。
在实际的文本转SQL应用场景中,会考虑以下因素:数据隐私、SQL生成效率和成本。因此,基于开源模型的SFT方法具有一定优势。CodeS 使用专门策划的SQL中心语料库进行增量预训练,并结合双向数据增强技术进行SFT,最终超过了使用大量闭源模型的方法,但依赖于大量的数据进行增量预训练。SENSE 使用闭源模型合成的数据对小模型进行微调,展示了其合成数据的有效性,但依赖于闭源模型进行数据合成。DTS-SQL 通过分别微调模式链接和SQL生成简化了SQL生成,但缺乏详细分析。CHESS 使用管道方法分多个步骤生成SQL,证明了管道方法的优越性。MSc-SQL 通过微调多个不同模型生成候选SQL,然后使用选择模型选择最终结果。虽然这些方法与使用闭源模型如GPT-4的方法相当,但低于使用最先进的闭源模型如GPT-4o和Gemini 1.5 pro的方法。同时,基于SFT的方法缺乏高性价比的基准方法,也阻碍了SFT方法的发展。
为了应对开源模型SFT方法面临的挑战,我们提出了一种基于管道方法的新方法BASE-SQL。BASE-SQL主要由四个组件组成:模式链接、候选SQL生成、SQL修订和SQL合并修订。在模式链接组件中,我们只执行表链接,不执行列链接。表链接是通过对开源模型进行微调获得的。候选SQL生成也是通过对开源模型进行微调获得的。SQL修订使用另一个开源模型结合完整模式进行SQL错误纠正。最后,SQL合并修订通过两轮合并纠正生成最终SQL。通过详细实验,我们分析了不同参数配置下各个组件的效果。最终,我们的方法BASE-SQL仅使用两个32B开源模型Qwen2.5-Coder-32B-Instruct 和Qwen2.5-32B-Instruct ,在BIRD 开发集上实现了67.47%的准确率,在Spider测试集上实现了88.9%的准确率。BASE-SQL比其他最先进的方法更高效。平均来说,只需要调用大型模型五次即可生成一次SQL。此外,复制BASE-SQL的成本也非常低,无需使用额外的数据进行增量预训练。总体而言,BASE-SQL是一种高性价比的文本转SQL基准方法。
总之,我们的主要贡献如下:
- 我们分析了当前基于SFT的文本转SQL方法的优点和缺点,并提出了一种新的基于管道的方法BASE-SQL。
- 通过大量对比实验,我们分析了不同参数配置下我们方法各个组件的SQL生成效果,为后续研究提供了一定参考。
- 我们仅使用两个32B开源模型,在BIRD和Spider数据集上超越了所有其他使用开源模型的方法,甚至超越了几种使用GPT-4o闭源模型的方法。同时,它具有较高的推理效率和较低的复制成本,表明BASE-SQL是一种高性价比的基准方法。我们的源代码将在 https://github.com/CycloneBoy/base_sql 上发布。
早期的文本转SQL方法主要基于Seq2Seq方法。自然语言和数据库模式通过编码器进行语义编码,然后通过解码器生成相应的SQL语句 。由于SQL语言有一定的语法规则,直接通过解码器生成SQL模型时容易出错。在此基础上,提出了基于SQL语法规则的槽填充方法 和基于草图的方法 。例如, 提出了一种增强型编码器以减轻模式链接的工作量,并使用骨架感知解码器隐式引导SQL生成。这些方法受限于基础模型的能力,模型泛化能力不强,需要大量数据对不同领域数据库进行微调。
随着从预训练语言模型到大型语言模型的快速发展,基于LLM的文本转SQL方法已成为主流。DIN-SQL 将生成问题分解为多个子问题并使用GPT-4进行ICL,最终击败了许多微调模型。DAIL-SQL 通过大量对比实验探索了不同模式表示、示例选择和示例组织的优势和劣势,为后续研究提供了有效建议。MCS-SQL 使用不同的提示词探索更广泛的搜索空间以生成多个候选SQL,然后根据置信度评分进行过滤,最终使用多项选择选择法获得最终结果。 使用多代理协作框架,通过不同代理完成特定子任务,最终完成SQL生成。CHASE-SQL 发现广泛使用的自一致性策略无法有效地从大量候选SQL池中选择最佳SQL,因此提出了一种基于成对比较的排序策略,并结合三种创新策略生成多样且高质量的候选SQL,在BIRD数据集上达到最先进水平。由于ICL方法不需要额外计算资源进行模型微调,具有高灵活性和泛化性,目前是一种广泛应用的方法。
由于数据隐私和效率等问题,基于SFT的方法具有一定优势。 选择了开源LLM进行微调并取得了良好结果,超越了许多使用专有闭源LLM的方法。CodeS 结合模式链接、数据增强和预训练方法,在多个数据集上取得了最先进水平的结果,并开源了从1B到15B的预训练模型。SENSE 使用强大的LLM合成弱监督数据来训练小型LLM。实验结果表明其合成数据的有效性。MSc-SQL 首先通过模式链接筛选模式,然后使用多个小型LLM进行微调以生成多种候选SQL,最后使用选择器选择最终SQL。CHESS 和XiYan-SQL 结合ICL和模型微调的优点,基于管道方法,包括实体和上下文检索、模式链接以及微调LLM进行SQL生成和SQL选择,证明了ICL和SFT方法组合的有效性。
3 方法
我们提出的BASE-SQL框架如图 [figure:base_sql] 所示,包括四个组件:模式链接、候选SQL生成、SQL修订和SQL合并修订。

3.1 模式表示
为了让LLM生成相应的SQL,需要将数据库的表结构信息包含在提示上下文中,以便LLM能够充分理解数据库模式。有许多方式表示数据库表结构信息 ,包括代码结构表示 、Alpaca SFT Prompt表示 、Chess表示 、M-Schema表示 等。越来越多的表示方法包含列的样本值,这有助于LLM理解表中的数据。XiYan-SQL 最近提出的M-Schema表示显示了数据库中每列的列名、数据类型、列描述符、主键信息和样本值,表现优于代码结构表示。尽管每列包含对应的样本值,但我们的实验发现,在每个表后添加一个当前表随机查询的三列表格结果可以进一步提高LLM对数据库表结构的理解。图 [figure:schema_representation] 展示了不同的表示方法。
3.2 模式链接
模式链接是指识别将自然语言转换为SQL所需的数据库表和列信息,并过滤掉冗余表列带来的噪声信息。这可以显著提高SQL生成的准确性。目前主要包括三种方法:数据库实体链接、表链接和列链接 。其中,列链接最为困难,因为任何列的遗漏都会导致后续SQL生成失败。为了提高列链接的召回率,许多方法通常需要在这个部分多次调用LLM,导致SQL生成效率低下。例如,XiYan-SQL 和CHESS 都使用列选择器过滤无关列。需要判断数据库中的每一列是否需要保留。
像MSc-SQL 一样,我们只使用表链接,通过微调模型识别与问题相关的表名。我们不使用列链接的原因如下:1)我们使用的开源模型相对较小,列链接的低识别准确性会降低后续SQL生成的准确性;2)我们通过实验发现,对于我们的模型,即使列链接完全准确,对SQL生成准确性的提升也不显著(见表 [tab:result_different_schema_linking_method] 的实验结果)。3)为了兼顾整体SQL生成的效率,减少对LLM的调用次数。
3.3 候选生成
我们使用强大的开源模型Qwen2.5-Coder-32B-Instruct 作为基础模型。它在多个代码相关基准上取得了最先进水平的表现。受MSc-SQL 的启发,为了模拟模式链接过程中识别冗余表造成的冗余噪声,我们根据Schema Linking的结果,基于训练样本的真实表,随机选择了10%的样本(在排除真实表后,随机添加1到2个额外的表)。
得益于强大的Qwen2.5-Coder 预训练模型,我们在实验中发现,通过LoRA 微调仅需少量样本(1k-4k)即可实现高准确率(见图 [figure:sft_step] 的实验结果)。
3.4 SQL修订
生成的候选SQL可能包含逻辑和语法错误。大多数方法 使用多轮SQL修正以提高SQL的准确性。它们通常将模式链接后的表结构、生成的候选SQL及其执行结果输入LLM,并使用LLM修正SQL中的潜在错误。通过实验,我们发现使用模式链接前的表结构信息可以进一步提高修正的准确性,因为模式链接后可能存在一些表识别错误。我们使用所有表的M-Schema表示和带样本的M-Schema表示进行二次独立修正,分别生成候选SQL2和候选SQL3。
3.5 SQL合并修订
LLM生成的过程是一个概率抽样过程,很难保证一次性生成最佳结果。因此,许多方法 会生成多个候选SQL,然后以不同方式选择最终的SQL。典型的方法包括:自一致性、重排方法、选择方法。自一致性有一定局限性,不能保证最一致的结果就是正确结果。最近,模型选择方法受到关注并取得了显著性能提升。目前,选择模型需要使用相应数据进行微调。未微调的选择模型效果不理想(见表 1 的实验结果)。然而,目前缺乏相应的开源数据集。
因此,我们提出了一种合并修正方法,结合了修正和选择的特点,通过多次合并修正生成最终SQL。SQL合并修正仅在两个候选SQL的执行结果不一致时需要。否则,我们选择第一个候选SQL。首先,将出现在两个候选SQL中的表列作为合并修正的表结构信息。然后列出两个候选SQL及其对应执行结果,LLM生成一个新的SQL,而不是选择其中一个作为候选SQL。通过三次合并修正,将SQL修正步骤获得的候选SQL2、SQL3和修正前的候选SQL1合并,得到最终候选SQL。

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐




所有评论(0)