Text-to-SQL方法研究

news2024/9/28 9:16:28

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.coloradmin.cn/o/2173030.html

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

相关文章

webpack 4 的 30 个步骤构建 react 开发环境

将 react 和 webpack4 进行结合,集 webpack 的优势于一身,从 0 开始构建一个强大的 react 开发环境。 其实很多人都有 一看就会,一做就废 的特点(当然也包括我在内),这个时候,你需要制定一个略微详细的计划&#xff0…

Redis的基础认识与在ubuntu上的安装教程

来自Redis的自我介绍 我是Redis,一个中间件,职责是把数据存储在内存上,因此可以作为数据库、缓存、消息队列等场景使用。由于可以把数据存储在内存上,因此江湖人称快枪手 1.redis的功能特性 (1)数据在内存…

9.3 Linux_I/O_文件I/O相关函数

打开与关闭 1、打开文件 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);返回值:成功返回文件描述符,失败返回EOF pathname:文件路径 flags:标志,其中O_RDO…

深入浅出CSS盒子模型

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言文章有误敬请斧正 不胜感恩!什么是盒子模型?盒子模型的组成部分详解1. 内容区(Content)2. 内边距(Padding)3. 边框(Border&am…

『功能项目』下载Mongodb【81】

下载网址:Download MongoDB Community Server | MongoDB 点击安装即可 选择Custom 此时安装已经完成 桌面会创建图标 检查是否配置好MongoDB 输入cmd命令行 Windows键 R 打开命令行 输入cmd 复制安装路径 复制data路径 如果输出一大串代码即配置mongdb成功

Mysql高级篇(中)——锁机制

锁机制 一、概述二、分类1、读锁2、写锁★、FOR SHARE / FOR UPDATE(1)NOWAIT(2)SKIP LOCKED(3)NOWAIT 和 SKIP LOCKED 的比较 ★、 脏写3、表级锁之 S锁 / X锁(1)总结(2…

免费视频无损压缩工具+预览视频生成工具

视频无损压缩工具 功能与作用 :视频无损压缩工具是一种能够减少视频文件大小,但同时保持视频质量的工具。它通过先进的编码技术和算法,有效降低视频文件的存储空间,同时保证视频的清晰度和观感。这对于需要分享或存储大量视频内容…

ZLMediaKit快速上手【保姆级简单快速版】

一、前言 1、ZLMediaKit使用场景 最近在写一个摄像头检测的项目,其中需要做拉流测试,但是摄像头数量不够用,如果直接重复拉流可能会出现问题,使用ZLMediaKit(一个基于C11的高性能运营级流媒体服务框架)可…

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击

对抗攻击方法详解:梯度攻击、转移攻击与模型集成攻击 近年来,随着深度学习模型在各个领域取得惊人突破,对抗攻击(Adversarial Attack) 逐渐成为研究热点。对抗攻击旨在通过在输入数据上施加精心设计的微小扰动&#x…

Doris安装部署指南

Doris安装部署指南 一、环境准备二、下载并解压安装包三、配置FE和BEFE配置BE配置四、验证集群状态五、集群扩容与缩容六、总结Apache Doris(原百度Palo)是一款基于MPP架构的高性能、实时的分析型数据库。它支持标准SQL,高度兼容MySQL协议,能够运行在绝大多数主流的商用服务…

第50篇 汇编语言实现中断<六>

Q:怎样设计汇编语言程序使用定时器中断实现实时时钟? A:此前我们曾使用轮询定时器I/O的方式实现实时时钟,而在本实验中将采用定时器中断的方式。新增的interval_timer.s间隔定时器的中断服务程序中增加了TIME变量,还更…

<<迷雾>> 第 1 章 了解计算机, 要从电开始 示例电路

简单灯泡电路 info::操作说明 灯的亮起有一定的延时, 需要过一会才逐渐亮起来 另: 可通过 “菜单–选项–显示电流” 控制是否显示电流 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdm…

Unity XR 环境检测

需求&#xff1a; 检测环境是XR还是手机 代码&#xff1a; using UnityEngine.XR;public class EnvmentUtility {/// <summary>/// 是否是XR环境/// </summary>/// <returns>如果是XR&#xff0c;返回true&#xff0c;否则false</returns>public sta…

Gin框架简易搭建(3)--Grom与数据库

写在前面 项目地址 个人认为GORM 指南这个网站是相比较之下最为清晰的框架介绍 但是它在环境搭建阶段对于初学者而言不是很友好&#xff0c;尤其是使用mysql指令稍有不同&#xff0c;以及更新的方法和依赖问题都是很让人头疼的&#xff0c;而且这些报错并非逻辑上的&#xf…

linux 下的静态库与动态库

目录 一、介绍 1、静态库 2、动态库 二、操作 1、静态库 2、动态库 3、使用库文件 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二 &#xff08;3&#xff09;方法三 一、介绍 1、静态库 静态链接库实现链接操作的方式很简单&#xff0c;即程序文…

vue启动报错

vue执行npm run dev报错如下 Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:69:19)at Object.createHash (node:crypto:133:10)at module.exports (F:\ray\taisheng-erp-frontend-master\node_modules\webpack\lib\ut…

深信服2025届全球校招研发笔试-C卷(AK)

前面14个填空题 T1 已知 子数组 定义为原数组中的一个连续子序列。现给定一个正整数数组 arr&#xff0c;请计算该数组内所有可能的奇数长度子数组的数值之和。 输入描述 输入一个正整数数组arr 输出描述 所有可能的奇数长度子数组的和 示例 1 输入 1,4,2,5,3 输出 58 说明 …

[论文精读]Polarized Graph Neural Networks

论文网址&#xff1a;Polarized Graph Neural Networks | Proceedings of the ACM Web Conference 2022 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于…

Junit 5 - 理解Mockito,提高UT 覆盖率

前言 当我是1个3年初级程序员时&#xff0c; 我被面试者问到1个问题&#xff1a; 如何保证你的开发任务交付质量 当我是1个7年开发组长时&#xff0c; 我被面试者问到另1个问题&#xff1a;如何保证你的团队的代码质量&#xff0c; 减少rework。 又若干年后&#xff0c; 我才…

代码随想录Day 58|拓扑排序、dijkstra算法精讲,题目:软件构建、参加科学大会

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part08**拓扑排序精讲**题目&#xff1a;117. 软件构建拓扑排序的背景解题思路&#xff1a;模拟过程 **dijkstra&#xff08;朴素版&#xff09;精讲**题目&#xff1a;47. 参加科学大会解题思…