PET-SQL:基于大模型的两阶段Text2SQL方法

一. 背景

论文: PET-SQL: A Prompt-Enhanced Two-Round Refinement of Text-to-SQL with Cross-consistency

二. 算法介绍

2.1 主要流程

PET-SQL这篇文章提出了一种创新的基于大型语言模型的Text2SQL方法,该方法将SQL生成过程分为两个不同的阶段。在第一阶段,系统利用了数据表的schema信息、数据表中的采样数据以及与问题相似的问答对,共同作用生成初步的SQL语句,称之为PreSQL。这一阶段的目标是快速生成一个接近目标的概要SQL。

随后,进入第二阶段,系统执行schema linking操作,这一过程通过智能过滤掉与当前问题不相关的schema信息,进一步提升SQL语句的准确性,从而生成最终的SQL语句,即FinSQL。这一阶段的优化确保了生成的SQL语句与用户查询的高相关性。

为了验证生成的SQL语句的正确性,论文中利用cross-consistency对其结果进行验证。即通过多个LLM对生成的多个候选SQL进行投票,以共识的方式决定生成的SQL是否正确。这种方法不仅提高了SQL生成的准确性,还增强了系统的可靠性。

第一部分: 生成preSQL

pet-sql 首先利用zero-shot prompt构建一个reference-enhanced representation。

这里的指令需要提醒LLM强调SQL生成时在保证正确性的前提下要考虑执行时间,以保障系统的性能:

"minimize SQL execution time while ensuring correctness"(图中第1行)

除了提供数据表的schema信息外,每个数据表采样了3条数据(图中第7-11行)

提供了数据表的外键信息(图中第12-15行),以更好的表示出不同表直接的链接关系。
除了zero-shot prompt外,作者考虑将与问题类似意图的question-SQL样例作为few-shot(如下图,将检索到的question-SQL放在zero-shot prompt前面)。

few-shot样例采用了论文参考文献9:A Case-Based Reasoning Framework for Adaptive Prompting in Cross-Domain Text-to-SQL提到的question de-semanticization方法。

具体来说,将问题里与特定数据表相关的token如表名、列名、数据取值等使用特殊token 替换得到问题骨架(问题骨架被认为是问题意图的表示)。将训练集中所有问题骨架和question-SQL存储起来作为检索池,对查询问题骨架化处理后使用向量化检索方式得到与查询问题最相似的top k question-SQL作为few shot。

第二部分: 对PreSQL进行筛选

根据第一阶段生成的PreSQL 内容,去掉与PreSQL中不相关的schema信息和外键信息,这个过程被称为schema linking (SL)(注:vanna 是通过向量检索方式来召回与问题最相关的schema,方法不一样,目的都是为了减少干扰信息)。

值得一提的是,这里的schema linking抽取和之前的DIN-SQL等schema linking抽取是有区别的,但本质上都是为了过滤掉干扰信息。

schema linking之后简化的zero-shot prompt如下图所示。

排序: 选出最优的SQL结果

观点: 作者认为self-consistency方法不是足够好的后处理方法,采取的是通过多个LLM来生成SQL的cross consistency策略,包括以下两种方法:

Naive voting across several LLMs:使用更强的LLM如GPT4生成PreSQL,第二阶段使用不同的低温度设置的LLM生成FinSQL。将所有FinSQL和PreSQL在数据库引擎上执行并获取结果,将生成多数结果的SQL作为最后的答案。

Fine-grained voting according to PreSQL complexity:在Naive voting 基础上考虑PreSQL的难易程度,按照难易程度进行分组投票。

2.2 心得体会

整体上PET-SQL的思路是很清晰的,在prompt的设计上加了基于相似度的few-shot示例,对于结果的提升还是比较明显的;其次在利用PreSQL->FinSQL->Ranking的业务流程下,能更好地适配体量较大的数据查询场景。

局限的点就是需要对利用多个大模型进行仲裁,这里的成本可能会相对较高。

相关推荐
爱写代码的森6 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
广州灵眸科技有限公司7 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手10 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
白露与泡影11 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
oradh12 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
神奇霸王龙12 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码12 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
z1234567898613 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程