【Text2SQL】PET-SQL:在Spider基准测试中取得了SOTA
解读:PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency
这篇论文介绍了一个名为 PET-SQL 的文本到 SQL(Text-to-SQL)框架,旨在通过增强提示(prompt)和利用不同大型语言模型(LLM)之间的交叉一致性来提高性能。PET-SQL 框架在 Spider 基准测试中取得了 87.6% 的执行准确率,这是目前已知的最佳结果。
1. 方法论
1.1 Prompting(提示)
在指导大型语言模型(LLM)生成 SQL 查询时,提示(prompt)的风格或模板对模型的性能有显著影响。作者提出了一种称为参考增强表示(Reference-enhanced Representation, REp)的提示方法,它在传统的 OpenAI 示范(OpenAI Demonstration, ODp)基础上进行了增强。REp 包括以下几个关键部分:
-
优化规则(Optimization Rule, OR):提示中加入了一个多任务约束规则,要求 LLM 在确保正确性的同时最小化 SQL 执行时间。这有助于避免生成冗余字符和操作符,从而减少异常。
-
单元格值引用(Cell Value References, CV):在提示中随机采样并插入表中的几行数据,作为参考,帮助 LLM 理解数据库的格式和规范。这有助于解决由于不同表中数据格式不一致而导致的查询条件不明确的问题。
-
外键声明(Foreign Key Declarations, FK):在提示中添加了模式中外键关系,帮助 LLM 识别数据库中表之间的连接,从而更好地理解用户的意图并自动选择合适的连接。
1.2 基于问题骨架的 PreSQL 生成
这一模块的目标是从已知数据集中检索与目标问题具有相似意图的领域不可知样本,这些检索到的样本可以作为 LLM 的上下文学习示例。具体步骤如下:
-
问题去语义化:根据数据库模式,将问题中的域相关标记(如表名、列名和值)用特殊标记
<mask>
替换,得到代表问题意图的问题骨架。 -
检索示例:使用预训练的句子 Transformer 模型,基于问题骨架的语义嵌入,从示例池中检索与目标问题最相似的 K 个样本。
-
构建提示:将选定的示例与 REp 结合,作为少量上下文(few-shot context)添加到提示中,然后使用这个提示来生成初步的 SQL(PreSQL)。
1.3 模式链接和 FinSQL 生成
为了减少可能阻碍 LLM 性能的冗长模式信息,作者提出了基于 PreSQL 的模式链接方法,以识别与数据库模式和自然语言问题相关的引用(表/列)。具体步骤包括:
-
模式链接:直接从 PreSQL 中解析出与问题相关的表/列实体作为链接结果,而不是设计策略让 LLM 输出相关的数据库引用。
-
简化提示:使用解析出的模式信息简化提示,去除与链接表无关的所有上下文,包括模式属性、数据库引用和外键声明。
-
生成 FinSQL:将简化后的提示输入 LLM,生成最终的 SQL(FinSQL)。
1.4 交叉一致性
这一部分详细描述了基于数据库引擎执行 SQL 查询结果的一致性模块,包括两种可行的实现策略:
-
简单投票:使用多个 LLM 生成 SQL,并根据执行结果进行投票,以多数结果作为最终答案。
-
基于 PreSQL 复杂度的细粒度投票:根据 PreSQL 的复杂度将问题分为不同等级,并由不同的候选 LLM 解决,以进行投票。这种方法可以最大化 LLM 的潜力,并显著减少投票偏差。
2. 实验
- 数据集和指标:使用 Spider 基准测试进行评估,主要指标是执行准确率(EX)。
- 评估的 LLM:包括 CodeLlama、SQLCoder、InternLM、SenseChat 和 GPT4。
- 实验设置:设置低温(低随机性)以减少 LLM 输出的随机性,输入和输出的最大长度分别为 4096 和 200。
- 整体性能:PET-SQL 在 Spider 测试集上取得了 87.6% 的执行准确率,超过了其他非学习基础方法。
- 提示的影响:提出的提示(REp)在零样本设置下表现出色,比现有的提示方法有显著改进。
- 模式链接的影响:通过模式链接简化提示信息可以提高 LLM 生成 SQL 查询的效率和准确性。
- 交叉一致性的影响:交叉一致性策略比自我一致性更有效,能够提高整体执行准确率。
3.局限性及未来方向
3.1局限性
-
模型复杂性和计算成本:PET-SQL 框架涉及多个阶段的处理,包括预 SQL 生成、模式链接和交叉一致性检查,这可能导致较高的计算成本,尤其是在需要多个 LLM 协作时。
-
数据集依赖性:尽管在 Spider 基准测试中取得了良好的性能,但 PET-SQL 框架可能对数据集的特定特征敏感。在不同的数据库模式或领域特定的数据集上,性能可能会有所不同。
-
提示设计:尽管论文提出了一种有效的提示设计方法,但提示的设计可能需要针对不同的 LLM 进行调整,以实现最佳性能。
-
错误处理和异常情况:在处理复杂的用户意图或数据库模式时,PET-SQL 可能在某些情况下无法生成正确的 SQL 查询,尤其是在处理模糊或不明确的自然语言输入时。
-
模型多样性:虽然交叉一致性利用了不同 LLM 之间的差异,但实际应用中可能需要更多的模型和更广泛的多样性来进一步提高性能。
3.2未来方向
-
优化计算效率:未来的工作可以探索减少计算成本的方法,例如通过改进算法或使用更高效的 LLM 架构。
-
泛化能力:研究如何提高 PET-SQL 在不同数据库模式和领域数据集上的泛化能力,使其更加灵活和适应性强。
-
提示自动化:开发自动化工具来生成和优化提示,减少手动调整的需要,并提高框架的易用性。
-
错误分析和修正:深入分析 PET-SQL 在特定情况下失败的原因,并开发有效的错误处理和异常情况修正机制。
-
增强模型多样性:探索更多的 LLM 选项,并研究如何更有效地结合它们的输出,以进一步提高交叉一致性的效果。
-
交互式学习:考虑用户反馈循环,使 PET-SQL 能够在与用户的交互中学习和改进,以更好地理解复杂的用户意图。
-
多模态输入:扩展 PET-SQL 以处理多模态输入,如结合自然语言和视觉信息,以支持更丰富的应用场景。
-
可解释性和透明度:提高 PET-SQL 的可解释性,让用户理解模型的决策过程,增加对模型结果的信任。
相关文章:

【Text2SQL】PET-SQL:在Spider基准测试中取得了SOTA
解读:PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency 这篇论文介绍了一个名为 PET-SQL 的文本到 SQL(Text-to-SQL)框架,旨在通过增强提示(prompt)和利用不同大型语言…...

python-3n+1数链/233
一:3n1数链题目描述 在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可解决。现在我们就有这样一个问题,问题如下&#…...

vue2基础系列教程之v-model及面试高频问题
v-model是表单组件里面的核心知识点,这个指令给我们写表单业务带来了很大的方便。 元素标签上的 v-model 指令用于双向绑定数据,它是一个语法糖,可以用于代替 v-bind:value 和 input 例如:<input v-model"message" placeholder…...

【高分系列卫星简介——高分一号(GF-1)】
高分一号卫星(GF-1) 高分一号(GF-1)是中国高分辨率对地观测系统(简称“高分专项”)的第一颗卫星,具有里程碑式的意义。以下是对高分一号卫星的详细介绍: 一、基本信息 发射时间&…...

Python基于TensorFlow实现时间序列循环神经网络回归模型(LSTM时间序列回归算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着信息技术的发展和传感器设备的广泛应用,时间序列数据的产生量急剧增加。无论是股市价格…...

springboot实战学习(6)(用户模块的登录认证)(初识令牌)(JWT)
接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑。具体往回看了解的链接如下。 springboot实战学习笔记(5)(用户登录接口的主逻辑)-CSDN博客文章浏览…...
二叉树的顺序存储和基本操作实现
写代码:定义顺序存储的二叉树(数组实现,树的结点从数组下标1开始存储) 基于上述定义,写一个函数 int findFather ( i ) ,返回结点 i 的父节点编号 基于上述定义,写一个函数 int leftChild ( i…...
python学习-10【模块】
1、认识模块 导入模块 使用 import 语句使用 from … import 语句 1、import modulename [as alias] modulename:表示要导入的模块名as alias:可选参数,为模块起的别名 2、from modulename import name modulename:模块名&#x…...

modbus调试助手/mqtt调试工具/超轻巧物联网组件/多线程实时采集/各种协议支持
一、前言说明 搞物联网开发很多年,用的最多的当属modbus协议,一个稳定好用的物联网组件是物联网平台持续运行多年的基石,所以这个物联网组件从一开始就定位于自研,为了满足各种场景的需求,当然最重要的一点就是大大提…...
数值计算 --- 平方根倒数快速算法(0x5f3759df,这是什么鬼!!!)
平方根倒数快速算法 --- 向Greg Walsh致敬! 1,牛顿拉夫逊 已知x,要计算,假设的值为a,则: ,(式1) 如果定义一个自变量为a的函数f(a): 则,令函数f(a)等于0的a就…...
迭代器和生成器的学习笔记
迭代器 Python 迭代器是一种对象,它实现了迭代协议,包括 __iter__() 和 __next__() 方法。迭代器可以让你在数据集中逐个访问元素,而无需关心数据结构的底层实现。与列表或其他集合相比,迭代器可以节省内存,因…...
ES5 在 Web 上的现状
最后一个支持 ES5 的浏览器 IE 11 在 2022 年被微软停止支持,那么今天 Web 上的 ES5 现状如何?在构建生产代码时,Web 开发者的最佳实践是什么? 本文将通过数据来回答这些问题,并基于这些数据为网站开发者和库作者提供一…...
人话学Python-循环语句
一:while语句 while语句的组成由判断条件和执行语句组成。当满足条件时会不断执行后续语句,然后再循环执行的语句结束之后再次回到条件判断,如此循环。 pos 0 ans 0 while pos < 6:ans pos * 4pos 1 print(ans)>>>84"&…...

初识模版!!
初识模版 1.泛型编程1.1 如何实现一个交换函数呢(使得所有数据都可以交换)?1.2 那可以不可以让编译器根据不同的类型利用该模子来生成代码呢? 2.模版类型2.1 模版概念2.2 函数模版的原理2.3 函数模板的实例化2.4 模板参数的匹配原…...
算法之数学--hash算法 2021-03-11(未完待续)
1.hash算法 刷出一道墙 题目描述 Time Limit: 2000 ms Memory Limit: 256 mb 在一面很长的墙壁上,工人们用不同的油漆去刷墙,然而可能有些地方刷过以后觉得不好看,他们会重新刷一下。有些部分因为重复刷了很多次覆盖了很多层油漆ÿ…...

DHCP工作原理
在学习之前先提出几个问题:什么是DHCP?为什么要使用DHCP?在什么场景中使用DHCP?DHCP报文的目的IP和目的MAC是多少?DHCP报文是基于UDP还是基于TCP?DHCP服务器返回的报文中都包含什么信息? DHCP&a…...

服务发现和代理实例的自动更新
☞ 返回总目录 1.服务发现的两种方式 StartFindService 方法 这是一个在后台启动的连续 “FindService” 活动,当服务实例的可用性发生变化时,会通过回调通知调用者。 它返回一个FindServiceHandle,可通过调用StopFindService来停止正在进行…...

Redis的三种持久化方法详解
Redis持久化机制详解 | JavaGuide Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持 3 种持久化方式: 快照(snapshotting,RDB)只追加文件(append-only file, AOF)RDB 和 A…...

OpenAI GPT o1技术报告阅读(5)-安全性对齐以及思维链等的综合评估与思考
✨继续阅读报告:使用大模型来学习推理(Reason) 原文链接:https://openai.com/index/learning-to-reason-with-llms/ 编码 我们训练了一个模型,在2024年国际信息学奥林匹克竞赛(IOI)中得分213分,排名在第…...

nodejs 012:Babel(巴别塔)语言转换与代码兼容
这里写目录标题 安装 Babel配置presets配置:常见的 Babel Presetsplugins配置:以 plugin-transform-class-properties 的类中属性为例index.jsx Babel 是一个独立的 JavaScript 编译器,主要用于将现代 JavaScript 代码转换为旧版本的 JavaScr…...
在Linux上安装Docker并配置镜像加速器:从入门到实战
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 Docker作为容器化技术的标杆工具,已经成为现代软件开发和运维的必备技能。对于程序员和技术爱好者来说,在Linux系统上搭建D…...

python里面导入yfinance的时候报错
我的代码: import yfinance as yf import os proxy http://127.0.0.1:7890 # 代理设置,此处修改 os.environ[HTTP_PROXY] proxy os.environ[HTTPS_PROXY] proxydata yf.download("AAPL",start"2010-1-1",end"2021-8-1&quo…...

[STM32学习笔记(九)]CubeMX项目使用系统定时器SysTick的中断服务函数进行定时
有很多文章说明了由于HAL_Delay()函数的本质是系统定时器计数,通过全局变量uwTick的不断增加实现的比较延迟。调用HAL_Delay()函数会阻塞其他工作,因此在外设ISR进程调用该延迟时,要特别小心。 因此,现在考虑,既然系统…...
Debian:自由操作系统的精神图腾与技术基石
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——解码Linux世界最纯粹的开源哲学 一、Debian的诞生:从个人实验到全球协作 1993年,一位名为Ian Murdock的程序员在开源社区的启…...

day024-网络基础-TCP与UDP、DNS
文章目录 1. 李导推荐书籍2. OSI七层模型2.1 传输层2.2 网络层2.2.1 问:两端处于不同局域网的设备怎么网络通信? 2.3 数据链路层2.4 物理层2.5 图解OSI七层模型 3. 数据传输模式3.1 全双工3.2 半双工3.3 单工 4. TCP 3次握手4.1 抓包 5. TCP 4次挥手5.1 …...
window10下docker方式安装dify步骤
window10下docker方式安装dify步骤(稳定后考虑部署至linux中) 教程:https://blog.csdn.net/qq_49035156/article/details/143264534 教程:https://blog.csdn.net/m0_51171437/article/details/146069890 0、资源要求 ---windows…...
docker不用dockerfile
好的!既然你不想使用 Dockerfile,我们就完全不写 Dockerfile,改用你 Leader 提到的思路: 用基础镜像启动一个容器 → 手动在容器里安装依赖和复制项目 → 保存为新镜像 这个方式更直观,就像“你进入容器自己配置环境&a…...
电脑革命家测试版:硬件检测,6MB 轻量无广告 清理垃圾 + 禁用系统更新
各位电脑小白和大神们,我跟你们说啊!有个超牛的东西叫电脑革命家测试版,这是吾爱破解论坛的开发者搞出来的免费无广告系统工具集合,主打硬件检测和系统优化,就像是鲁大师这些软件的平替。下面我给你们唠唠它的核心功能…...

Axure设计案例——科技感立体柱状图
想让你的数据展示告别平淡无奇,成为吸引全场目光的焦点吗?快来瞧瞧这个Axure设计的科技感立体柱状图案例!科技感设计风格借助逼真的立体效果打破传统柱状图的平面感,营造出一种令人眼前一亮的视觉震撼。每一个柱状体都仿佛是真实存…...
c#与java的相同点和不同点
C# 和 Java 是两大主流的、面向对象的、托管型编程语言,它们共享许多相似的设计理念和语法,但也在细节、生态系统和运行平台上存在显著差异。以下是它们的相同点和不同点的详细对比: 一、相同点 (核心相似之处) 语法高度相似: 都源…...