【论文速读】| TCSR-SQL:面向表内容感知的自检索文本到SQL方法

图片

本次分享论文:TCSR-SQL: Towards Table Content-aware Text-to-SQL with Self-retrieval

基本信息

原文作者:Wenbo Xu, Liang Yan, Peiyi Han, Haifeng Zhu, Chuanyi Liu, Shaoming Duan, Cuiyun Gao, Yingwei Liang

作者单位:哈尔滨工业大学(深圳)、鹏城实验室、广东电网公司

关键词:Text-to-SQL,表内容感知,自检索,LLM

原文链接:https://arxiv.org/pdf/2407.01183

开源代码:

https://github.com/TCSR-SQL/TCSR-SQL

论文要点

论文简介:大语言模型(LLM)在文本到SQL(Text-to-SQL)方法中取得了重要进展,但在面对真实世界场景中的表内容感知问题时,现有方法在处理问题中模糊数据内容关键词和不存在的数据库模式列名时表现不佳。

为了解决这一问题,本文提出了一种面向表内容感知的自检索文本到SQL(TCSR-SQL)方法。该方法利用LLM的上下文学习能力,从问题中提取数据内容关键词并推断可能相关的数据库模式,通过模糊搜索数据库生成初始SQL,并在多轮生成-执行-修正过程中不断优化,最终生成精确的SQL。本文还引入了一个包含1692个问题-SQL对的数据集,以验证该方法的有效性。实验结果表明,TCSR-SQL在执行准确率上相比现有方法至少提高了13.7%。

研究目的:本文的研究目的是解决当前LLM在生成对应于表内容感知的自然语言问题的SQL查询时面临的两个主要困难:一是如何识别自然语言问题中的数据内容关键词所对应的数据库模式列名;二是如何在自然语言问题中的不精确数据内容关键词的基础上,识别数据库中存储的精确内容值。通过引入自检索技术,本文提出了一个创新的方法来处理这一问题,旨在提高生成SQL查询的准确性。

研究贡献:

  • 提出了一种新颖的TCSR-SQL方法,利用自检索技术解决了生成对应表内容感知自然语言问题的SQL查询问题。

  • 创建了一个包含1692个问题-SQL对的新数据集,用于评估该方法的有效性。

  • 实验结果表明,TCSR-SQL在执行准确率上相比现有最先进的方法提高了13.7%。

引言

随着大语言模型(LLM)技术的快速发展,基于LLM的文本到SQL(Text-to-SQL)方法在生成SQL查询方面取得了重要进展。然而,现有方法在处理真实世界中的表内容感知问题时,仍然面临一些挑战。例如,当问题中包含模糊的数据内容关键词和不存在的数据库模式列名时,现有方法的表现往往不尽如人意。

为了解决这些问题,本文提出了一种面向表内容感知的自检索文本到SQL(TCSR-SQL)方法。该方法利用LLM的上下文学习能力,从问题中提取数据内容关键词并推断可能相关的数据库模式,通过模糊搜索数据库生成初始SQL,并在多轮生成-执行-修正过程中不断优化,最终生成精确的SQL。

具体来说,TCSR-SQL包括三个主要模块:关键词提取与模糊检测、知识检索与对齐、SQL生成与修正关键词提取与模糊检测模块从自然语言问题中提取数据内容关键词,并通过模糊检测技术搜索数据库中的相关内容值。知识检索与对齐模块则利用检索到的编码知识确认SQL查询中的列名和条件值。最后,SQL生成与修正模块生成初步的SQL查询,并根据执行结果进行修正,直至生成最终的精确SQL。

相关工作

目前,最新的Text-to-SQL研究主要关注如何利用大语言模型(LLM)来完成这一任务。基于LLM的Text-to-SQL方法大致可以分为两类:基于数据库模式的方法和基于数据内容的方法。

1. 基于数据库模式的方法

· 提示工程方法:例如,C3-SQL设计了一种零样本提示技术,通过将Text-to-SQL任务分解为两个子任务:模式链接和SQL生成。DIN-SQL设计了多轮少样本提示策略,将Text-to-SQL任务分解为四个子任务:模式链接、分类与分解、SQL生成和自我修正。

· 微调方法:随着LLM技术的快速迭代和开源LLM模型的大规模出现,一些研究致力于通过微调技术将通用LLM训练为Text-to-SQL领域的特定LLM。

2. 基于数据内容的方法

· 仅使用LLM的方法:一些方法直接在提示工程和微调方法的基础上增加了几个数据内容样本。例如,SQLPrompt在输入提示中增加了相关的数据库内容值。CodeS在设计的数据库提示构建会话中引入了数据内容样本,以微调开源LLM模型StarCoder。

· 基于代理的方法:一些研究探索了代理方法在Text-to-SQL领域的可能性。例如,SQL-CRAFT引入了SQL查询执行的反馈信息,以指导LLM修正其生成的SQL查询。

尽管这些方法提供了数据内容样本,但它们仍然无法直接使用数据库中存储的精确内容值作为生成SQL查询的条件值。因此,本文提出了一种自检索技术,将数据库内容理解与SQL生成-执行-修正过程相结合,以解决这一问题。

TCSR-SQL

如引言部分所述,现有的基于LLM的Text-to-SQL方法在根据大数据库的表内容感知自然语言问题生成SQL查询时面临两大困难:一是识别自然语言问题中的数据内容关键词所对应的数据库模式列名,二是识别数据库中存储的精确内容值。

图片

为了解决这些问题,本文提出了TCSR-SQL方法,包含三个模块:

1. 关键词提取与模糊检测模块:从自然语言问题中提取数据内容关键词,并通过模糊检测技术搜索数据库中的相关内容值。

2. 知识检索与对齐模块:利用模糊检测模块的搜索结果确认SQL查询中的列名和条件值。

3. SQL生成与修正模块:生成初步的SQL查询,并根据执行结果进行修正,直至生成最终的精确SQL。

研究评估

实验设置:为了评估TCSR-SQL方法的有效性,本文创建了一个包含1692个问题-SQL对的基准数据集(TCD)。该数据集从多个Spider变体数据集和实际数据库中提取,涵盖了真实世界中的表内容感知问题。评估指标包括执行准确率(EX)和精确匹配准确率(EM),前者比较预测SQL查询和金标准SQL查询的执行输出,后者比较预测SQL查询和金标准SQL查询的各个部分。实验使用GPT-3.5-turbo模型,并采用Dmeta-embedding算法进行相似度计算。

整体结果:实验结果表明,TCSR-SQL在执行准确率(EX)和精确匹配准确率(EM)方面均显著优于现有最先进的方法。具体而言,TCSR-SQL在EX和EM上分别达到了75.0%和48.2%,相比最佳现有方法至少提高了13.7%。这得益于关键词提取与模糊检测、知识检索与对齐、SQL生成与修正三个模块的协同工作。通过多轮生成-执行-修正过程,TCSR-SQL能够更准确地生成对应表内容感知的SQL查询,有效应对真实世界中的复杂查询任务。

消融实验:通过消融实验评估了TCSR-SQL各模块对整体性能的影响。结果显示,去除关键词提取与模糊检测模块后,执行准确率(EX)下降了7.6%;去除知识检索与对齐模块后,EX下降了9.3%;去除SQL修正模块后,EX下降了6.4%。这些结果表明,每个模块对提高SQL生成准确性都起到了重要作用。特别是知识检索与对齐模块,通过整合编码知识,显著提升了SQL查询条件的精确性,而SQL修正模块通过执行反馈进一步优化了最终的SQL查询。

图片

案例研究:为了深入了解TCSR-SQL的工作原理,研究者进行了案例研究。研究表明,现有方法在生成SQL查询时常常无法正确识别数据内容关键词和条件值,导致查询结果为空或错误。相比之下,TCSR-SQL通过关键词提取与模糊检测模块有效地提取问题中的数据内容关键词,并利用知识检索与对齐模块确认数据库中的精确存储值。最终,SQL生成与修正模块生成准确的SQL查询,避免了常见错误。例如,在处理一个关于GDP增长率的问题时,TCSR-SQL成功生成了正确的SQL查询,而其他方法均未能正确执行。

论文结论

本文提出的TCSR-SQL方法,通过引入自检索技术,显著提升了生成对应表内容感知自然语言问题的SQL查询的准确性。实验结果表明,TCSR-SQL在执行准确率和精确匹配准确率方面均显著优于现有最先进的方法。具体来说,TCSR-SQL利用关键词提取与模糊检测、知识检索与对齐、SQL生成与修正三个模块,解决了在大数据库中生成准确SQL查询的关键挑战。通过创建一个包含1692个问题-SQL对的新数据集,研究者验证了该方法的有效性,证明了其在处理复杂查询任务中的优越性能。总之,TCSR-SQL为Text-to-SQL领域提供了一个创新且高效的解决方案。

原作者:论文解读智能体

校对:小椰风

图片

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

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

相关文章

Java垃圾收集器选择与优化策略

1.垃圾收集算法有哪些,可以聊一下吗? 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾。 1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾。如果一个对象没有任何指针对其引用,它就是垃圾。 弊端:如果…

【网络工具】Charles 介绍及环境配置

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/iAmAo 📚专栏简介:在这个专栏中,我将会整理一些工作或学习中用到的工具介绍给大家~ 📘Charles 系列其它文章:【网络…

JavaScript基础 第四弹 学习笔记

函数 1、为什么需要函数?可以实现代码复用,提高开发效率。 函数的定义 :函数function,是被设计为执行特定任务的代码块。 函数可以把具有相同或相似逻辑的代码‘包裹’起来,通过函数调用执行这些被“包裹”的代码逻…

万界星空科技电线电缆MES系统实现线缆全流程追溯

MES系统通过高度集成的数据平台,对电线电缆的生产全过程进行实时监控与记录,从原材料入库开始,到生产过程中的各个关键控制点,再到成品出库,每一步操作都被详细记录并可追溯。这种全流程追溯能力主要体现在以下几个方面…

java基础之变量,类型的转换,跟着哔站尚硅谷自学笔记。

变量 变量的介绍以及使用 1.变量的数据类型:基本数据类型:4类8种整数:byte short int long 浮点数:float double字符型:char布尔型:boolean引用数据类型:类 数组 接口 枚举 注解2.概述&#xf…

云南合续-马来西亚水环境项目考察单位

2024年恰逢中马建交50周年,中华环保联合会为进一步加强双方生态产业合作与交流,拟定于9月23日-29日组团赴马来西亚开展水环境项目考察,同期举办“2024中马水务合作论坛”,引领国内先进环保技术、装备、产能“走出去”。

hung 之 Android llkd

目录 1. llkd 简介 2. 原理 2.1 内核活锁 2.2 检测机制 2.3 为什么 persistent stack signature 检测机制不执行 ABA 检查? 2.4 为什么 kill 进程后,进程还存在就能判定发生了内核 live-lock? 3. 代码 3.1 内核 live-lock 检查 3.2 …

verilog刷题笔记

1、选择器实现方式 (1)case语句,注意default (2)if-else语言,注意else,有优先级 (3)三元运算符 ? : 2、阻塞赋值/非阻塞赋值都是过程性赋值&a…

使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试

前言 首届YashanDB「迁移体验官」开放后,陆续收到「体验官」们的投稿,小崖在此把优秀的投稿文章分享给大家~今天分享的用户文章是《使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试》(作者:尚雷)&#xff0c…

提交(git-add git-commit git-push)

当修改好一个功能的时候,可以提交到远程仓库,这样就等于更新了一次版本,那么下次改修了文件的话,是跟这个版本做对比的 git status, 查看文件修改情况,git add 假如你只想提交1个文件,那么直接…

硬件开发——SD/MMC/eMMC

硬件开发——SD/MMC/eMMC 小狼http://blog.csdn.net/xiaolangyangyang 1、引脚定义 2、时钟频率 eMMC的速度模式有: SDR50:26M/52MHS200:200MHS400:400M 详细信息见如下表格: 3、协议 Read Data Write Data No Data …

beego框架_golang web框架_使用介绍

beego简介 beego是一个用于快速开发Go应用的http框架,由Go语言方面的技术大牛设计。beego可以用来快速开发API、Web、后端服务等各种应用,是一个RESTful的框架,主要设计灵感来源于tornado、sinatra、flask这三个框架,但结合了Go本…

Linux 安装多个jdk,切换使用

一、下载jdk 先去oracle官网下载jdk安装文件(我需要下载旧版本的jdk) https://www.oracle.com/ 二、安装jdk 1、将下载的jdk安装文件解压到想要安装的目录下 tar -xzvf jdk-8u202-linux-x64.tar.gz2、修改环境变量 vim /etc/profile export JAVA_HOME/usr/java/jdk1.…

Java代码批量处理sql语句

背景:数据源迁移,目标数据源和原始数据源的语法不同,要把建表语句全都改成新的语法。 一个个sql文件去替换实在是麻烦,可以把原始的sql文件放在一个文件夹,然后用程序一跑,改完语法的sql语句就放在新的文件…

基于Llama Index构建RAG应用

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本文参与活动是2024 DataWhale AI夏令营;😲 在本文中作者将通过: Gradio、Streamlit和LlamaIndex介绍 LlamaIndex 构…

只用 CSS 能玩出什么花样?

在前端开发领域,CSS 不仅仅是一种样式语言,它更像是一位多才多艺的艺术家,能够创造出令人惊叹的视觉效果。本文将带你探索 CSS 的无限可能,从基本形状到动态动画,从几何艺术到仿生设计,只用 CSS 就能玩出令…

MySQL的索引、事务

MySQL的索引 索引的概念 索引是一个排序的列表,在列表当中存储索引的值以及索引值对应数据所在的物理行。 索引值和数据是一一映射的关系。 索引的作用 使用索引之后就不需要扫描全表来定位某行的数据 加快数据库查询的速度。 索引可以是表中的一列也可以是多…

WsgiDAV:强大的 WebDAV 解决方案

一、软件介绍 WsgiDAV 是一款卓越的开源 WebDAV 服务器和客户端库,由 Python 精心编写而成。它为用户搭建了一座通过 HTTP/HTTPS 协议访问和管理远程文件系统的便捷桥梁。 WsgiDAV 的核心是一个严格遵循 WebDAV 标准的中间件,能够与任何 WSGI 兼容的 W…

Python语法大全

#前言: 关于此篇博客主要是关于对Python语法的总结,有过C语言学习经历的人看的会更加通俗易懂!(当然没学过C的理解起来也是很容易)知识点言简意赅,内容全面,多有代码解释!且有多处实…

【数据结构】--- 栈和队列

前言 前面学习了数据结构的顺序表、单链表、双向循环链表这些结构;现在就来学习栈和队列,这里可以简单的说栈和队列是具有特殊化的线性表 一、栈 1.1、栈的概念和结构 栈是一种遵循先入后出逻辑的线性数据结构。 栈是一种特殊的线性表,它只允…