text2sql方法:基于ChatGPT的zero-shot方法C3

news2024/11/6 3:14:23

ChatGPT SQL

ChatGPT SQL出自2023年3月的论文《A comprehensive evaluation of ChatGPT’s zero-shot Text-to-SQL capability》(github),这篇论文分析了ChatGPT的text2sql能力,实验结果表明ChatGPT的text2sql能力令人印象深刻,虽然没有达到当时的SOTA,但是无需训练性能也比SOTA低14%,且ChatGPT的鲁棒性与SOTA相比只有7.8%的差距。

使用zero-shot让ChatGPT生成SQL,prompt来自OpenAI展示的demo prompt,论文没有做特意的调整,如论文图1所示,图中上半部分是单轮场景下的text2sql,下半部分是多轮场景下的text2sql。

在这里插入图片描述

C3

text2sql方法C3出自2023年7月的论文《C3: Zero-shot Text-to-SQL with ChatGPT》(github), 它通过zero-shot的方式来prompt ChatGPT生成SQL。

在这里插入图片描述

C3的prompt包括3个组成部分:Clear Prompting (CP), Calibration with Hints (CH), and Consistent Output (CO)

Clear Prompting:包括两个部分clear layout 和clear context,如论文图2©所示。

  • clear layout:用#将prompt里的指令、上下文(数据库schema)、问题分开。因为实验结果表明直接用论文图2(b)的指令可能会使生成的SQL有冗余列,所以在指令后添加了"and do not select extra columns that are not explicitly requested in the query"。

在这里插入图片描述

  • clear context:通过schema linking选择与问题相关的表和列。schema linking是通过zero-shot prompt ChatGPT来实现的,包括Table Recall 和 column Recall:

    • Table recall,zero-shop prompt ChatGPT分为3步来选择表。并用self-consistency来保证稳定性,即让ChatGPT生成10个结果集,每个结果中包括了top 4的表格,最后的结果为这10个结果集中出现最频繁的结果集。

      """
      Given the database schema and question, perform the following actions: 
      1 - Rank all the tables based on the possibility of being used in the SQL according to the question from the most relevant to the least relevant, Table or its column that matches more with the question words is highly relevant and must be placed ahead. 
      2 - Check whether you consider all the tables. 
      3 - Output a list object in the order of step 2, Your output should contain all the tables. The format should be like: 
      [
      "table_1", "table_2", ...
      ]
      
      Schema:
      # continents ( contid, continent )
      # countries ( countryid, countryname, continent )
      # car_makers ( id, maker, fullname, country )
      # model_list ( moddeli, maker, model )
      # car_names ( makeid, model, make )
      # cars_data ( id, mpg, cylinders, edispl, horsepower, weight, accelerate, year )
      Question:
      ### What is the name of the different car makers who produced a car in 1970?
      """
      
    • Column Recall,也通过zero-prompt来让ChatGPT分成两步来召回列。同样用self-consistency来保证稳定性,先让ChatGPT对每个表生成10个结果集,最后的结果为这10个结果集中出现最多频繁的5个列。

      """
      Given the database tables and question, perform the following actions: 
      1 - Rank the columns in each table based on the possibility of being used in the SQL, Column that matches more with the question words or the foreign key is highly relevant and must be placed ahead.
      You should output them in the order of the most relevant to the least relevant. 
      Explain why you choose each column. 
      2 - Output a JSON object that contains all the columns in each table according to your explanation. The format should be like: 
      { 
      "table_1": ["column_1", "column_2", ......],
      "table_2": ["column_1", "column_2", ......],
      "table_3": ["column_1", "column_2", ......],
      ...... 
      } 
      
      Schema: 
      # car_makers ( id, maker, fullname, country )
      # model_list ( modelid, maker, model )
      # car_names ( makeid, model, make ) 
      # cars_data ( id, mpg, cylinders, edispl, horsepower, weight, accelerate, year )
      Foreign keys: 
      # model_list.maker = car_makers.id 
      # car_names.model = model_list.model 
      # cars_data.id = car_names.makeid 
      
      Question:
      ### What is the name of the different car makers who produced a car in 1970?
      
      """
      

    Calibration with Hints : 通过对ChatGPT生成的SQL进行分析,发现它容易因为bias出现如论文图3所示的错误,所以在prompt里添加了如论文图1右上部分所示的两个提示。

在这里插入图片描述

Consistent Output:使用execution-based Self-consistency。先让LLM采样输出多个SQL结果,然后将这些生成的SQL查询在数据库上执行并记录执行结果,去掉错误记录后,通过对执行结果采取投票机制来选择最后SQL。

github issue 里有一个问题是关于执行时间的,作者回复如下:

Time taken for recalling table: approximately 7s per sample.
Time taken for recalling column: approximately 25s per sample.
Time taken for generating SQL: approximately 2s per sample.
The time spent also depends on the internet status and the rate limits of APl calls

在用self-consistency时,如issue作者所回复,通过ChatGPT api里的参数n来一次生成多个结果,对于n个输入是共享同一个输入token的。

在这里插入图片描述

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

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

相关文章

CK-G080AB低频RFID传感器|工业级读写器性能与接口说明

CK-G080AB 是一款基于射频识别技术的低频 RFID 标签传感器,传感器工 作频率为 125KHZ,同时支持对 EMID,FDX-B 两种格式标签的读取。传感器内部 集成了射频部分通信协议,用户只需通过 RS232\RS485 通信接口接收数据便能完 成对标签…

谷歌网站收录查询,帮助您快速准确地查询网站在谷歌的收录情况的3个方法

谷歌网站收录查询,帮助您快速准确地查询网站在谷歌的收录情况的3个方法。 一、使用GoogleSearchConsole(谷歌搜索控制台) 1.注册并验证网站 -首先,确保您的网站已注册并验证在GoogleSearchConsole中。这是一个免费的工具&…

VR全景摄影的商业模式及盈利点分析

VR全景摄影作为一种新兴的商业技术,其商业模式和盈利点主要体现在以下几个方面: 内容订阅与付费:企业可以通过提供VR全景内容平台,让用户通过订阅或单次购买来获得特定的VR全景内容,这类似于音乐和视频流媒体平台的运营…

Element UI教程:如何将Radio单选框的圆框改为方框

大家好,今天给大家带来一篇关于Element UI的使用技巧。在项目中,我们经常会用到Radio单选框组件,默认情况下,Radio单选框的样式是圆框。但有时候,为了满足设计需求,我们需要将圆框改为方框,如下…

如何通过开源工具帮助保护您的计算机安全

引言 如果您正在考虑安全问题,您有很多选择。随着当前网络犯罪的激增,以及发生犯罪时常见的重大后果,许多企业开始关注如何在网络世界中保护公民的安全。网络安全行业蕴藏着巨大的商业利益,但您可能会惊讶地发现,有一…

前端工程规范-5:Git提交信息规范(commitlint + czg)

前面讲的都是在git提交之前的一些检查流程,然而我们git提交信息的时候,也应该是需要规范的。直接进入主题: 目录 需安装插件清单commitlint 介绍安装配置配置commit-msg钩子提交填写commit信息czg后续方式一:push触动build并上传…

记一次vue-cli老项目的打包时长优化

记一次vue-cli老项目的打包时长优化 背景 这是一个基于 vue-cli 的 vue2 的老项目,比较久远,一般Jenkins中打包时间都在 5-6min 左右,基本能够接受。 近来由于项目原因,在该项目中加入了一些在打包时动态生成的js文件以做“缓存…

【SQL】笛卡尔积比较收入更高的员工

目录 语法 需求 示例 分析 代码 语法 FROM Employee a, Employee b 两个表之间笛卡尔积(Cartesian product)的形式,用了逗号分隔的连接(comma-separated join),这是早期SQL语法中用于连接表的一种方式…

从零开始学习OMNeT++系列第二弹——新建一个OMNeT++的工程

上一篇第一弹介绍了OMNeT是什么以及如何安装OMNeT,现在来说一下如何新建一个自己的OMNeT的工程。 在 Omnet安装完成后,samples/tictoc 中有该例子的完整文件,你可以立刻运行该文件看他是怎么工作的,不过更推荐按接下来的步骤一步…

[Notepad++] 文本编辑器的下载及详细安装使用过程(附有下载文件)

程序员常用的文本编辑器Notepad,用于修改配置文件等 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压文件,得到 双击exe文件 选择简体中文,点击OK 点击下一步 点击“我接受” 更改安装目录,不…

谷歌收录查询工具,如何选择适合自己的谷歌收录查询工具

搜索引擎优化(SEO)的实践中,了解网站在谷歌搜索引擎中的收录情况是一项至关重要的任务。这不仅能反映网站在谷歌搜索结果中的可见性,还能帮助SEO专业人士和网站所有者识别潜在的优化机会。 一、谷歌收录查询工具 1.GoogleSear…

通信工程学习:什么是CSMA/CA载波监听多路访问/冲突避免

CSMA/CA:载波监听多路访问/冲突避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance),即载波监听多路访问/冲突避免,是一种用于数据传输时避免各站点之间冲突的算法,尤其适用于无线局域网&…

基于springboot的评分评教管理系统

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的评分评教管理系统1拥有三种角色 管理员:评价管理、学生管理、评分指标管理、课程管理、教师管理、管理员管理等教师:课程管理、学生管理、个人信…

ubuntu server 常用配置

这里写目录标题 0001 虚拟机静态IP0002 vim tab 4个空格0003 设置时区0004 网络端口查看端口开放端口 0005 修噶机主机名 0001 虚拟机静态IP win网络链接,IP地址:192.168.220.1 - NAT网关:192.168.220.2 - ubuntu静态IP设置: ca…

24年九月份生活随笔

九月份最后一天,烈士纪念日。 上午看了一会儿直播,庄重的仪式,铭记先辈为新中国抛头颅洒热血,当今盛世,如您所愿。 郑州马拉松官方通告,今天十点公布直通,中签,候补结果。 看完直…

算法:153.寻找旋转排序数组中的最小值

题目 链接:leetcode链接 思路分析(二分) 题目要求O(logN)的时间复杂度,那就必然是使用二分算法了。 怎么个二分呢? 首先,我们来寻找二段性 我们看示例一: 3,4,5&…

LeetCode 面试经典150题 172.阶乘后的零

题目:给定一个整数 n ,返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 思路: 代码: class Solution {public int trailingZeroes(int n) {return n 0 ? 0 : n / 5 trailingZeroes(n / 5);}…

Android-由switch-case和view.getId()引起的bug:错误:需要常量表达式 的解决办法

无意中,使用按钮测试点击事件,在此过程中使用了switch case语句,在条件switch中使用了view.getId(),出现错误。我记得很早之前写Android程序没啥问题,于是研究了一番。 度娘一番才知道,是因为R文件的缘故。…

【视频目标分割-2024CVPR】Putting the Object Back into Video Object Segmentation

Cutie 系列文章目录1 摘要2 引言2.1背景和难点2.2 解决方案2.3 成果 3 相关方法3.1 基于记忆的VOS3.2对象级推理3.3 自动视频分割 4 工作方法4.1 overview4.2 对象变换器4.2.1 overview4.2.2 Foreground-Background Masked Attention4.2.3 Positional Embeddings 4.3 Object Me…

git eslint扩展,解决git提交因为空格差异而报错

项目场景: 在前端项目开发中,经常会使用eslint,这个方法的好处就是严格要求代码格式。让代码更为严谨。 问题描述 以为eslint格式过于严谨,在git提交的时候,经常会因为一个多了一个空格导致代码提交失败。 原因分析:…