【Text2SQL 论文】PET-SQL:用 Cross-Consistency 的 prompt 增强的两阶段 Text2SQL 框架

论文:PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency

⭐⭐⭐

arXiv:2403.09732,商汤 & 北大

Code:GitHub

一、论文速读

论文一开始提出了以往 prompt-based 的 Text2SQL 方法的一些缺点:

  • 缺少对 table cell value 的先验关注。比如查询 sex 时,WHERE sex='Male'WHERE sex='M' 都是有可能的,LLM 也拿不准用哪个
  • 通过 prompt 让 LLM 做 schema linking 时,让 LLM 根据 question 和 schema 列出相关 schema 的效果并不好,因为像对于 CodeLlama 这样的模型来说,基于指令生成非代码文本并不是他们的强项
  • 目前方法的 post-refinements 收益也不明显:
    • 如果一个由强大的 LLM 生成的 SQL 具有语义模糊而不是语法错误的话,那 LLM 是无法 self-debugging 的
    • 使用 self-consistency 时,LLM 的投资和产出是不成比例,多次调用一个 LLM 产生数倍的成本,并没有从根本上让 SQL 的输出更加多样化

由此,论文提出了 Prompt-Enhanced Two-stage text2SQL framework with cross-consistencyPET-SQL)—— 通过两个 stage 来完成任务。

二、PET-SQL

2.1 Stage 1:few-shots prompt 生成 PreSQL

这个阶段构造出一个 few-shots 的 prompt 用来输入给 LLM。

2.1.1 prompt 的表示风格

有多种指导 LLM 生成 SQL 的 prompt 表示风格。以往研究发现,Code Representation(CRp)和 OpenAI Demonstration(ODp)这两种是很不错的选择,示例如下图:

在这里插入图片描述

论文基于 ODp 进一步丰富了 prompt 的信息,提出了 Reference-Enchanced representation(REp)的 prompt,改动如下:

  • 在 instruction 最后加了一句 You must minimize SQL execution time while ensuring correctness 来指示 LLM 不仅要关注执行正确性,还要注意 SQL 语句的效率,避免冗余的字符和操作符。
  • prompt 中增加 table cell value 示例,也就是随机选择数据库表的 3 rows
  • prompt 中增加 schema 的外键关系

提出的 REp 示例如下:

在这里插入图片描述

2.1.2 增加 few-shots examples

这里从 dataset 中检索出与 user question 相似的样本来作为 ICL 的 demonstrations。

注意,这里要对被检索的 NL-SQL pairs 做去语义化:也就是把 question 中与 table schema 相关的 tokens 用 <mask> 去掉,从而得到一个只呈现问题意图的 question skeleton。然后再对这些 question skeleton 使用 embedding 做语义嵌入,从而用于检索。

检索到的 top-K 被用作 demonstrations 用于 few-shots ICL。

这样,demonstrations 和前面的 REp prompt 结构,构成了用于输入给 LLM 的 prompt:

在这里插入图片描述

由此,可以得到一个 LLM 生成的 preliminary SQL(PreSQL)。

2.2 Stage 2:Schema Linking 与 FinSQL 生成

这里的实现基于一个简单的原则:PreSQL 与 question 高度相关。

因此,解析 PreSQL 以识别其中提到的 db tables 和 columns,并用于数据库的 schema linking。

然后 schema linking 的结果被用来简化 prompt 中的 schema 信息,去除掉无关的 table 和 column 信息,如下所示:

在这里插入图片描述

使用这个简化后的 prompt 用来生成 FinSQL。

2.3 Cross Consistency

以往做 Text2SQL 时往往会使用 self-consistency 来修正 SQL 结果,但这有一些问题:使用 self-consistency 往往是将 LLM 的问题调高使其生成多样化,然后多次生成后投票选出最终结果。但是研究也发现,高温下的 LLM 会增加幻觉、降低性能,且对于确定性任务(如生成 SQL),单个 LLM 的多样性也不足。

所以本文提出:在较低的温度下指导多个 LLMs 生成 SQL,然后在这些 SQL 的执行结果之间投票。这也就是 Cross Consistency

关于投票的思路,这里提出了两种:

  • Naive voting:让每个 LLMs 都生成一个 SQL,执行后进行投票,将大多数结果作为最终答案
  • Fine-grained voting:由于不同的 LLM 的能力不同,所能处理的问题的复杂度不同,因此,根据 PreSQL 的语法解析结果将 question 分为四个难度,然后不同的难度的问题由不同的候选 LLMs 来解决,并进行投票。这样可以最大限度发挥 LLM 的潜力,并显著减轻投票偏见。

三、实验

在 Spider 数据集上做了测试,使用 EX 作为评估,使用的 LLM 包括 CodeLlama、SQLCode、IternLM、SenseChat、GPT-4 等。

在 Spider 上的表现,在所有非基于学习的方法中实现了最高的 EX,比 DAIL-SQL 高出 1%。

具体的实现可以参考原论文。

四、总结

PET-SQL 的两阶段思路还是挺好理解上,prompt 设计上主要多了 db content 样例,整个过程中,使用 question de-semanticization 来提取问题骨架表示问题意图在实现上应该是整个流程里最复杂的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ug编程怎么录制宏:一步步探索自动化编程的奥秘

ug编程怎么录制宏&#xff1a;一步步探索自动化编程的奥秘 在UG编程的浩瀚领域中&#xff0c;录制宏是一项强大而神秘的功能。它就像一位魔法师&#xff0c;能够将繁琐的重复操作化为简单的指令&#xff0c;释放出惊人的编程效率。然而&#xff0c;对于许多初学者来说&#xf…

使用缓存降低数据库并发读写方案探索

文章目录 前言缓存设计思想缓存划分缓存应用时机 客户端缓存浏览器缓存网关或代理服务器缓存CDNPCDN 服务端缓存本地缓存本地缓存实现Java堆缓存memcached/ecachecaffeineORM框架一级/二级缓存 分布式缓存分布式缓存优缺点分布式缓存实现分布式缓存实施过程可能遇到问题分布式缓…

Linux下svn安装及配置

目录 1、svn安装 2、创建一个仓库目录 3、使用svn自带命令建立仓库 4、编辑svnserve.conf主配置文件 5、编辑passwd文件 6、编辑authz文件 7、启动SVN服务 8、端口开放 9、Linux使用客户端测试 10、在Linux上创建一个文件后提交到SVN 1、svn安装 mount /dev/cdrom /…

Socket编程权威指南(二)完美掌握TCP流式协议及Socket编程的recv()和send()

在上一篇文章中&#xff0c;我们学习了Socket编程的基础知识&#xff0c;包括创建Socket、绑定地址、监听连接、接收连接等操作。然而&#xff0c;真正的套接字编程远不止于此。本文将重点介绍TCP 流式协议&#xff0c;什么是粘包问题&#xff1f;如何解决粘包问题 &#xff1f…

利用R包“Phenotype”对表型值进行检查

首先&#xff0c;你需要确保你已经安装了R和RStudio&#xff08;如果你想用RStudio的话&#xff09;。然后&#xff0c;你可以按照以下步骤进行操作&#xff1a; 加载数据&#xff1a;首先&#xff0c;你需要加载你的表型数据。如果你的数据是以CSV、Excel等格式保存的&#x…

跨网段路由

跨网段路由通常是指在网络中配置路由&#xff0c;以允许不同子网之间的通信。要设置跨网段的永久路由&#xff0c;取决于你是在操作路由器、交换机这样的网络设备&#xff0c;还是在配置个人计算机&#xff08;如Windows或Linux系统&#xff09;。下面是两种常见情况下的简要指…

地面站Mission planner

官方教程; Mission Planner地面站介绍 | Autopilot (gitbook.io) Mission Planner 功能/屏幕 — Mission Planner 文档 (ardupilot.org) 安卓或者windows软件下载地址&#xff1a; 地面站连接及使用 plane (cuav.net) 在完全装机后再进行各干器件的校准&#xff0c;没有组…

【LeetCode 前缀和 + 哈希表】LC_560_和为K的子数组

文章目录 1. 和为K的子数组&#x1f197; 1. 和为K的子数组&#x1f197; 题目链接&#x1f517; &#x1f427;解题思路&#xff1a; 前缀和 哈希表 &#x1f34e; 设i为数组中的任意位置&#xff0c;⽤ sum[i] 表⽰ [0, i] 区间内所有元素的和。 &#x1f34e; 想知道有…

【设计模式深度剖析】【5】【行为型】【迭代器模式】

&#x1f448;️上一篇:策略模式 设计模式-专栏&#x1f448;️ 文章目录 迭代器模式定义英文原话直译如何理解呢&#xff1f; 迭代器模式的角色1. Iterator&#xff08;迭代器&#xff09;2. ConcreteIterator&#xff08;具体迭代器&#xff09;3. Aggregate&#xff08;聚…

SQLServer(二)

SQLServer主要支持的编程语言是Transact-SQL&#xff08;T-SQL&#xff09;。T-SQL是SQL的专有扩展&#xff0c;它支持声明变量、字符串和数据处理、错误和异常处理以及事务控制。T-SQL程序通常会以BEGIN语句开头&#xff0c;以END语句终止&#xff0c;二者之间是你要执行的语句…

用 DataGridView 控件显示数据

使用DataGridView&#xff0c;可以很方便显示数据。 &#xff08;1&#xff09;Visual Studio版本&#xff1a;Visual Studio 2022 &#xff08;2&#xff09;应用程序类型&#xff1a;windows form &#xff08;3&#xff09;编程语言&#xff1a;C# 一、目标框架 .NET Fra…

K-BAT01,K-CU01和利时卡件

K-BAT01,K-CU01和利时卡件。现场控制站下装与在线调试。9二、组态流程&#xff1a;操作站组态控制站组态新建工程控制站用户组态历史站组态下装现场控制站下装历史站下装操作员站10三、组态详解&#xff1a;1、K-BAT01,K-CU01和利时卡件。新建工程&#xff1a;打开工程总控&…

【Unity】Kafka、Mqtt、Wesocket通信

1 前言 最近研究了下kafka、mqtt、webocket插件在Unity网络通信中的应用&#xff0c;做下小总结吧。&#xff08;不想写笔记&#xff0c;但不写又会忘&#xff0c;痛苦&#xff09; 2 Kafka 先说结果&#xff1a;Kafka实现失败。 我会使用的方法是在VS里安装了Confluent.Kafka…

项目3:从0开始的RPC框架(扩展版)

一. 全局配置加载 1. 需求分析 通常情况下&#xff0c;在RPC框架运行的会涉及到多种配置信息&#xff0c;比如注册中心的地址、序列化方式、网络服务端接口号等。 在简易版框架中&#xff0c;硬编码了这些配置&#xff0c;也就是都写死了&#xff0c;在真实的应用环境中是不…

写在高考之际

一年一度的高考又开始了&#xff0c;祝愿各位考生都考出自己理想的成绩&#xff0c;成功进入自己心仪的大学。今年全国参加高考的人数有1353万&#xff0c;江苏省48万&#xff0c;竞争异常激烈。在我参加高考的2000年&#xff0c;全国只有375万名考生。 2000年以前的江苏高考都…

python的np.linspace()函数

np.linspace函数的基本语法如下&#xff1a; numpy.linspace(start, stop, num50, endpointTrue, retstepFalse, dtypeNone)参数说明&#xff1a; start&#xff1a;序列起始值stop&#xff1a;序列结束值num&#xff1a;生成的样本数&#xff0c;默认为50endpoint&#xff1a…

深度探索 copilot插件

Copilot 插件是由 GitHub 推出的代码辅助工具&#xff0c;利用 OpenAI 的大规模语言模型&#xff08;如 GPT-3.5 或更高版本&#xff09;提供智能代码补全和生成功能。以下是对 Copilot 插件的深度探索&#xff0c;涵盖其功能、优点、局限性以及如何高效使用等方面。 ### 功能…

【启程Golang之旅】让文件操作变得简单

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

MySQL 与 PostgreSQL 关键对比二(SQL语法)

目录 1 详细示例 1.1自动增量列 1.2 字符串连接 1.3 JSON 支持 2 总结 MySQL 和 PostgreSQL 是两种流行的开源关系数据库管理系统&#xff08;RDBMS&#xff09;。尽管它们在许多方面相似&#xff0c;但在 SQL 语法和功能上存在一些显著差异。 以下SQL语句的执行如果需要开…

1. lvs负载均衡

lvs负载均衡 一、集群技术概述1、集群技术类型2、负载均衡技术3、高可用技术 二、负载均衡 LVS1、LVS介绍2、负载均衡策略/算法3、LVS设计模式3.1 NAT模式的注意事项3.2 DR 直接路由模式的注意事项 三、LVS nat模式的实现1、确认后端服务器网关正确2、安装ipvsadm软件3、开启路…