【Text2SQL 论文】C3:使用 ChatGPT 实现 zero-shot Text2SQL

2024-06-07 20:52

本文主要是介绍【Text2SQL 论文】C3:使用 ChatGPT 实现 zero-shot Text2SQL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文:C3: Zero-shot Text-to-SQL with ChatGPT

⭐⭐⭐⭐

arXiv:2307.07306,浙大

Code:C3SQL | GitHub

一、论文速读

使用 ChatGPT 来解决 Text2SQL 任务时,few-shots ICL 的 setting 需要输入大量的 tokens,这有点昂贵且可能实际不可行。因此,本文尝试在 zero-shot 的 setting 下来解决 Text2SQL 问题。

本文提出了 C3 来基于 ChatGPT zero-shot 去做 Text2SQL,实现了 1000 tokens per query 下优于 fine-tuning-based methods。

二、C3

C3 由三个关键组件构成:Clear Prompts(CP)、Calibration with Hints(CH)、Consistency Output(CO),分别对应着模型输入、模型偏差和模型输出。

2.1 Clear Prompts 组件

Clear PromptsCP)组件的目标是为 ChatGPT 解决 Text2SQL 任务构建一个有效的 prompt。它由两部分组成:Clear Layout 和 Clear Context。

2.1.1 Clear Layout

在 Text2SQL 中,有两种 prompt layout 的 styles:

  • 类型 1:Complicated Layout:这种类型的 prompt 直接将 instruction、question 和 context 拼接起来,看起来较为杂乱,如下图的 (a) 所示
  • 类型 2:Clear Layout:这种类型的 prompt 使用一个明显的分隔符将 instruction、question 和 context 分开,看起来更加清晰,如下图的 (b) 所示

在这里插入图片描述

论文指出,从直觉和实验上,都证明了 clear layout 能产生更好的表现。因此本文主要使用改进后的 clear layout。

但是,论文发现直接使用上图的 (b) 作为 prompt 会在生成的 SQL 中产生冗余的 columns,为了解决这个问题,论文在 instruction 部分后面加了一句:and do not select extra columns that are not explicitly requested in the query

2.1.2 Clear Context

论文指出,在 prompt context 中包含整个 db schema 会导致两个问题:

  1. 在 prompt 引入过多的不相关 schema items 会让 ChatGPT 生成 SQL 时增加不相关 items 的 likelihood。
  2. 使用完整的 db schema 会让文本长度过大,导致不必要的 API tokens 开销

为此,论文提出需要先进行 schema linking 以召回相关的 tables 和 columns,并只将相关的信息放入 prompt context 中。

本文提出了一个 ChatGPT-based zero-shot 的 schema linking 的方法,分成两步:

  • Table Recall:使用一个 prompt 让 ChatGPT 召回相关 tables
  • Column Recall:基于 table recall 的结果,使用 prompt 让 ChatGPT 进一步召回相关 columns

Table Recall 的 prompt 示例如下:

在这里插入图片描述

Column Recall 的 prompt 示例如下:

在这里插入图片描述

2.2 Calibration with Hints 组件

论文通过分析生成的 SQL query,发现了几个由于 ChatGPT 固有的 biases 造成的 errors:

  • Bias 1:ChatGPT 在 output 中倾向于保守,SELECT 语句中经常出现与问题相关但不是必需的列。而且在涉及到数量问题时尤为明显。比如下图的左边第一个问题,COUNT(*) 仅用于排序,但 ChatGPT 在 SELECT 中也将其输出了。
  • Bias 2:ChatGPT 编写 SQL 时倾向于使用 LEFT JOIN、OR、IN,但经常无法正确使用它们。这种 bias 通常会导致执行结果中出现额外的值。

在这里插入图片描述

为了校准这些 bias,论文使用一个单独的组件来实施校准策略:Calibration with HintsCH)。

论文通过将用于修正 Bias 的先验知识注入到与 ChatGPt 的历史对话中。在对话 history 中,我们让 ChatGPT 认为自己是一个优秀的 SQL 编写器,并引导它去遵循我们提出的 debias hints:

  • Hint 1:针对第一个 bias,这里设计了一个 tip 去指导 ChatGPT 只选择必要的 columns
  • Hint 2:针对第二个 bias,这里设计了一个 tip 来防止 ChatGPT 滥用一些 SQL 关键字。如下图所示,prompt 中直接要求 ChatGPT 尽量避免使用 LEFT JOIN、IN、OR,而使用 JOIN 和 INSERSECT,而且在适当时使用 DISTINCT 或 LIMIT,来避免重复的执行结果。

如下是一个示例:

在这里插入图片描述

2.3 Consistency Output 组件

由于 LLM 固有的随机性,ChatGPT 的输出是不稳定的。这里将 Text2SQL 也视为 reasoning 问题,于是使用 self-consistency 思想来提高效果。

论文提出了一个 execution-based self-consistency for Text2SQL 方法,封装为这里的 Consistency OutputCO)组件,用于选择 LLM 生成的 SQL。

这里的思想是,让 LLM 通过多个推理路径来生成多个 SQL answers,然后移除掉其中 execution error 的 SQL,并对剩余的 SQL 进行投票,从而选出最终的答案

2.4 总结

C3 的整体框架如下:

在这里插入图片描述

三、实验

论文在 Spider 数据集上使用 Execution Accuracy(EX)作为指标来测试。

整体上的实验发现,C3 在 Spider 测试集上优于所有传统的基于微调的方法,在 Spider 排行榜上排名第二。与 top-1 方法的 few-shots settings 的 DIN-SQL 相比,只使用了约 10% 的 token 数量,而且这里使用的 GPT-3.5 在成本上也低于 DIN-SQL 使用的 GPT-4。所以,C3 方法更加预算友好

此外,论文还做了不少的消融实验,总结了 error cases 的分析,具体可参考原论文。

四、总结

本文提出的 C3 基于 ChatGPT 实现了 zero-shot Text2SQL,并取得了 zero-shot 的最好性能。

C3 从模型输入、模型偏差和模型输出三个角度为基于 GPT 的 Text2SQL 提供了系统的处理方法。这些方法值得后面的研究来参考。

这篇关于【Text2SQL 论文】C3:使用 ChatGPT 实现 zero-shot Text2SQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040274

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

AI儿童绘本创作

之前分享过AI儿童绘画的项目,但是主要问题是角色一致要花费很长的时间! 今天发现了这款,非常奈斯! 只需输入故事主题、风格、模板,软件就会自动创作故事内容,自动生成插画配图,自动根据模板生成成品,测试效果如下图。 变现方式:生成儿童绘本发布到各平台,吸引宝妈群体进私域。  百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动