Text-to-SQL方法研究

有关Text-to-SQL实现细节,可以查阅我的另一篇文章text-to-sql将自然语言转换为数据库查询语句

1、面临的挑战

  • 自然语言问题往往包含复杂的语言结构,如嵌套语句、倒装句和省略等,很难准确映射到SQL查询上。此外,自然语言本身就存在歧义,一个问题可能有多种解读。消除歧义需要深入的语言理解能力以及融入上下文和领域知识。

  • 要生成正确的SQL查询,文本到SQL系统需要全面理解数据库模式,包括表名、列名以及表之间的关系。但不同领域的数据库模式差异很大。如何以一种能被文本到SQL模型有效利用的方式来表示和编码数据库模式信息是一个挑战。

  • 一些SQL查询涉及罕见或复杂的操作,如嵌套子查询、外连接和等。这些操作在训练数据中出现频率低,给文本到SQL模型的准确生成带来挑战。

2、最新进展

针对这些挑战,整理将大语言模型应用于文本到SQL任务的最新进展:

最新的研究聚焦于如何进一步增强大语言模型在文本到SQL任务中的表现,可以有如下几个方面。

  • 1.优化输入到大语言模型的提示,引导其更好地理解用户意图。这包括精心设计少样本示例、对输入进行归纳和分解等。

  • 2.改进大语言模型生成SQL的推理过程。将复杂问题分解成步骤化的子问题,减少信息丢失,同时引入一致性检验避免逻辑谬误。

  • 3.利用数据库反馈来提炼SQL。通过将生成的SQL在实际数据库中执行,获得准确性反馈,并将其再输入给语言模型修正SQL,形成闭环学习。

3、基于上下文学习的Text-to-SQL方法

基于上下文学习的Text-to-SQL方法利用大语言模型强大的少样本学习能力,通过设计提示prompt使模型直接生成SQL,而无需微调模型参数。可以将这类方法进一步细分为以下5类:

  1. 平凡提示

  • 普通的平凡提示

平凡提示是指直接使用问题和数据库DDL作为提示,让语言模型直接生成SQL。

示例:

问题:新疆有几所小学

数据库DDL:

create table if not exists sch_school

(...

)

  • 平凡的少样本提示

平凡的少样本提示则是在此基础上添加一些示例

问题1:山大附属小学各年级女生的平均年龄是多少? SQL1:SELECT sch_student_class_semester.class_grade, AVG(DATEDIFF(CURDATE(), birthday) xxx

问题2:查询市中区实验小学每个年级的人数

SQL2:SELECT sc.class_grade, COUNT(sscs.student_id)\nfrom sch_class sc xxx

问题3:新疆有几所小学

数据库DDL:

create table if not exists sch_school

(...

)

     2. 任务分解

任务分解方法通过将Text-to-SQL任务分解为多个子任务或步骤,降低任务复杂度。这就好比将一个复杂的数学题分解为多个简单的小问题。具体来说,分解方法可以分为子任务分解和子问题分解。子任务分解会将Text-to-SQL分解为模式连接(schema linking)、分类、SQL生成等子任务。而子问题分解则是将用户问题分解为多个子问题,然后分别生成对应的SQL子句再组合。

     3. 提示优化

提示优化构造更高质量的少样本示例,从而提升模型性能。关键点:选择与当前问题更相似或更有代表性的示例作为提示,可以让模型更好地理解任务。

示例:DAIL-SQL,论文中先对问题中的领域特定词进行掩码,然后基于嵌入式欧氏距离对候选示例进行排序,同时还考虑了候选SQL的相似度,最终选择兼顾问题和SQL相似度的高质量示例。

     4. 推理增强

推理增强方法旨在进一步提升模型在Text-to-SQL任务中的推理和逻辑能力。代表性的方法包括思维链(Chain-of-Thoughts)和最小优先(Least-to-Most)提示等。

思维链提示引导模型进行逐步推理,将推理过程外显化。

最小优先提示则是先将问题分解为子问题,然后逐步求解

     5. 执行细化

执行细化方法利用SQL执行反馈来提升模型生成的准确性。其基本思路是:先让模型生成候选SQL,然后在数据库中执行,根据执行结果(如报错信息)来提示模型纠错和细化生成的SQL。

示例:DIN-SQL,论文中自我纠错模块就是让模型根据数据库反馈迭代优化生成的SQL。

     6. 后处理

1)自纠错机制。如生成的sql让模型纠错,检查有无错误,如语法错误等

2)投票。大模型生成sql不稳定,通过多轮投票稳定结果

3)直接执行。根据执行结果纠错,再返回sql

4、基于微调的Text-to-SQL方法

与基于上下文学习的方法不同,基于微调的方法通过在Text-to-SQL数据集上微调预训练语言模型的参数,让模型习得从自然语言问题生成SQL的能力。我们没有用到此方法,这里就不做介绍了。

5、相关研究工作

介绍上文中提到的两篇text-to-sql解决方案的论文,分别是DAIL-SQL和DIN-SQL

1、DAIL-SQL (阿里)

论文的主要贡献

1)首选在目标问题q和候选集Q中的示例问题(sql-question对)中,屏蔽特定领域词汇,得到目标问题骨架和示例问题question骨架,通过embedding计算欧式距离并进行排序。

2)生成一个初步预测sql,去除sql中的表名,列名和value值,得到sql骨架;对示例问题(sql-question对)中的sql同样去除表名,列名和value值得到sql骨架;计算预测sql和示例sql之间的距离相似度。

3)选择标准优先考虑问题相似度排序的候选项,设定阈值进行控制。

  • 问题表示:选取代码展示方式,兼顾外键和规则信息

  • 上下文学习

选择:同时采用问题相似度和SQL相似度

组织:仅展示样例的问题-SQL对,保留问句和SQL的映射关系,并容纳更多样例

问题相似度:计算问题Embedding的距离作为相似度的度量

问题骨架相似度:将问题的表名、列名等信息去掉,计算剩下骨架的相似度,例如How many ___ are there ?

SQL相似度:先生成一个初步sql,在计算初步sql与所有sql间keyword的匹配程度计算相似度

展示添加的sql-question:问题+sql展示形式

                                                                   DAIL-SQL架构图

总结:DAIL-SQL本质是对sql-question对进行优化,以期能提供更准确的sql-question供大模型参考

2、DIN-SQL(商汤)

论文的主要贡献

  1. 通过任务分解提高基于LLM的文本到SQL模型的性能。

  2. 引入针对任务复杂度的自适应提示策略。

  3. 在提示的背景下解决模式链接挑战。

  4. 使用LLM进行自我纠错。

整体架构图: 将问题分解成更小的子问题,解决每个子问题,并使用这些解决方案来构建原始问题的解决方案。

总结:

  • DIN-SQL论文中将sql生成任务分成了三类,即

简单查询(无需join连接即可回答的单表查询)、

非嵌套复杂查询(需要join连接,单不需要子查询)、

嵌套复杂查询(需要join连接,需要子查询)

并分别设置了不同的prompt提示词,用于生成sql

  • 设置了自我校正模块,模型去修正一些小错误

DIN-SQL本质上是在提示词上进行优化。

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

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

相关文章

11.C++程序中的常用函数

我们将程序中反复执行的代码封装到一个代码块中,这个代码块就被称为函数,它类似于数学中的函数,在C程序中,有许多由编译器定义好的函数,供大家使用。下面就简单说一下,C中常用的函数。 1.sizeof sizeof函…

spring boot 项目中redis的使用,key=value值 如何用命令行来查询并设置值。

1、有一个老项目,用到了网易云信,然后这里面有一个AppKey,然后调用的时候要在header中加入这些标识,进行与服务器进行交互。 2、开发将其存在了redis中,一开始的时候,我们测试用的老的key,然后提…

ROS学习笔记(二):鱼香ROS — 超便捷的一键安装/配置/换源指令(Ubuntu/ROS/ROS2/IDE等)

文章目录 前言鱼香ROS1 一键安装:快速搭建开发环境2 具体使用2.1 如何开始?2.2 我的常用配置方案2.3 安装示例 3 总结相关链接 前言 关于Ubuntu与ROS的常规安装,可以看这几篇。 SLAM实操入门(一):在已有…

【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(三)

文章目录 一、商品管理1、需求说明2、生成基础代码(1)创建目录菜单(2)配置代码生成信息(3)下载代码并导入项目 3、商品类型改造(1)基础页面 4、商品管理改造(1&#xff0…

【ADC】使用仪表放大器驱动 SAR 型 ADC 时的输入输出范围

概述 本文学习于TI 高精度实验室课程,介绍使用仪表放大器时 SAR ADC 驱动放大器的注意事项。具体包括:介绍如何使用仪表放大器设计数据转换器驱动电路。 仪表放大器(Instrumentation Amplifier,下文简称 INA)可抑制输…

开关电源为什么要进行负载测试,负载测试都包含哪些项目?

开关电源在现代电子设备中占据着重要的地位,其性能的稳定性和可靠性直接影响着电子设备的正常运行。为了确保开关电源的质量,需要对其进行负载测试。负载测试可以模拟实际工作环境中的负载情况,检测开关电源在不同负载条件下的输出特性、稳定…

wireshark使用要点

目录 IP过滤 端口过滤 内容过滤 过滤udp 过滤tcp IP过滤 ip.src XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息 ip.dst XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息 ip.addr XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX&#xff0…

Python库matplotlib之四

Python库matplotlib之四 小部件(widget)RadioButtons构造器APIs应用实列 Slider构造器APIs应用实列 小部件(widget) 小部件(widget)可与任何GUI后端一起工作。所有这些小部件都要求预定义一个Axes实例,并将其作为第一个参数传递。 Matplotlib不会试图布局这些小部件…

DTH11温湿度传感器

DHT11 是一款温湿度复合传感器,常用于单片机系统中进行环境温湿度的测量。以下是对 DHT11 温湿度传感器的详细讲解: 一、传感器概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感…

【STM32】江科大STM32笔记汇总(已完结)

STM32江科大笔记汇总 STM32学习笔记课程简介(01)STM32简介(02)软件安装(03)新建工程(04)GPIO输出(05)LED闪烁& LED流水灯& 蜂鸣器(06)GPIO输入(07)按键控制LED 光敏传感器控制蜂鸣器(08)OLED调试工具(09)OLED显示屏(10)EXTI外部中断(11)对射式红外传感器计次 旋转编码器…

C++:模拟实现vector

目录 成员变量与迭代器 size capacity empty 迭代器有关函数 实现默认成员函数的前置准备 reserve ​编辑 ​编辑 push_back 构造函数 无参构造 迭代器区间构造 n个val来进行构造 析构函数 拷贝构造函数 赋值重载 增删查改 clear resize pop_back inser…

git add成功后忘记commit的文件丢了?

本文目标:开发人员,在了解git fsck命令用法的条件下,进行git add成功但由于误操作导致丢失的文件找回,达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中,分支太多(基线分…

通信工程学习:什么是MIMO多输入多输出技术

MIMO:多输入多输出技术 MIMO(Multiple-Input Multiple-Output)多输入多输出技术是一种在无线通信中广泛应用的技术,它通过利用多个天线进行数据传输和接收,可以显著提高无线通信系统的性能和容量。以下是对MIMO技术的详细解释: 一、定义与原理 MIMO技术…

铺铜修改后自动重铺

很多初学者对于敷铜操作感到比较麻烦:为什么每次打过孔,修改走线后都需要手动右击-重新修改敷铜。如何提升layout的效率? 版本:Altium Designer 21.9.2 首先,点击面板右边的小齿轮,进入设置 接下来&#…

【国庆要来了】基于Leaflet的旅游路线WebGIS可视化实践

前言 转眼2024年的国庆节马上就要来临了,估计很多小伙伴都计划好了旅游路线。金秋十月,不管是选择出门去看看风景,还是选择在家里看人。从自己生活惯了的城市去别人生活惯了的城市,去感受城市烟火、去感受人文风景,为2…

SpringBoot整合JPA 基础使用

一、什么是JPA ‌‌1.JPA的定义和基本概念‌‌ ‌JPA(Java Persistence API)‌是Java中用于进行持久化操作的一种规范,它定义了一系列用于操作关系型数据库的API接口。通过这些接口,开发人员可以方便地进行数据库的增删改查等操…

DC00021基于springboot问卷调查管理系统web项目调查问卷管理系统MySQL(附源码)

1、项目功能演示 DC00021基于springboot问卷调查管理系统web项目调查问卷管理系统MySQL 2、项目功能描述 基于springboot问卷调查管理系统包括以下功能: 1、系统登录、系统注册 2、创建题目、题目信息查看 3、创建问卷、我的问卷信息查看 4、创建活动、我的活动信息…

看Threejs好玩示例,学习创新与技术(ThreePipe)

下面这个示例我觉得特别棒,我会推荐给我们的美工,以后产品的宣传图用它。比如下面这个图,不需要PS,仅需拖拽一个照片进去,它会自动铺到笔记本电脑上。完成后点击截图就可以得到高清图片,不需要摆拍和PS。大…

光伏设计难点在哪儿?如何解决?

一、光伏设计的主要难点 1.技术门槛高 光伏设计领域的一大难题在于技术使用的复杂性。用户往往需要下载并安装特定的软件和控件,这些工具操作复杂,增加了学习成本和使用难度。此外,现有的设计工具并非专为光伏设计而生,组件库不…

【华为】用策略路由解决双出口运营商问题

需求描述 不同网段访问互联网资源时,走不同的出口,即PC1走电信出口,PC2走移动出口。 客户在内网接口下应用策略路由后往往出现无法访问内网管理地址的现象,该举例给出解决办法。 拓扑图 基础配置 #sysname R1 # # interface G…