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的业务流程下,能更好地适配体量较大的数据查询场景。

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

相关推荐
爱编程的小庄23 分钟前
web网络安全:SQL 注入攻击
前端·sql·web安全
xing.yu.CTF1 小时前
Web入侵实战分析-常见web攻击类应急处置实验2
运维·服务器·windows·web安全·apache·php漏洞·phpstudy后门漏洞
小池先生1 小时前
阿里云子账号管理ECS权限配置全指南
服务器·阿里云·云计算
史迪仔01122 小时前
【SQL】SQL多表查询
数据库·sql
Quz2 小时前
MySQL:修改数据库默认存储目录与数据迁移
数据库·mysql
Familyism2 小时前
Redis
数据库·redis·缓存
隔壁老登2 小时前
查询hive指定数据库下所有表的建表语句并生成数据字典
数据库·hive·hadoop
sekaii3 小时前
ReDistribution plan细节
linux·服务器·数据库
焱焱枫3 小时前
自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用
数据库·sql·oracle
2301_793069823 小时前
Spring Boot +SQL项目优化策略,GraphQL和SQL 区别,Spring JDBC 等原理辨析(万字长文+代码)
java·数据库·spring boot·sql·jdbc·orm