Abstract
Text-to-SQL 转换是一项关键创新,简化了从复杂 SQL 语句到直观自然语言查询的转换,尤其在 SQL 在各类岗位中广泛应用的情况下,这一创新显得尤为重要。随着 GPT-3.5 和 GPT-4 等大型语言模型(LLMs)的兴起,这一领域得到了极大的推动,提供了更好的自然语言理解能力和生成细致入微的 SQL 语句的能力。然而,在 Text-to-SQL 应用中,开源 LLMs 的潜力尚未得到充分挖掘,许多框架未能充分利用其能力,特别是在处理复杂数据库查询和结合反馈进行迭代优化方面。为了解决这些限制,本文介绍了 SQLfuse,这是一套集成了开源 LLMs 和一系列工具的强大系统,用于提高 Text-to-SQL 转换的准确性和可用性。SQLfuse 包含四个模块:模式挖掘、模式链接、SQL 生成和 SQL 评审模块,不仅生成 SQL 查询,还能持续提升 SQL 查询质量。SQLfuse 在 Spider 排行榜上的领先表现以及在蚂蚁集团的实际部署,展示了开源 LLMs 在多样化商业环境中的实际应用价值。
GPT-4o翻译
1 INTRODUCTION
在 IEEE Spectrum 2023 年的年度报告“Top 10 Programming Languages”中,SQL 继续保持其在“工作列表”中的首位,这突显了 SQL 技能在就业市场中的持续需求。然而,精通 SQL 需要深入理解数据库结构及其语言本身,这对于没有技术背景的人来说是一个障碍。
Text-to-SQL 技术代表了一项重要突破,将复杂的 SQL 查询过程简化为更直观的自然语言格式。这一创新为用户提供了更友好的数据查询和分析方式,普及了对数据库系统的访问,从而提高了数据处理效率并拓宽了其应用范围。
随着 GPT-3.5 和 GPT-4 的问世,大型语言模型(LLMs)成为自然语言处理(NLP)任务中的一股变革力量,Text-to-SQL 也包括在内。这些模型庞大的参数和丰富的训练数据使其对自然语言有了更加细致的理解,能够更准确地解析用户意图,从而生成精确的 SQL 转换。尽管取得了这些进展,现有的基于 LLM 的 Text-to-SQL 框架仍未达到最优状态:它们并未充分利用开源 LLM 的潜力,也未能有效整合外部工具和知识来提升 Text-to-SQL 的性能。
如上图的分析表明,当前系统在方法上存在局限性。例如,它们通常忽视了构建聚合查询的复杂一对多关系。此外,它们通常未能利用执行错误反馈,而这反馈可以提供宝贵的见解来修正 SQL 的不准确之处。此外,这些系统缺乏专门用于评估和排名 LLM 输出的 SQL 结果的评论模块,这本可以显著提升结果的质量。
本文介绍了 SQLfuse,这是一个全面的系统,旨在充分利用开源大型语言模型(LLMs)的全部潜力,同时结合一套工具和所有外部知识。正如上图所示,SQLfuse 由四个协同工作的模块组成:模式挖掘、模式链接、SQL 生成(SQLgen)和 SQL评审模块。
1.模式挖掘模块深入数据库,提取重要的键和值以及它们在表格之间的复杂关系。
2.模式链接模块将这些发现与用户查询紧密结合,形成一个逻辑思维链。
3.SQLgen 利用经过微调的 LLMs 来生成准确反映用户意图的 SQL 查询。在生成查询后,系统会采用一个常量检查模块,并利用执行反馈进行逐步改进。
4.评审模块通过一个高质量查询的外部数据库来识别并选择 SQLgen 生成的最有效 SQL 输出。
SQLfuse 不仅在 Spider 排行榜上名列前茅——以 85.6% 的精度在开源 LLM 类别中排名第一,并在整体排名中位列第四。蚂蚁集团已在其平台上部署了 SQLfuse,并在一系列业务场景中使用了该系统,包括其主要的在线数据分析处理和事务处理平台。本文的贡献包括:
1.介绍了一个创新和全面的text-to-SQL 系统 SQLfuse。
2.SQLfuse 是围绕四个协同模块构建的架构: 模式挖掘、模式链接、 SQLgen 和SQL评审模块,每个模块都旨在利用和扩大 LLM 的能力,以提高准确率。
3.通过严格的消融研究,仔细演示了 SQLuse 中每个模块的作用,验证了它们在我们的系统架构中的组合有效性。
4.SQLfuse已经取得了显著的成功,在著名的Spider数据集上达到了85.6% 的执行准确率,它是迄今为止在text-to-SQL 领域排名最高的开源系统。SQLFusion 已成功纳入蚂蚁集团的业务框架,成为支持该公司最大的在线数据分析处理和交易处理平台。
2 RELATED WORK
略
3 METHODOLOGY
我们提出的 SQLfuse 框架,如上图所示,是一个专为 Text-to-SQL 任务设计的模块化系统。它主要由以下四个模块组成:1. 模式挖掘(schema mining),2. 模式链接(schema linking),3. SQL 生成(SQLgen),4. SQL 评审(SQL critic)。
具体而言,模式挖掘模块负责提取模式特征,例如主键、外键、枚举值以及一对多关系等,提供了候选数据库模式;模式链接模块识别自然语言查询中引用的具体模式元素,即表、列、连接关系和条件值。基于用户的问题以及提取出的模式特征和元素,精心构建了一个思维链(Chain-of-Thought,CoT)模板,作为 SQLgen 模块的结构化提示。该模块负责生成各种 SQL 语句候选项,这些候选项随后通过常量值修复和 SQL 执行检查进行验证。SQL 评审模块利用few-shot上下文学习(few-shot in-context learning)来评估和选择最符合用户意图的 SQL 查询。
3.1 Schema Mining Module
以数据驱动的方式从数据库中提取基本的模式特征,从而用重要的表信息、键、关系和枚举值丰富后续模块的上下文。这些见解成为模式链接和 SQLgen 模块的基石,允许它们以更高的精度识别必要的模式组件,并以更高的精度生成 SQL 语句。
3.1.1 Primary Key
text-to-SQL的转换领域,识别和合并主键是必不可少的。它们通常作为聚合查询(使用 SUM、 AVG、COUNT、MIN和MAX等函数)结构化的轴,特别是在与 GROUP BY 子句组合时。如果提前提供了主键的信息,则text-to-sql 的生成可以更加准确,特别是对于聚合查询。
3.1.2 Foreign Key
外键对于保持参照完整性和实现多表查询的连贯性至关重要。理解外键对于编写需要跨多个表进行连接的 SQL 查询至关重要。将外键信息集成到 SQLfuse 中,增强了其在查询翻译中处理和精确执行复杂多表关系的能力。
3.1.3 One-to-Many Relationship
虽然主键和外键显式地定义了表间连接,但是1: N 关系通常是隐式的,且它们对于理解数据结构和形成有效的 SQL 查询是必不可少的。在text-to-SQL的转换中,准确识别这些关系对于正确执行涉及总和、平均值或计数的聚合查询至关重要。识别1: N 关系允许 SQLgen 模块对聚合操作和 GROUPBY 子句中的列使用做出正确吃的决策。确定这些关系的方法包括:
(1)数据值分析:通过仔细检查实际数据,我们可以检测出具有唯一值的列和那些具有重复对应条目的列,从而提示可能存在的一对多关系。
(2)数据库统计:利用数据库系统的统计数据,例如索引属性和列值分布,可以帮助识别关系模式。
(3)机器学习方法:机器学习算法可以对表记录进行分类或聚类,从而揭示隐藏的数据关系,帮助识别一对多关联。
通过整合这些方法,模式挖掘模块能够熟练识别数据库中复杂的关系网络,从而显著提高翻译后SQL查询的准确性和逻辑性。
3.1.4 Enumeration Values
在 Text-to-SQL 翻译中,明确枚举值与用户使用术语之间的语义映射对于实现有效的模式链接和 SQL 生成至关重要。为此,一种有效的方法是创建映射,将数据库的枚举代码与其自然语言描述进行映射,并在可能的情况下使用字段的解释作为指导。
3.2 Schema Linking Module
模式链接在将自然语言查询转换为 SQL 查询的过程中起着关键作用,其目标是将输入的问题映射到特定的数据库模式元素,包括表和列。通过利用 LLM 在自然语言理解方面的优势,采用了一种基于 LLM 的方法来执行模式链接任务。具体而言,构建了大量高质量的标注数据,对一个开源的 LLM 进行监督微调。此外,通过加入由前一个模式挖掘模块提供的上下文信息,设法提升了模式项提取的模型性能。最后,模式链接的输出会经过双重检查,并在必要时通过添加额外的模式元素进行进一步优化。
3.2.1 Schema Items Extraction
用于模式项提取任务的训练数据来源于各种开源的 Text-to-SQL 数据集。以收集和过滤后的数据集为基础,以 DIN-SQL 的模式链接提示样式向 GPT-4 提出问题。特别地,通过指示“Let’s think step by step”来引导 GPT-4 以思维链的形式回答问题,以此激发对提取原理的深入阐述。这种由思维链引导的推理对后续的 SQLgen 模型尤为有益,它能增强模型对用户查询和提取的模式项之间语义联系的理解,从而提高 SQL 语句生成的准确性。在获取 GPT-4 的回答后,通过与从真实标签中获得的模式项(如表格、列、连接关系和条件值)进行比较,来检查并验证这些结果的正确性。通过排除错误的问题-答案对,最终获得了一个高质量标注样本的临时版本。
不可避免地,数据库中会存在一些列使用缩写或在多个表中相同的名称。鉴于这些问题可能导致歧义并影响模式链接的结果,通过在提示中增加额外上下文来提升训练数据集的质量,以实现更精准的理解。具体来说,引入了主键、表和列的注释或备注、某些字段的枚举值以及列之间的一对多关系。下图展示了上述模式链接的输入与输出的一个典型示例。
本文选择了一款在自然语言处理方面表现优异的开源大型语言模型,即 Llama2-70B,作为模式链接模型,并在构建的数据集上进一步对其进行微调,以适应模式项提取任务。微调后的 LLM 作为模式链接模块的核心,能够根据用户问题提取最相关的模式项。
3.2.2 Schema Items Calibration
本文采取了额外的措施来校准模式项提取的结果。一方面,采用了基于规则的检查方法,来确定已识别的两个表之间是否存在连接关系。如果连接关系被忽略,则必须在模式链接的输出中恢复该关系。另一方面,采用基于相似度的排序方法,从过滤后的模式项中召回有限数量的潜在相关候选项。首先,将表或列的注释和名称视为它们的句子表示形式。通过利用开源的文本embedding模型,可以将它们的句子相似度与输入问题进行比较。相似度超过一定阈值的高排名表和列将被添加到模式链接模块的最终结果中,作为下一阶段 SQL 生成模块的输入。
3.3 SQL Generation Module
如上图所示,SQL 生成(SQLgen)模块是 SQLfuse 的核心组件,它巧妙地整合了模式挖掘、模式链接以及用户原始查询中的关键上下文信息。该模块利用了 Chain of Thought (CoT) 框架,将这些元素封装成独特的 SQLfuse 风格提示词,并将其传递给经过精调的大模型 (LLM),以生成 SQL 预测。在初步预测后,模块会修正常量值中的类型错误,并执行 SQL 以识别潜在错误,进而进行自我纠正。这个迭代过程会持续进行,直到生成有效的可执行 SQL 或达到预设的限制为止。本章将详细介绍两个组成部分:SQL 生成过程和自我纠正过程。
3.3.1 SQL generation
先介绍SQLfuse风格的prompt,如下图:
这种风格善于以一种紧凑的类似代码的格式表示 SQL 模式,同时仍然以一种可访问的、会话的方式呈现自然语言组件,例如用户查询、描述和来自模式链接模块的思维链过程。
在 SQLfuse 的提示词风格的基础上,将 (i) 由模式挖掘模块识别出的模式和数据特征(尤其是主外键、一对多关系和枚举值)与 (ii) 来自模式链接模块的 Chain of Thought (CoT) 。当这些内容与来自 Spider 等开源数据集的相应 SQL 查询配对时,该提示结构使我们能够进一步微调一个开源大型语言模型 (LLM),以便在 SQLfuse 框架内生成高质量的 SQL 语句。具体来说,选择了领先的LLM——CodeFuse-DeepSeek-33B,该模型截至 2024 年 3 月在 Big Code 排行榜中名列前茅。
3.3.2 Self-Correction
为了解决 LLM 固有的输出不稳定性,提高 SQLfuse的性能,在 SQLgen 中提出了一个组件,通过常量值修复和 SQL 执行检查两种主要方法来纠正常见错误。
常量值修正过程旨在解决自然语言查询中提到的常量值与相应数据库列之间的不匹配问题,这些不匹配可能是由于语言中的歧义或模型误解而引发的。步骤如下:
(1)常量值识别:系统识别查询中的常量值。
(2)列匹配:系统将这些常量值与合适的数据库列进行匹配,同时注意数据类型。
(3)反馈验证:如果匹配尝试失败或引发SQL错误,则会标记出潜在的不匹配。
(4)替代匹配探索:接着搜索其他可能的列匹配,仔细审查数据格式、值范围和元数据。
(5)SQL修改:一旦找到正确的列匹配,系统会立即调整SQL,并更新相应的常量值。
此外,数据库统计数据也可以帮助进一步优化列匹配过程。这些策略不仅减少了处理常量值时的错误,还提高了SQL生成的整体质量,并通过实现自动错误修正,提高了模型的性能,避免了手动干预。
SQL执行检查利用数据库返回的执行错误信息,对有误的SQL语句进行分析,并将这些信息反馈给经过微调的大型语言模型进行改进。通过整合来自数据库日志、模式细节或执行上下文中的错误相关信息,模型能够更准确地定位并理解错误原因,从而减少类似错误的发生。此外,这种基于反馈的方式,结合监督微调(SFT)或强化学习等技术,使模型能够适应新的挑战,并随着时间的推移不断提高其准确性和用户体验。
3.4 SQL Critic Module
本文采用了一种“生成-再排序”(Generate-then-Rank)技术,以进一步优化Text-to-SQL生成的最终结果。该技术利用SQL评审模型,对SQLgen模块生成的可能SQL查询进行筛选,以识别最准确的查询。在SQL评审模块中,LLM对于评估SQL质量至关重要。本文并未依赖大量的SFT,而是采用了few-shot 上下文学习策略,该策略利用外部SQL知识库中的示例,并结合回顾反馈。这些示例与用户的提问、模式链接结果、指令和其他校准提示一起,用于提示SQL评审模块中的LLM,以确定最佳的SQL查询候选,如下图所示:
3.4.1 Few-shot In-Context Learning
为了支持在SQL评审模型中使用开源或闭源的LLM,本系统采用了few-shot上下文学习的方法。该方法只需要少量标注示例即可指导LLM,从而避免了大量数据收集和微调的需求。
为了丰富few-shot学习中展示的案例多样性,从GitHub收集并整理了一系列复杂的SQL语句和模式。这个集合经过了精心的清理和验证,包括手动标注和GPT-4的评估,最终形成了一个稳健的外部知识库。该知识库通过一种优先考虑相似性的检索方法,从历史数据中提取与输入问题相似的样本,如图5所示。我们还进一步优化了检索过程,通过屏蔽问题中的特定关键词,仅保留其“问题骨架”,从而增强了抽象领域特定细节的能力,促进了更广泛的句子比较。
这些few-shot示例还通过引入“事后链”(Chain of Hindsight, CoH)框架得到丰富,该框架结合了诸如“一个好的答案是……”和“一个坏的答案是……”之类的反馈提示。这种技术通过回顾性的洞察来告知模型,从而增强其生成高质量SQL输出的能力。
使用知识库中的历史SQL查询时面临的一个挑战是,这些查询通常只有一个正确答案,缺乏人类标注者通常提供的细致反馈。为了给CoH反馈提供负面答案,SQL评审模块中的LLM会生成次优答案,为知识库增添上下文。通过将这些次优响应标记为“坏答案”,并与原始标签所代表的“好答案”对比展示,我们让模型具备识别答案质量的能力,如下图所示:
最后,这些few-shot示例还辅以明确的指令,直接引导SQL评审模型从SQLgen模块提供的一系列选项中识别出正确的SQL查询。这种明确命令的设置对于有效指导模型的选择过程至关重要。
3.4.2 Instruction and Calibration Hints
为了进一步完善评审模型的决策能力,输入提示符被补充了校准提示,这些校准提示列举了通常由 SQL 评审模块产生的常见错误。这些提示可以先解决潜在的错误,增强模型生成高级 SQL 的能力。校准提示结合用户的问题和模式链接结果,形成了一个全面的提示,旨在引导模型产生最准确的 SQL 输出,如图5所示。
4 EXPERIMENTS
4.1 Dataset
Spider
4.2 Experimental Setups
各个模块选择的模型:
Schema Linking:Llama2-70B
SQL Generation Model:CodeFuse-DeepSeek-33B
SQL Critic Model:Llama-70B
4.2.1 Fine-tuning Schema Linking Model
模式链接模型在3.2.1节中描述的构建的数据集上进行进一步微调。训练数据集包含5000个标注样本。
基于Spider基准的DEV集构建了一个测试集来评估架构链接模型的性能,使用表和列的召回率作为评估指标。最终的架构链接模型分别达到了99.8%的表召回率和97.4%的列召回率。
4.2.2 Fine-tuning SQL Generation Model
模型:CodeFuse-DeepSeek-33B
训练集:Spider基准的Train集
4.3 SQLfuse Evaluation
4.3.1 Spider Leaderboard
在Spider基准测试上评估了SQLfuse的性能,重点考察其在TEST数据集上执行包含数值的SQL查询的准确性。根据下图的数据显示,SQLfuse取得了85.6%的准确率,排名仅次于MiniSeek和DAIL-SQL。值得注意的是,MiniSeek和DAIL-SQL以及其他顶级竞争者主要依赖于GPT-3.5/4等闭源大语言模型进行操作。尽管如此,SQLfuse在与这些闭源模型的竞争中表现出强大的竞争力,并且明显优于依赖开源大语言模型的替代方案。
4.3.2 Real-world Application
值得一提的是,SQLfuse已经在实际场景中进行了测试和部署。它已集成到蚂蚁集团的日常运营框架中,支持包括公司内在线分析处理(OLAP)和事务处理(OLTP)平台在内的七个业务场景。
4.4 Ablation Study
4.4.1 Schema Mining.
强调了每个数据挖掘的m模式特性都单独增强了SQLFusion的性能,展示了各自的贡献,显著增强了SQLFusion的整体效果。
4.4.2 Schema Linking
也是上面那张图,删去模式链接模块,整体准确率降低了2.5%,说明模式链接在识别相关模式组件中的关键作用,这有助于产生更准确的 SQL 查询。
在不使用思维链的情况下,模式链接模块只提供基本的细节,而不提供 CoT 需要的解释步骤。根据表3的研究结果,CoT 的边际收益为0.1% ,表明包含 CoT 推理本身增强了模型的输出。
4.4.3 SQLgen Module
也是上面那张图,使用其他风格的prompt明显降低了准确率,这种优越性可能是因为SQLFusion风格的prompt将SQL模式表示与自然语言元素进行了有利的混合。
常量值修复和SQL执行检查模块的最终准确率提高了0.4%,表明了它们在增强SQL生成方面的重要性。
探索了Lora等级,其中96是最佳点,高和低都会使得准确率降低。
4.4.4 SQL Critic Module
还是4.4.1节的图显示,删除评审模块导致约2% 的准确性降低。这些数据强调了评审模块在SQL 生成中的作用,突出了它在提高生成的查询质量方面的有效性。此外,还将 Llama2-70B 替换为 GPT-4。这种替换导致测试集的准确率略有提高,从85.6% 提高到85.9% 。这样的结果表明,尽管 GPT-4提供了一些改进,但是 SQL 评审模块的结构和功能性对 SQLFuse 的整体性能有重要的贡献,与底层语言模型无关。
5 CONCLUSION
略
6 DISCUSSION
本节进一步讨论提高机遇LLM的text-to-sql转换性能的策略。
6.1 Training Data Expansion
在 Text-to-SQL 领域,扩展训练数据是一种有效的策略,特别是在训练数据稀缺的情况下,对于提升模型性能非常有帮助。本节探讨如下方法
1.错误集扩展,它通过总结模型在验证数据集上的常见错误来生成更多的数据。该方法包括分析模型输出中的错误,识别数据库中的类似问题,并基于这些错误实例生成新的训练样本。该模型可以通过学习弱点来改进,提供有针对性的解决方案,以纠正在处理某些类型的问题方面的缺陷。该方法不仅加强了模型对现有问题类型的理解,而且使模型能够处理新的和不可见的问题类型,从而增强了模型的鲁棒性和泛化能力。流程如下:
(1)初始错误分析:首先,对模型在评估过程中的错误进行评估,识别出薄弱点,例如 JOIN 操作、子查询或聚合函数等。
(2)问题骨架生成:为了发现与错误实例结构相似的问题,通过抽象原始查询的主要结构并屏蔽特定值和关键字,生成问题骨架。
(3)SQL 骨架生成:类似于问题骨架,SQL 骨架保留了原始 SQL 查询的结构,但移除了具体的值和数据库实体名称,从而保持其结构模式。
(4)知识库匹配:使用生成的问题和 SQL 骨架在知识库中查找结构相似的问题和对应的 SQL 语句,这可以通过文本相似性算法或专门用于文本匹配的模型来完成。
(5)基于 GPT 的知识扩展:一旦找到与错误实例结构相似的问题,利用像 GPT 这样的预训练 LLM 生成新的问题和 SQL 语句对。
(6)数据清洗与验证:新生成的问题和 SQL 对需要经过清洗和验证,以确保其质量足够用于有效的模型训练。这个过程通常包括语法检查、逻辑一致性验证,以及确保 SQL 语句符合数据库架构。
2.复杂SQL扩展,可以有效地创建一个丰富的训练数据集,反映现实世界中 SQL 查询的复杂性及其对应的自然语言问题。此类数据对于提升模型处理复杂查询的能力至关重要,有助于模型更好地理解和生成涉及复杂数据库操作的 SQL 语句。此外,这一方法还促进了模型在应对现实问题时的适应性和泛化能力,从而增强用户体验。下面是一般流程:
(1)数据收集:从开源平台收集大量复杂的 SQL 查询及其对应的模式,这些查询通常包括多个 JOIN 操作、嵌套查询、复杂的 WHERE 子句、GROUP BY 和聚合函数。
(2)SQL 解析:对收集的 SQL 语句进行解析,将其分解为组件,例如 SELECT 字段、FROM 子句、JOIN 条件和 WHERE 条件,以更好地理解 SQL 语句的结构。
(3)模式匹配:将解析后的 SQL 结构与对应的模式进行匹配,确保 SQL 查询正确使用表和字段名称,并反映模式的结构。
(4)问题生成:将解析后的 SQL 结构和匹配的模式提供给预训练的 LLM,以生成对应的自然语言问题。此过程可以通过提供模板或提示来引导 GPT 生成与 SQL 查询语义一致的问题。
(5)二次检查:将 GPT 生成的问题与原始 SQL 和模式一起重新输入 GPT 进行验证,确保生成的问题与 SQL 查询相关联,并准确反映模式中的信息。
(6)数据清洗与验证:由于自动生成的问题和 SQL 可能包含错误或不一致性,需要进行手动或自动的清洗与验证。这可能包括检查问题语言的自然性、SQL 语法的准确性、逻辑一致性以及模式特征的正确使用。
6.2 Preference Learning
偏好学习,例如人类反馈(强化学习)和直接偏好优化(直接偏好优化)可以增强模型生成复杂 SQL 语句的能力。这种方法可以使生成的 SQL 更符合人类的写作习惯,有利于模型的实用性和用户的满意度。
标签:SQLfuse,Enhancing,模型,模式,查询,Synergy,模块,SQL,生成 From: https://blog.csdn.net/qq_51700285/article/details/141127167