【Text2SQL 论文】How to prompt LLMs for Text2SQL

论文:How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings

⭐⭐⭐⭐

arXiv:2305.11853, NeurlPS 2023

Code: GitHub

一、论文速读

本文主要是在三种常见的 Text2SQL ICL settings 评估不同的 prompt construction strategies。

二、Text2SQL ICL settings

论文在下面三种 Text2SQL settings 下来做的评估:

  • Zero-shot Text2SQL:输入一个 task instruction、一个 test question 以及相应的 DB,在没有任何 demonstrations 情况下让 LLM 直接推理出 SQL
  • Single-domain Few-shot Text2SQL:ICL 的 demonstrations 是构造自与 test question 相同的 database。这个 setting 的目标是评估 LLM 在最小的域内训练数据下执行 Text2SQL 的能力。
  • Cross-domain Few-shot Text2SQL:ICL 的 demonstrations 是构造自与 test question 的不同的 database 中。这个 setting 的目标是评估 LLM 通过 out-of-domain demonstrations 中来学习的泛化能力。

三、Prompt Construction

论文在每个 Text2SQL setting 中测试了不同的 prompt construction 的效果。

一个 prompt 中包含 Database Prompt 和 Demonstration Prompt。

3.1 Database Prompt

一个关系型 DB 包含 database schema 和 database content:

  • database schema 由 table headers 和 tables 之间的 relationships 组成。
  • database content 指的是存储在 tables 中的 data
3.1.1 Database Schema 的 prompt 结构

下图展示了之前的研究中使用的 database schema 的各种 prompt 结构:

在这里插入图片描述

同时为了保证文本的一致性,论文对 db schema 和 SQL 做了规范化:将 SQL 中除了数据库内容之外的所有单词转换为小写,并统一文本中的空格和换行符。如下图就是规范化前后的示例:

在这里插入图片描述

3.1.2 Database Content 的 prompt 结构

之前的研究内容也表示,了解数据库的内容示例可以提高模型的性能。

下图展示了 Database Content 部分的 prompt style:

在这里插入图片描述

  • InsertRow:通过 INSERT INTO 语句显示每个 table 的几行数据
  • SelectRow:显示 SELECT * FROM T LIMIT X 的查询结果
  • SelectCol:按照列式的格式显示多行数据

本文提出使用 SELECT DISTINCT [Column] FROM [Table] LIMIT R 去列出 R 行数据,从而避免重复。

3.2 Demonstration Prompt

在 few-shots settings 中,demonstrations 被放入 prompt text 来输入给 LLM。

在 single-domain few-shot setting 中,这里融入了一些 question-SQL 的 pairs 作为 demonstrations。

在 cross-domain few-shot setting 中,以往的研究都是:

  • 要么 N 个 examples 都来自于一个相同的 db
  • 要么 N 个 examples 的每一个来自于不同的 db

本文考虑了更泛用的场景:N 个 examples 是由 M 个 db 组成,每个 db 由 K 个 question-SQL pairs,由此 M × K = N M \times K = N M×K=N

四、实验

本文在 Spider 数据集的 dev split 上实验,采用执行精度(EX)来评估 predicted SQL 和 gold SQL。

这里论文指出,在选择 few-shots 的 demonstrations 时,由于少数 db 包含长模式,这有可能导致 prompt token 数量超过 LLM 限制,所以在构造 CreateTable prompt 时,这里只使用 token 少于 1000 的 db。

具体的实验细节可以参考原论文。

五、实验结果

这一章介绍了在 zero-shot、single-domain 和 cross-domain 的三种 settings 下 Text2SQL 的经验发现。

5.1 zero-shot 的 Text2SQL

zero-shot setting 中重点关注于比较不同的 database prompt construction。下图展示了多种 database prompt 的 Codex 和 ChatGPT 的表现:

在这里插入图片描述

实验发现:

  • 规范化后的 db schema 和 SQL 可以有更好的表现
  • db table 的 relationship 和 content 是很重要的,有效地提高了 LLM 的表现
  • Codex 在 zero-shot Text2SQL 任务上始终优于 ChatGPT

基于以上发现,论文建议将 Codex 与规范化后的 CreateTable-SelectCol prompt construction 结合起来使用,来实现 zero-shot 的 Text2SQL。

5.2 single-domain 的 Text2SQL

下图展示了在 Codex 和 ChatGPT 上做 single-domain Text2SQL 任务时,不同的 in-domain examples 的执行精确度的实验结果:

在这里插入图片描述

得出以下结论:

  • in-domain 的 demonstrations 能有效提升 LLM 的表现,并随着示例数量的提高,LLM 的效果也在逐渐变好
  • LLM 能够从 in-domain demonstrations 中快速学习到 table relationship,但难以从中学习到 table content 的知识,因此 table content 的 prompt 是重要的

5.3 cross-domain 的 Text2SQL

ICL 的 demonstrations 中使用了 M 的 demonstration databases,每一个包含 K 个 NLQ-SQL pairs。

下面这个热力图展示了 M 和 K 的个数对精确度的影响(横轴是 M,纵轴是 K,颜色越深,精确度越高):

在这里插入图片描述

这里对实验的分析可以参考原论文。

总之,out-of-domain 的 demonstrations 增强了 LLM 在 Text2SQL 中的能力,但这些示例并没有提供特定于 DB 的知识,因此,仔细构建 Database Prompt 仍然至关重要,这也与在 zero-shot setting 中所做的观察是一致的。

六、总结

整的来说,论文在三种 Text2SQL ICL settings 中比较了各种 prompt constructions 的效果,为未来的研究提供了指导。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

node.js漏洞——

一.什么是node.js 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常…

5-Django项目--分页与搜索(资产页面)

目录 views/asset_data.py asset_data/asset_data.html 搜索与分页笔记: 搜索 整数搜索 字符串搜索 分页 views/asset_data.py # -*- coding:utf-8 -*- from django.shortcuts import render, redirect, HttpResponse from django.utils.safestring import mark_safe f…

redis安裝启动

1、下载redis解压 https://github.com/tporadowski/redis/releases 2、打开cmd,切换到解压的文件夹 3、redis-server.exe redis.windows.conf 启动redis redis可通过命令行输入config set requirepass password和直接修改redis.config文件中修改 requirepass 来设…

usb的hid报表描述符的数据含义详解

报表描述符组成基本单元item 项目编码有二种:短项目和长项目,长项目仅是保留给未来使用,所以不作介绍。下面是短item时,最后一个字节描述了item种类和尺寸 长item格式如下: 短格式如下 bSize :代表后面的…

kotlin 调用java的get方法Use of getter method instead of property access syntax

调用警告 Person.class public class Person {private String name;Person(String name) {this.name name.trim();}public String getName() {return name;}public void setName(String name) {this.name name;}public String getFullName() {return name " Wang&quo…

PasteCode系列系统说明

定义 PasteCode系列是指项目是基于PasteTemplate构建的五层以上项目,包括不仅限于 Domain EntityFrameworkCore Application.Contracts Application HttpApi.Host 熟悉ABP vNext就很好理解了,因为PasteTemplate就是基于ABP的框架精简而来!在…

【Java】static 修饰成员方法

static 修饰成员方法 简介 应用 static 修饰成员方法 1.static 修饰成员方法2.内存原理3.main函数4.类方法的应用 1.static 修饰成员方法 测试类: package suziguang_d2_staticdemo;public class Test {public static void main(String[] args) {// 1.类方法使用/…

体育器材管理系统(Java+MySQL)

技术栈 Java语言:作为主要编程语言,用于编写应用逻辑和界面交互。MySQL数据库:用于存储和管理体育器材的相关数据。Swing窗口视图:用于创建图形用户界面,使用户能够通过窗口进行操作(GBK编码)。…

电源设计01

嵌入式电源设计 电池容量的计算电路充电时的选择: 科普硬件知识,写写关于电路板电源的事情。各类电源模块实物但为什么硬件工程师又必须要了解电源并且在板内自己设计电源呢?首先是DCDC的降压芯片下面推荐几个升压芯片:LDO 电池容…

vue3+elementPlus实现Radio单选切换显示不同内容

el-radio-group 组件方法&#xff1a; <template><el-radio-group v-model"radio"><el-radio :value"0">阶梯达标</el-radio><el-radio :value"1">限时达标</el-radio></el-radio-group> </templ…

【设计模式深度剖析】【3】【行为型】【职责链模式】| 以购物中心客户服务流程为例加深理解

&#x1f448;️上一篇:命令模式 设计模式-专栏&#x1f448;️ 文章目录 职责链模式定义英文原话直译如何理解呢&#xff1f; 职责链模式的角色1. Handler&#xff08;抽象处理者&#xff09;2. ConcreteHandler&#xff08;具体处理者&#xff09;3. Client&#xff08;客户…

Vue随笔记

1 Idea里面使用Vue Idea里面要安装Vue插件 File - New - Project - JavaScript - Vue.js 然后出现&#xff1a; "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js" --ignore-existing --package vue/cli…

学习串口屏需要了解哪些方面的知识

学习串口屏需要掌握的知识主要包括以下几个方面&#xff1a; 串口通信原理&#xff1a;串口屏是基于串口通信的显示控制模组&#xff0c;因此了解串口通信的基本原理和通信协议是必要的。你需要了解串口通信的基本概念、数据格式、波特率、校验位等参数&#xff0c;以及串口通…

信息学奥赛初赛天天练-21-完善程序-动态规划、编辑距离与字符数组应用的极致探索

PDF文档公众号回复关键字:20240606 1 2023 CSP-J 完善程序2 完善程序&#xff08;单选题&#xff0c;每小题 3 分&#xff0c;共计 30 分&#xff09; 给定两个字符串&#xff0c;每次操作可以选择删除&#xff08;Delete&#xff09;、插入&#xff08;Insert&#xff09;…

一文读懂动态IP与静态IP的区别与选择

在当今的数字世界中&#xff0c;网络安全与隐私保护已成为越来越重要的话题&#xff0c;网络代理作为一种常见的技术工具&#xff0c;被广泛应用于保护用户隐私、绕过网络限制、进行网络测试等诸多领域。 IPFoxy提供独享纯净的动态IP代理与静态IP代理选择&#xff0c;我们需要根…

AI大模型语料库

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 语料库概述 语料库&#xff08;Corpus&#xff09;是一个存储了大量真实语言使用实例的集合&#xff0c;这些实例可以是文本、语音、视频等多种形式的语言数据。语料库通常…

如何将 MySQL 数据库共享给他人?

文章目录 共享所有数据库给他人1. 连接到 MySQL 数据库2. 选择要使用的数据库3. 修改连接所需的 host4. 刷新权限 共享部分数据库给他人1. 创建用户2. 授权3. 刷新权限 结语 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是I…

HCIP-Datacom-ARST自选题库_10_其他判断【23道题】

1.端到端时延等于路径上所有处理时延与队列时延之和。 2.部署PPP Multilink之后&#xff0c;数据将根据源地址和目的地址均匀的分配在各条成员链路上。 3.流镜像分为本地流镜像和远程流镜像两种方式。√ 4.IP报文中用Tos字段进行Q0S标记&#xff0c;Tos字段中是使用前6bit来…

BGP基础实验

BGP协议中的建邻&#xff0c;与宣告路由分开的 在任何一台BGP路由上&#xff0c;均可宣告本地路由表中通过任何形势获取的路由条目&#xff0c;将其共享给其他BGP邻居&#xff1b; 然后display ip rou查看 *>代表状态 *的意思是可用 >代表优 i和*>无关&#x…

数据结构———链表

链表是经常用到的一种基础数据结构&#xff0c;接下来我们讲讲链表。 链表&#xff1a; 特点&#xff1a; 链表可分为有头/无头链表&#xff0c;循环/无环&#xff0c;双向/单向链表&#xff0c;每个链表节点都包含一个数据和下一个链表节点的地址。 每个链表节点都指向下一…