【Text2SQL 论文】MCS-SQL:利用多样 prompts + 多项选择来做 Text2SQL

论文:MCS-SQL: Leveraging Multiple Prompts and Multiple-Choice Selection For Text-to-SQL Generation

⭐⭐⭐

arXiv:2405.07467

一、论文速读

已有研究指出,在使用 LLM 使用 ICL 时,ICL 的 few-shot exemplars 的内容、呈现顺序都会敏感地影响 LLM 的输出。基于此,本文提出通过使用多个 prompts 并利用 LLM 的 ICL exemplars 的敏感性,来扩大 LLM 的搜索空间,得到 LLM 的多个响应 SQL,然后再做一个多项选择,从中选出最终的 SQL 作为输出

MCS-SQL 模型包含三个主要步骤:

  1. schema linking:筛选出相关的 DB schema
  2. multiple SQL generation:利用多个 prompts 来让 LLM 生成多个 SQL
  3. multiple choice selection:从多个 SQL 中选出最终的 SQL

二、MCS-SQL 模型

这里分别介绍这个模型的三个步骤。

2.1 Schema Linking

Schema Linking 就是识别出与 question 相关的 DB tables 和 columns。这里分成两步来做:先 table linking,再 column linking。

Table Linking:将 question、DB schema 给 LLM,让 LLM 以 JSON 格式输出选出的 tables 以及理由。一个 prompt 示例如下图。为了鲁棒性,这一步使用了 p t p_t pt 个 prompts,每个 prompt 让 LLM 生成 n 次响应,共得到 p t ⋅ n p_t \cdot n ptn 个响应结果,然后取并集作为最终筛选结果。

在这里插入图片描述

Column Linking:也是 prompt LLM 来做,prompt 中只包含筛选后的 tables 的 schema。指示 LLM 输出 [table-name].[col-name] 格式的答案,以防止命名冲突。一个 prompt 示例如下图。具体上,也是有 p c p_c pc 个 prompts,每个让 LLM 生成 n 次响应,共得到 p c ⋅ n p_c \cdot n pcn 个响应结果,然后取并集作为最终筛选结果。

在这里插入图片描述

2.2 Multiple SQL Generation

为了利用 LLM 对 ICL exemplars 的敏感性,这里通过变换 exemplars 的选择结果和呈现顺序,来得到多个 prompts。

这里先做 Few-shot Examples Selection,具体来说有两种 selection 方法:

  1. 利用 question similarity:将 question 作为 keyword 进行相似度检索,从而在 training set 中检索到 examples。
  2. 利用 masked question similarity:去掉 question 中的 schema-specific content 在进行相似度检索,这样能够让检索更加关注 question 的结构形式

这里会两种方法都使用,从而得到多个 prompts。

有了 prompt,就可以做 SQL Generation,prompt 中包含 few-shot examples、DB schema、rows 示例以及 user question,如下:

### Generate the correct SQL query for a given DB schema and question.### Gold Examples:
- Question: ...
- Gold SQL: ...
...### DB Schema: ...
### Sample Table Contents: ...
### Question: ...Your answer should be in the json format:
{"reasoning": ".."  # The reasoning steps behind the generated SQL query"sql": ".."  # The generated SQL query.
}### Your answer:

其中 rows 示例使用 CSV 格式来展示。在输出时,还引导 LLM 解释它生成 SQL 的推理步骤。

由于有多个 prompts,这里使用较高的采样温度来让 LLM 做生成,从而得到 p q ⋅ n p_q \cdot n pqn 个候选 SQL。

2.3 Selection

这一步是从候选 SQL 中选出最准确的 SQL query。

整体的思路是:先基于 confidence score 从 candidate pool 做一次过滤,然后再使用 LLM 从 refined pool 中选出最精确的 SQL。

2.3.1 Candidate Filtering

这里先执行所有候选 SQL,然后将查询结果相同的被分组在一起,每组只保留查询最快的 SQL。

然后就再计算每个 SQL 的 confidence scores,N 个 SQL { q 1 , … , q N } \{q_1, \dots, q_N \} {q1,,qN} 的 scores 计算方式如下:

image-20240626220816966

  • 其中 exec(q) 指的是 SQL query q q q 的执行结果

计算出 scores 后,将低于阈值 T 的 SQL 排除掉。

2.3.2 Multiple-Choice Selection (MCS)

经过上一层过滤后,这一步再利用 LLM 通过做多项选择来从候选 SQL 中选出最准确的 SQL。所使用的 prompt 如下:

### For a given DB schema and question, select the most accurate query among the candidate SQL queries.### DB schema: ...
### Question: ...
### Candidate SQLs:
1. SQL1
2. SQL2
3. SQL3Your answer should be in the json format:
{"reasoning": ".." # The reasoning steps for selecting the correct SQL query."sql": ".." # The selected SQL query.
}### Your answer:

在这里,LLM 不仅需要选择出 SQL query,还需要提供选择这个 SQL 的原因。

使用这一个 prompt 来让 LLM 生成 n 个响应,然后通过多数投票确定最终的 SQL query 结果。

三、总结

本文通过多个 prompts 让 LLM 多次生成,并通过过滤选择得到最终 SQL,效果在 BIRD 数据集上表现很好。

ompt 来让 LLM 生成 n 个响应,然后通过多数投票确定最终的 SQL query 结果。

三、总结

本文通过多个 prompts 让 LLM 多次生成,并通过过滤选择得到最终 SQL,效果在 BIRD 数据集上表现很好。

但是本文方法有个明显缺点:调用 LLM 的次数实在是太多了,这需要进一步优化。

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

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

相关文章

设备智能化:中国星坤线缆组件的解决方案!

在当今快速发展的电子行业中,产品小型化和成本效益是制造商追求的两大目标。中国星坤端子电缆组件以其灵活性和高效性,为电子设备制造商提供了一种理想的解决方案。本文将探讨星坤端子电缆组件的优势以及其在不同电子设备中的应用。 端子线:小…

Dxf库中的DL_Attributes类

DL_Attributes 通常是 DXF 库中用于存储图形实体属性的类。在 DXF 文件中,每个图形实体都可以具有一系列属性,如颜色、线型、线宽等。DL_Attributes 类用于封装和管理这些属性,以便在创建、编辑和显示图形实体时使用。 以下是一个简单的伪代…

对于“青少年与成年人抑郁症的不同点”,以下说法错误的是?

对于“青少年与成年人抑郁症的不同点”,以下说法错误的是()点击查看答案 A.刻意引人关注B.易激惹或愤怒情绪 C.无法解释的隐痛或疼痛D.对于批评的极端敏感 青春期孩子的心理需求层次的是:①满足②成长③归属④需求 A.②③④ B.①③④C.③④② D.①②③ 关于亲子关系…

python之闭包以及服务器的开发

闭包: 函数嵌套函数 函数的返回值是一个函数 内部函数使用了外部函数的变量 造成数据不会被释放。 函数的参数是一个变量 def f(a):def f1():print(a)return f1f2 f(2) f2() # 2 函数的参数是另外一个函数 def fn(f):def fn1():f()return fn1def a():print(1…

autossh实现内外网穿透

一、介绍 ​ Autossh 是一个用于建立和维护 SSH 隧道的工具,它在网络连接断开或中断时可以自动重新连接。通过 Autossh,您可以方便地在不稳定的网络环境下保持持久的 SSH 连接。 ​ Autossh 是一个跨平台的工具,可在多个操作系统上使用&…

Java操作Redis(通过Jedis)

一、环境搭建 这里我使用的SpringBoot版本是2.6.3&#xff0c;所以我引入的Jedis相关版本也不是很高 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency><…

数学建模--Matlab求解线性规划问题两种类型实际应用

1.约束条件的符号一致 &#xff08;1&#xff09;约束条件的符号一致的意思就是指的是这个约束条件里面的&#xff0c;像这个下面的实例里面的三个约束条件&#xff0c;都是小于号&#xff0c;这个我称之为约束条件符号一致&#xff1b; &#xff08;2&#xff09;下面的就是上…

我的3次软考高项通关之旅

1、缘起 初次听说软考是在2022年下半年了&#xff0c;软考的高级分为很多种&#xff0c;我起先想报考高级架构师&#xff0c;但是架构师一年才考一次&#xff0c;如果一次考不过得再准备一年&#xff0c;时间对我来说太长了&#xff0c;于是我决定报考一年考两次的高项。对于国…

iPhone怎么恢复删除的数据?几款顶级iPhone数据恢复软件

从iOS设备恢复数据。 对于任何数据恢复软件来说&#xff0c;从iOS设备恢复数据都是一项复杂的任务&#xff0c;因为Apple已将众多数据保护技术集成到现代iPhone和iPad中。其中包括硬件加密和文件级加密。iOS 上已删除的数据只能通过取证文件工件搜索来找到&#xff0c;例如分析…

Python 报错 Max retries exceeded with url 解决方案

下面有三个常见的方法&#xff1a; 1、增加重试连接次数&#xff1a; requests.DEFAULT_RETRIES 52、关闭多余的链接&#xff1a; 默认的http connection是keep-alive的&#xff0c;在post请求中&#xff0c;header中有这样一个字段&#xff1a;Connection&#xff0c;我们…

抖音集团基于 Apache Doris 的实时数据仓库实践

作者&#xff1a;字节跳动数据平台 在直播、电商等业务场景中存在着大量实时数据&#xff0c;这些数据对业务发展至关重要。而在处理实时数据时&#xff0c;我们也遇到了诸多挑战&#xff0c;比如实时数据开发门槛高、运维成本高以及资源浪费等。 此外&#xff0c;实时数据处…

游戏心理学Day26

游戏测试 我们能够成为创建游戏机制和系统的专家&#xff0c;却无法在没有测试数据支持的情况下&#xff0c;妄言游戏的真实品质。因为游戏更关注的是人的感受而非系统&#xff0c;毕竟系统通常都很清晰且符合逻辑&#xff0c;而玩家的感受却个人化且难以洞悉。我们能够在自身…

C#面试题目含参考答案(四)

前言 面试是应聘一个工作岗位的环节&#xff0c;来考察一个人的工作能力与综合素质。在应聘C#程序员或与C#相关岗位时&#xff0c;我们都会被问到一些与.NET、C#、数据库、业务知识或编程思想等问题。本文列举一些问题及提供参考答案&#xff0c;题目&#xff08;四&#xff0…

用谷歌Gemini免费批量生成微信公众号图书带货文章

谷歌Gemini 的api现在是免费的&#xff0c;功能很强大。可以在其官网简单几步操作申请到API&#xff1a;https://ai.google.dev/pricing 以上是一些Excel表格中的图书名称&#xff0c;现在要通过谷歌Gemini来批量生成这些图书的带货推广文章。 ChatGPT中输入提示词&#xff1a…

NVIDIA GPU参数

NVIDIA作为全球领先的GPU制造商&#xff0c;其产品广泛应用于深度学习、机器学习、高性能计算&#xff08;HPC&#xff09;和图形计算等领域。以下是NVIDIA一系列GPU的性能参数概述&#xff1a; V100 Tensor Core GPU V100是NVIDIA的一款高性能GPU&#xff0c;专为深度学习、机…

java对word文档预设参数填值并生成

目录 &#xff08;1&#xff09;定义word文档模板 &#xff08;2&#xff09;模板二次处理 处理模板图片&#xff0c;不涉及图片可以跳过 处理模板内容 &#xff08;3&#xff09;java对word模板填值 &#xff08;4&#xff09;Notepad的XML Tools插件安装 工作上要搞一个…

什么是服务器硬盘?

什么是服务器硬盘呢&#xff1f; 服务器硬盘顾名思义&#xff0c;指的就是在服务器上所使用的硬盘&#xff0c;如果服务器是数据网络中的核心部分&#xff0c;那么服务器硬盘则是指数据网络核心的数据仓库&#xff0c;其中所有的软件应用与用户数据信息都是存储在服务器硬盘当中…

C#与工业自动化结合还有搞头吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c#的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;当然有搞头&#xff01;C#是一…

Java 8 新特性:Lambda表达式让你的代码焕然一新——掌握它,让编程变得轻松又高效!

前言 Java 8 是 Java 发展史上的一次重要里程碑。作为企业级开发语言&#xff0c;它在性能和功能上做了巨大的提升。这其中&#xff0c;Lambda表达式是一个关键的新特性&#xff0c;它为 Java 语言带来了函数式编程的概念。本篇文章将深入探讨Lambda表达式&#xff0c;并结合热…

中断变轮询的一种机制

前言 MCU中断嵌套中断很容易引起问题&#xff0c;例如我们在MCU中引入串口shell&#xff0c;封装一些指令&#xff0c;如果这些指令中需要调用其他中断&#xff0c;例如I2C发送中断等&#xff0c;就很容易引起问题&#xff0c;这个时候我们就需要搞一个缓冲机制 思考 那么应…