PET-SQL:基于大模型的两阶段Text2SQL方法

简介

PET-SQL出自论文《PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency》,将基于大模型的Text2SQL分为两个阶段进行,在第一阶段使用数据表schema信息、数据表采样数据、相似问答问答对生成初步的SQL(PreSQL),在第二阶段,经过schema linking即过滤掉一些跟问题不相关的schema后生成最终的SQL(FinSQL)。接下来会使用Cross-consistency即用多个不同的LLM来投票决定生成的SQL是否正确。

在这里插入图片描述

第一阶段

pet-sql第一阶段的zero-shot prompt结构如下图(作者将其prompt模板称为reference-enhanced representation):

  • 指令里向LLM强调SQL生成时在保证正确性的前提下要考虑执行时间:“minimize SQL execution time while ensuring correctness”(图中第1行)
  • 除了提供数据表的schema信息外,每个数据表采样了3条数据(图中第7-11行)
  • 提供了数据表的外键信息(图中第12-15行)

在这里插入图片描述

除了zero-shot prompt外,作者考虑将与问题类似意图的question-SQL样例作为few-shot(如下图,将检索到的question-SQL放在zero-shot prompt前面)。few-shot样例采用了论文参考文献9:A Case-Based Reasoning Framework for Adaptive Prompting in Cross-Domain Text-to-SQL提到的question de-semanticization方法。具体来说,将问题里与特定数据表相关的token如表名、列名、数据取值等使用特殊token <mask>替换得到问题骨架(问题骨架被认为是问题意图的表示)。将训练集中所有问题骨架和question-SQL存储起来作为检索池,对查询问题骨架化处理后使用向量化检索方式得到与查询问题最相似的top k question-SQL作为few shot。

在这里插入图片描述

注:PET-SQL 引用的参考文献9:A Case-Based Reasoning Framework for Adaptive Prompting in Cross-Domain Text-to-SQL 与 Prompting GPT-3.5 for Text-to-SQL with De-semanticization and Skeleton Retrieval 的全部作者名单是相同的,思路也基本一致

第二阶段

根据第一阶段生成的PreSQL 内容,去掉与PreSQL中不相关的schema信息和外键信息,这个过程被称为schema linking (SL)(注:vanna 是通过向量检索方式来召回与问题最相关的schema,方法不一样,目的都是为了减少干扰信息)

schema linking之后简化的zero-shot prompt如下图所示。

在这里插入图片描述

cross consistency

作者认为self-consistency方法不是足够好的后处理方法,采取的是通过多个LLM来生成SQL的cross consistency策略,包括以下两种方法:

  • Naive voting across several LLMs:使用更强的LLM如GPT4生成PreSQL,第二阶段使用不同的低温度设置的LLM生成FinSQL。将所有FinSQL和PreSQL在数据库引擎上执行并获取结果,将生成多数结果的SQL作为最后的答案。
  • Fine-grained voting according to PreSQL complexity:在Naive voting 基础上考虑PreSQL的难易程度,按照难易程度进行分组投票。

总结

PET-SQL两阶段Text2SQL的思路还是比较好理解,prompt设计上主要多了数据样例,感觉使用question de-semanticization来提取问题骨架表示问题意图在实现上是整个流程里最复杂的。

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

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

相关文章

【边缘智能】00_边缘计算发展背景

本系列是个人学习《边缘就算基础知识入门》的笔记&#xff0c;仅为个人学习记录&#xff0c;欢迎交流&#xff0c;感谢批评指正 移动物联设备产生海量数据&#xff0c;数据密集型移动智能应用&#xff0c;计算密集、动态性高&#xff0c;实时性强 传统云计算架构 基于广域互联…

大学课堂点名程序

大学课堂点名程序 from gtts import gTTS import os import tkinter as tk import pygame import csv import random from datetime import datetime from tkinter import messagebox from tkinter import simpledialog input_data="student1" def langDu(text):tts…

matrix-breakout-2-morpheus 靶机渗透

信息收集&#xff1a; 1.nmap存活探测&#xff1a; nmap -sn -r 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 12:13 CST Nmap scan report for 192.168.10.1 Host is up (0.00056s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…

鸿蒙内核源码分析 (双向链表篇) | 谁是内核最重要结构体

双向链表是什么&#xff1f; 谁是鸿蒙内核最重要的结构体 &#xff1f; 一定是: LOS_DL_LIST(双向链表)&#xff0c; 它长这样。 typedef struct LOS_DL_LIST {struct LOS_DL_LIST *pstPrev; /**< Current nodes pointer to the previous node | 前驱节点(左手)*/struct L…

Qt实现Kermit协议(四)

3 实现 3.3 KermitRecvFile 该模块实现了Kermit接收文件功能。 序列图如下&#xff1a; 3.3.1 KermitRecvFile定义 class QSerialPort; class KermitRecvFile : public QObject, public Kermit {Q_OBJECT public:explicit KermitRecvFile(QSerialPort *serial, QObject *…

题目 1847: 字符串中间和后边*号删除

题目描述: 假定输人的字符串中只包含字母和*号。请编写函数fun(  )&#xff0c;它的功能是&#xff1a;除了字符串前导的*号之外&#xff0c;将串中其他*号全部删除。在编写函数时&#xff0c;不得使用C语言提供的字符串函数。 代码: package lanqiao;import java.math.Bi…

面试(03)————多线程和线程池

一、多线程 1、什么是线程?线程和进程的区别? 2、创建线程有几种方式 &#xff1f; 3、Runnable 和 Callable 的区别&#xff1f; 4、如何启动一个新线程、调用 start 和 run 方法的区别&#xff1f; 5、线程有哪几种状态以及各种状态之间的转换&#xff1f; 6、线程…

RIP协议

路由信息协议。 分为v1和v2 1、标准的距离矢量型协议 2、使用跳数作为度量&#xff0c;默认优先级为100 3、v1为有类别版本&#xff0c;v2为无类别版本&#xff08;无类别自定义掩码&#xff09; 4、周期更新触发更新。 v1和v2的区别 1、v1不携带子网掩码——不支持子网划…

极越夏一平反思:论技术我们很能打,要解决品牌认知问题

作者 |张祥威 编辑 |德新 今年起&#xff0c;新能源汽车竞争强度明显再上一个台阶。 华为主导下的问界强势逆袭&#xff0c;雷军亲自坐镇的小米汽车在发布后斩获丰厚的大定订单&#xff0c;给其它汽车品牌带来压力。3月末&#xff0c;在小米发布会前几日&#xff0c;极越在北…

【JavaScript】作用域 ③ ( JavaScript 作用域链 | 作用域链变量查找机制 )

文章目录 一、JavaScript 作用域链1、作用域2、作用域链3、作用域链变量查找机制 二、代码示例 - 作用域链 一、JavaScript 作用域链 1、作用域 在 JavaScript 中 , 任何代码都有 作用域 , 全局作用域 : 在 <script> 标签中 或者 js 脚本中 定义的变量 属于 全局作用域 …

k8s安全控制、授权管理介绍,全网最新

3.ABAC 4.Webhook 5.Node 6.RBAC 三.Role解释 1.Role和ClusterRole 2.Rolebinding和ClusterBinding 3.Rolebinding和ClusterRole 四.准入控制 1.命令格式 2.可配置控制器 五.例子 1.生成签署证书 2.设置用户和上下文信息 3.为sulibao用户授权 一.Kubernetes安全控…

Linux初学(十七)docker

一、docker 1.1 简介 容器技术 容器其实就是虚拟机&#xff0c;每个容器可以运行不同的系统【系统以Linux为主的】 为什么要使用docker&#xff1f; docker容器之间互相隔离&#xff0c;可以提高安全性通过使用docker可以做靶场 1.2 安装配置docker 方法一&#xff1a;yum安装…

深入剖析主机安全中的零信任机制及其实施原理

引言 在数字化转型加速与云端服务普及的大背景下&#xff0c;传统依赖边界的网络安全模式逐渐显露出其局限性。面对愈发复杂多变的威胁环境&#xff0c;零信任安全架构作为新一代的安全范式应运而生&#xff0c;尤其是在主机层面的安全实践中&#xff0c;零信任机制正扮演着至…

每日OJ题_优先级队列_堆③_力扣692. 前K个高频单词

目录 力扣692. 前K个高频单词 解析代码 力扣692. 前K个高频单词 692. 前K个高频单词 难度 中等 给定一个单词列表 words 和一个整数 k &#xff0c;返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率&#xff0c…

usb_camera传输视频流编码的问题记录!

前言&#xff1a; 大家好&#xff0c;今天给大家分享的内容是&#xff0c;一个vip课程付费的朋友&#xff0c;在学习过程中遇到了一个usb采集的视频数据流&#xff0c;经过ffmpeg编码&#xff0c;出现了问题&#xff1a; 问题分析&#xff1a; 其实这个问题不难&#xff0c;关键…

centos7.2系统部署ZooKeeper集群和Kafka集群(集群应用系统商城前置环境)

本次实验将使用centos7.2系统部署部署ZooKeeper集群因为Kafka依赖于ZooKeeper&#xff0c;所以我们一并进行部署。 实验所示的资源软件已上传至百度网盘&#xff0c;需要自取。 链接&#xff1a;https://pan.baidu.com/s/1a-7_iAIX0DBAMkF9bhiTcA?pwd2333 提取码&#xff1…

泛型(java学习)

目录 1.泛型介绍&#xff1a; 2.泛型的好处&#xff1a; 3.泛型的语法 4.泛型的细节 5.自定义泛型 6.自定义泛型接口 8.泛型的继承和通配符 1.泛型介绍&#xff1a; 1&#xff09;泛型又称参数化类型&#xff0c;解决数据类型的安全性问题。 2&#xff09;在类声明或实例…

[尚硅谷 flink] 基于时间的合流——双流联结(Join)

文章目录 8.1 窗口联结&#xff08;Window Join&#xff09;8.2 **间隔联结&#xff08;Interval Join&#xff09;** 8.1 窗口联结&#xff08;Window Join&#xff09; Flink为基于一段时间的双流合并专门提供了一个窗口联结算子&#xff0c;可以定义时间窗口&#xff0c;并…

实现通讯录(顺序表版本)

一、功能要求 &#xff08;1&#xff09;⾄少能够存储100个⼈的通讯信息 &#xff08;2&#xff09;能够保存⽤⼾信息&#xff1a;名字、性别、年龄、电话、地址等 &#xff08;3&#xff09;增加联系⼈信息 &#xff08;4&#xff09;删除指定联系⼈ &#xff08;5&#…

X年后,ChatGPT会替代底层程序员吗?

能不能替代&#xff0c;真的很难说&#xff0c;因为机器换掉人&#xff0c;这其实是一个伦理问题。 其实说白了&#xff0c;任何行业在未来都会被AI或多或少的冲击到&#xff0c;因为ChatGPT做为一个可以持续提升智能的AI&#xff0c;在某些方面的智能程度超过人类并不是什么难…