1. 引言
Text2SQL技术作为自然语言处理与数据库系统的核心接口,在面向企业级数据库应用的实证研究中,已展现出显著的规模化应用潜力[1]。行业基准测试[2]表明,典型企业数据库交互场景下,约35.2%的查询请求可通过Text2SQL技术实现端到端自动化处理。特别地,该技术在高复杂度查询场景(如多表JOIN、嵌套子查询)中的经济价值尤为突出:在金融风控领域,基于大语言模型的SQL生成系统可减少78%的人工SQL编写耗时;在医疗数据分析场景中,Text2SQL技术使非专业人员的复杂数据检索准确率提升至89.2% [3]。然而,现有技术在实际落地中面临两大瓶颈:数据稀缺性与领域泛化性。
主流数据集如WikiSQL [4]仅覆盖单表简单查询,而Spider [2]虽包含10,181个跨领域样本,但其复杂嵌套查询(含GROUP BY/HAVING/JOIN)占比不足18%。人工标注成本方面,测算显示,专业标注员构建高质量“问题-SQL”对的边际成本高达$7.2/对,且错误率随SQL复杂度呈指数增长(如5层嵌套查询的标注错误率达41.3%)。尽管近期LLM驱动的方法(如C3 [5]、DAIL-SQL [6])在零样本场景取得突破,但其性能仍受限于训练语料的领域狭窄性——例如在BIRD基准[7]中,DAIL-SQL的执行准确率(EX)较Spider下降19.8个百分点,暴露显著的领域迁移瓶颈。
针对上述挑战,本文提出双向增强范式与多阶监督机制的创新融合。与传统的单方向数据增强不同,本方法通过问题→SQL的正向生成与SQL→问题的逆向补全构建数据闭环,并引入四阶段质量审查管道。实验表明,该方法生成的语料所训练出来的模型执行准确率相较于传统人工标注语料微调模型提升了16.3%,相较于少样本提示学习方法提升了35.7%。
2. 相关工作
2.1. Text2SQL数据增强技术
现有数据增强方法可分为三类:1) 基于规则模板的方法:WikiSQL [4]采用固定句式替换实体,但受限于模板覆盖度(仅能生成17%的嵌套查询);2) 弱监督生成方法:IRNet通过SQL骨架解析生成候选问题,但依赖精确的语法树对齐,错误传播率达28%;3) LLM驱动方法:C3 [5]利用ChatGPT生成候选SQL,但缺乏逆向验证机制,导致语义一致性不足(SBERT相似度均值仅0.63)。相比而言,本文方法通过双向数据流设计,在增大标注语料数量的同时,也提高了其多样性。
2.2. Text2SQL模型架构演进
Text2SQL模型发展可分为三代:
1、Seq2Seq基础架构:早期工作如SQLNet [8]采用注意力机制编码数据库schema,但在复杂JOIN预测上准确率不足50%;
2、结构感知模型:RAT-SQL [9]引入关系感知Transformer,将Spider开发集EX提升至65.6%,但其需要全量标注数据支持;
3、LLM时代方法:1) 模型微调:DAIL-SQL [6]通过动态示例选择实现86.6%的EX,但每个查询需消耗12.7 k tokens;2) 任务分解:DIN-SQL [10]采用任务分解策略,将准确率提升至85.3%,但对BIRD等工业基准的适应性差(EX仅55.9%);3) 零样本/少样本:C3 [5]通过提示工程实现零样本学习,但其在低频率查询类型(如WITH子句)上失败率达73%。
本工作的核心价值在于为上述模型提供高质量、跨领域的训练语料。例如,使用本文生成语料所训练出来的模型执行准确率相较于传统人工标注语料微调模型提升了16.3%,相较于少样本提示学习方法提升了35.7%。其次,在语料的泛化迁移性方面,本文方法生成的语料对模型尺寸大小和提问难易程度的适应性都高于人工少量标注方式。
3. 本文方法
针对Text2SQL任务中训练语料人工标注成本高、场景覆盖有限的问题,本文提出了基于双向增强和多阶监督的Text2SQL训练语料生成方法,从问题到SQL和SQL到文本两个方向,结合大模型在数据准备、数据扩充、质量审核等多个阶段的监督审查机制,以较小的注释成本自动生成大量可靠且通用的“问题-SQL”对,显著提高了语料生成的效率和质量,技术方案如下。
3.1. 问题到SQL的多阶段增强
图1展示了问题到SQL的多阶段增强流程,其从查询问题端出发,经过问题扩充、质量审查、SQL自动生成、SQL错误纠正四个阶段的增强处理,得到最终结果。
Figure 1. Question-to-SQL multi-stage enhancement process
图1. 问题到SQL的多阶段增强过程
1) 种子集合构建
首先,从用户处收集真实的自然语言问题,并人工标注对应的SQL语句,形成高质量的种子集合。
2) 多阶段监督审查增强
第一阶段:利用大语言模型的上下文理解能力,以种子集合为正向示例,结合数据库表结构和字段信息,生成多样化的问题集合。
第二阶段:大模型担任监督角色,对生成的问题进行质量审查,过滤低质量和无法回答的问题,修正表达不清的问题。
第三阶段:基于大模型的代码生成能力,结合种子集合中的“问题-SQL”对,自动为问题清单中的每个问题生成SQL语句。
第四阶段:利用大模型的SQL语法知识和数据库表设计信息,对生成的“问题-SQL”对进行正确性审查,确保语料的准确性。
3.2. SQL到问题的多阶段增强
Figure 2. SQL-to-question multi-stage enhancement process
图2. SQL到问题的多阶段增强过程
如图2所示,SQL到问题的多阶段增强包含通用模板生成、特殊实体枚举和大模型重述三个步骤:
1) 种子集合构建
采用公开数据集Spider中的常见SQL模板,结合数据库表结构和字段,生成通用的“问题-SQL”对。
2) 多阶段监督审查增强
针对库表中的特殊实体,枚举其可能的取值,并反向代入到问题模板中,生成多样化的问题。
3) 大模型重述
使用大语言模型对生成的问题进行自然语言重述,确保问题符合中文语法习惯,同时保持原意不变。
4. 实验
4.1. 实验方法
为了测试本文方法的有效性,选取了公认数据集Spider。Spider是一个大规模的跨域数据集。由10,181个问题-SQL对组成,涉及200多个数据库,共分为四个难度级别,即简单、中等、困难和超困难。实验方法如图3所示。
Figure 3. Experimental method process
图3. 实验方法过程
第一步:训练集和测试集选取。我们按照一定比例从四个难度级别中各随机选取一些问答对,作为大模型训练的训练数据集。同样的方法,获取另一组问答对,作为测试数据集。
第二步:对比实验1设置,基于few-shot的大模型SQL生成。当预测问题答案时,将训练集作为示例样本动态加载于其提示词上下文中。动态样本选取方式采用文本相似度召回算法,即选择与问题文本语义最相似的训练样本。
第三步:对比实验2设置,基于Lora微调后大模型的SQL生成。基于Lora算法,使用训练数据集,微调得到基线模型。
第四步:本文技术方案。选取训练集中的自然语言问题作为“问题到SQL的多阶段增强”中的种子集合,选取训练集中SQL语句,将其提炼为“SQL到问题的多阶段增强”中的通用SQL模板。然后完成训练集合的生成和扩充。同样地,基于Lora算法微调得到基线模型。
第五步:评价指标计算。本文选取执行精度(Execution Accuracy, EX)作为评价模型生成SQL准确率的方式。执行精度指的是生成的SQL查询在数据库上运行的结果与标准答案运行结果相一致。根据生成的SQL查询能否正确执行且返回预期结果的比例来计算执行准确率,见计算公式(1):
LA = 正确执行的查询数量/总测试查询数量 (1)
4.2. 实验设置
4.2.1. 共性实验设置
训练集数量:100,测试集数量:100,Few-shot示例数量:3个。
微调大模型:为评测技术方案的泛化性,采用三组模型进行微调,包括qwen3-8b、qwen3-4b和qwen3-1.7b。
LoRA微调参数配置如表1所示。
Table 1. LoRA parameter setup
表1. LoRA参数设置
参数名称 |
描述 |
设置值 |
lora_rank |
低秩矩阵的秩 |
16 |
lora_alpha |
缩放因子 |
32 |
学习率 |
模型每次更新的幅度 |
3e−6 |
批次大小 |
每次训练中处理的样本数量 |
8 |
优化器 |
用于模型参数更新的算法 |
AdamW |
4.2.2. 本文方案设置
1) 问题扩充大模型
模型选取:qwen3-8b。
提示词设置:你是一个Text2SQL专家,你的任务是参考“问题种子集合”,结合“数据库表设计信息”,请按下面的步骤一步步思考:1、从when、where、which、where、how、why等角度丰富提问的角度;2、仔细阅读数据库表设计,从单表、多表联查的角度给出可能的问题;3、模拟种子清单中的提问方式或习惯,使问题更加贴合中文表达习惯。尽可能从多个维度提出更多用户可能的问题。返回格式要求:要求以字符串列表返回,每个元素为一个问题字符串。问题种子集合为:xxx。数据库表设计信息为:xxxx。
2) 监督审查大模型
模型选取:qwen3-32b。
提示词设置:你是一个提问质量审核专家,你的任务是参考“数据库表设计信息”,对“问题清单”中的问题进行质量审查。请按下面的步骤一步步思考:1、现有数据库无法回答的问题,标记为过滤;2、问题表述不符合中文习惯,标记为修正,并给出修正后问题;3、无任何意义的问题标记为过滤。返回格式要求:要求以json格式返回,key为问题序号,问题类型,改写后问题。问题清单为:xxx。数据库表设计信息为:xxxx。
3) SQL生成大模型
模型选取:qwen3-32b。
提示词设置:你是一个Text2SQL专家,你的任务是参考“问题种子集合”,结合“数据库表设计信息”,给出“问题清单”中每个问题对应的SQL语句。返回格式要求:要求以json格式返回,key为问题序号,问题对应SQL。问题种子集合为:xxx。数据库表设计信息为:xxxx。问题清单为:xxx。
4) 问题重写大模型
模型选取:qwen3-8b。
提示词设置:你是一个Text2SQL专家,你的任务是参考“数据库表设计信息”,对“问题-SQL对”清单进行质量审查。请按下面的步骤一步步思考:1、如果SQL语句正确,则跳过;2、如果SQL语句错误,标记为错误,并给出修正后的SQL;返回格式要求:要求以json格式返回,key为“问题-SQL对”序号,改写后SQL。“问题-SQL对”清单为:xxx。数据库表设计信息为:xxxx。
4.3. 实验结果与分析
本文设置了两组对比实验,对比实验1为基于提示工程的few-shot方式,作为基线,对比实验2为基于原始语料集数据进行LoRA微调。三组实验分别在qwen3-8b、qwen3-4b和qwen3-1.7b三组不同尺寸的基座模型上运行。实验测试数据集由简单、中等、困难、超困难4个等级组成。
4.3.1. 总体实验结果分析
从表2可以看出,相比于少样本的提示工程方法,大模型微调方案准确率有所提升。而本文基于双向增强和多阶段监督方法生成的语料,其微调后模型的SQL生成准确率要比仅采用少量人工标注数据进行高效参数微调的大模型表现提高16.3%。
Table 2. Overall experimental results
表2. 总体实验结果
实验方法 |
Few-shot (基线) |
原始人工语料LoRA |
本文方法 |
准确率 |
42% |
49% |
57% |
相比基线提升百分比 |
/ |
16.7% |
35.7% |
4.3.2. 不同基础模型参数量对实验结果的影响
从图4可以看出,模型微调后的整体准确率随着基座模型的增大而提高。另外,对于三种不同尺寸的模型基座,本文方法生成的语料微调效果均高于少量人工标注语料,一定程度反映本文方法的泛化性较好。
Figure 4. Performance of different size base model after finetune
图4. 不同尺寸基座模型微调后表现
4.3.3. 不同困难程度的测试集对实验结果的影响
从图5可以看出,由本文方法合成语料微调得到的模型在困难及超困难测试集上的表现均好于对比试验,进一步说明针对复杂场景的SQL生成,训练语料的数量、多样性很重要。
Figure 5. Performance of test sets with different levels of difficulty
图5. 不同困难程度测试集上的表现
5. 结论与展望
本文针对Text2SQL任务中训练语料人工标注成本高、场景覆盖不足的问题,提出基于双向增强与多阶监督的语料生成框架。通过问题→SQL的正向增强与SQL→问题的逆向增强构建双向数据流,结合大语言模型的上下文理解与代码生成能力,实现了高效、高质量的语料生成。实验表明,基于本文方法生成的语料训练的模型,其执行准确率(EX)达到57%,较传统人工标注语料微调模型提升16.3%,较少样本提示学习方法提升35.7%。且在复杂查询场景(困难/超困难级别)中,准确率优势进一步扩大,验证了生成语料对高阶逻辑的覆盖能力。泛化迁移性突出:实验显示,在三种不同参数量级(8B/4B/1.7B)的基座模型上,本文方法均保持稳定的性能增益。这表明生成语料对模型尺寸和领域分布具有强适应性,突破了传统语料对专业标注的强依赖。
尽管本文方法在语料生成效率与模型性能上取得显著进展,仍存在以下改进方向:1) 跨模型协同验证:现有方法基于单一LLM进行双向增强,后续可通过多模型协同生成与验证,降低模型特异性偏差风险。2) 领域自适应增强:针对垂直领域(如金融、医疗)的复杂查询需求,需探索基于模式图嵌入(Schema Graph Embedding)的领域知识注入方法,提升嵌套子句(如WITH、HAVING)的生成准确率。