解开基于大模型的Text2SQL的神秘面纱

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

文章目录

  • 一、背景
  • 二、NL2SQL 的实现方式
    • 2.1 Vanna
    • 2.2 DAIL-SQL
    • 2.3 其他的实现方式
    • 2.4 总结
  • 三、实现样例
  • 四、 text2sql 测试集介绍
    • 4.1. **WikiSQL**
    • 4.2. **Spider**
    • 4.3. **BIRD**
  • 五、EM 和 EX 介绍
  • 七、总结


一、背景

关注 NL2SQL 也有一段时间了,刚好公司最近也要做 NL2SQL,我也刚好看了几个 NL2SQL 的开源项目以及 论文,所以现在总结一下。

二、NL2SQL 的实现方式

2.1 Vanna

先说一下目前比较火的开源项目 Vanna 的实现方式:RAG + LLM
这是它的整体架构和实现方式:
在这里插入图片描述我也翻了一下它的源码,它内部实现特别暴力,通过用户的 question,将 schemal、doc 以及 sql 全部查出来,拼接 prompt 然后给大模型。

这是 vanna 源码的生成 sql 的逻辑

 Uses the LLM to generate a SQL query that answers a question. It runs the following methods:- [`get_similar_question_sql`][vanna.base.base.VannaBase.get_similar_question_sql]- [`get_related_ddl`][vanna.base.base.VannaBase.get_related_ddl]- [`get_related_documentation`][vanna.base.base.VannaBase.get_related_documentation]- [`get_sql_prompt`][vanna.base.base.VannaBase.get_sql_prompt]- [`submit_prompt`][vanna.base.base.VannaBase.submit_prompt]

我自己基于 muilt-agent 开发了类似的功能,few-shot 的正确率确实要高一些

2.2 DAIL-SQL

DaIL-SQL 曾经的王者,在 Spider EX 正确率 86.6 %,我读了它的论文 ,它的核心在于 prompt :在 schemal 上增加了 相似问题和对应SQL,从而提高正确性
在这里插入图片描述

2.3 其他的实现方式

目前这一块在学术界不断的创新,每隔一段时间就会有新的方式出来来刷新之前的最好成绩,感兴趣的可以看一下 Awesome-Text2SQL

2.4 总结

目前我了解到的所有的实现方式都逃不过:RAG +LLM,目前可以优化的点无非就是

  1. RAG 想办法提高 RAG 数据的正确率
  2. 元数据,元数据有问题,RAG的正确率再高也无济于事
  3. prompt,通过优化 prompt,比如 MCS-SQL 利用多个提示和多项选择来生成文本到 SQL
  4. LLM 目前的初步结论是参数越多效果越好

三、实现样例

有一个张 a

CREATE TABLE aa (`all_dau` BIGINT COMMENT 'DAU',`long_dau` BIGINT COMMENT '长DAU',`short_dau` BIGINT COMMENT '短DAU',`date` INT COMMENT '分区')
PARTITIONED BY (date)

我现在要查询表 a 最近 7 天 长DAU 和是多少? 应该怎么做。

  1. 将 表 a 相关的元数据,本例子就是 DDL 写入到向量数据库
  2. 根据用户提问查询 RAG 得到表 a 相关的信息
  3. 拼接 prompt
  4. 发给大模型

比如,拼接 prompt 为

CREATE TABLE aa (`all_dau` BIGINT COMMENT 'DAU',`long_dau` BIGINT COMMENT '长DAU',`short_dau` BIGINT COMMENT '短DAU',`date` INT COMMENT '分区')
PARTITIONED BY (date)要查询表 a 最近 7 天 长DAU 和是多少?返回对应的SQL

发给大模型,大模型返回结果为

要查询表 `aa` 中最近 7 天的长 DAU (`long_dau`) 数量,您可以使用以下的 SQL 查询语句,假设 `date` 列存储的是日期的整数表示(例如 UNIX 时间戳或特定的日期编码):```sql
SELECT SUM(long_dau) AS total_long_dau
FROM aa
WHERE date >= CURDATE() - INTERVAL 7 DAY;

这里,我们使用了 SUM 函数来计算 long_dau 的总和,并且使用 WHERE 子句来过滤出最近 7 天的数据。CURDATE() 函数返回当前日期,然后通过 INTERVAL 7 DAY 添加 7 天的间隔,然后使用 - 操作符来得到 7 天前的日期。这样,您就可以得到最近 7 天的长 DAU 的总和。

四、 text2sql 测试集介绍

是的,WikiSQL、Spider 和 BIRD 是常用的 Text-to-SQL 测试集,它们用于评估模型在自然语言查询到结构化查询语言(SQL)转换方面的能力。以下是它们的简要介绍:

4.1. WikiSQL

  • 概述

    • WikiSQL 是一个大规模的 Text-to-SQL 数据集,包含了由自然语言查询生成的 SQL 查询。数据集来自维基百科中的表格。
  • 特点

    • 包含 80,000 条自然语言查询和相应的 SQL 查询。用户可以通过简单地询问表格中的信息来生成 SQL。
    • 确保多样性,通过多种问题类型测试模型的灵活性。

4.2. Spider

  • 概述

    • Spider 是一个大规模的、跨数据库的 Text-to-SQL 数据集,旨在测试模型在不同数据库架构下的泛化能力。
  • 特点

    • 包含 10,000 多个自然语言查询与 SQL 查询配对,涉及 200 多种不同的数据库结构。
    • 支持复杂的 SQL 查询,如嵌套查询和联合查询。
    • 设计以提高模型的实际应用能力,更接近真实世界的使用场景。

4.3. BIRD

  • 概述

    • BIRD 是一个专注于信息抽取的 Text-to-SQL 数据集,主要来源于真实的数据库和自然语言问题。
  • 特点

    • 旨在评估模型的鲁棒性,特别是在面对模糊或含糊的问题时。
    • 提供多样化的问题类型和复杂的 SQL 逻辑,挑战模型的理解和推理能力。

这些测试集为评估和推动 Text-to-SQL 模型的发展提供了标准化的基准,帮助研究人员在自然语言理解和数据库查询方面进行有效比较。通过这些挑战,模型能够逐步提高在实际应用中的准确性和效率。

五、EM 和 EX 介绍

这里以 Spider Exact Match (EM) 和 Spider Exact Execution (EX) 为例介绍:
在 Text-to-SQL 测试集领域,Spider Exact Match (EM) 和 Spider Exact Execution (EX) 是两种评估模型性能的指标,它们都与 Spider 数据集相关,但评估的侧重点有所不同。

联系:

两者都是用来评估 Text-to-SQL 模型性能的指标。它们都需要模型根据输入的文本描述生成相应的 SQL 查询语句。这两个指标都是在 Spider 数据集上使用的,关注模型的查询生成能力与真实数据库执行结果的一致性。

区别:

  1. Spider Exact Match (EM):主要关注生成的 SQL 查询是否与数据集中提供的标准查询语句完全匹配。它评估模型是否能够准确生成与参考查询语句结构、语法和语义完全一致的 SQL 代码。如果生成的 SQL 查询与参考查询完全一致,则被认为是正确的。这种评估更侧重于模型的查询生成能力。
  2. Spider Exact Execution (EX):更关注生成的 SQL 查询在实际数据库上的执行结果是否与预期结果一致。它不仅检查查询语句的语法和结构,还检查查询的执行结果是否正确。这意味着模型不仅要生成结构正确的查询语句,还要保证这些查询能够在数据库上返回正确的结果。这种评估方式更全面地考虑了模型的性能,包括查询生成能力和数据库执行能力。

简而言之,EM 主要关注查询语句本身的准确性,而 EX 则更关注查询在实际数据库上的执行结果的准确性。在实际应用中,可以根据需求选择合适的评估指标。

七、总结

本文对Text2SQL的实现方式、测试集和评估指标进行了介绍和总结,全面了解了Text2SQL技术的相关内容,对于从事Text2SQL的研究者具有一定的参考意义。

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

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

相关文章

程序员修炼之路

成为一名优秀的程序员,需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础,还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课: 计算机基础 计算机组成原理:理解计算机的硬件组…

GD 32 滤波算法

快速排序知识补充 http://t.csdnimg.cn/gVOsohttp://t.csdnimg.cn/gVOso GD32硬件滤波算法 程序代码&#xff1a; #include <stdint.h> #include <stdio.h> #include "gd32f30x.h" #include "delay.h"static void GpioInit(void) {rcu_periph…

项目实战_表白墙(简易版)

你能学到什么 一个比较简单的项目&#xff1a;表白墙&#xff08;简易版&#xff09;&#xff0c;浏览器&#xff1a;谷歌升级版将在下个博客发布 效果如下 正文 说明 我们是从0开始一步一步做这个项目的&#xff0c;里面的各种问题&#xff0c;我也会以第一人称视角来解…

经验分享:大数据多头借贷风险对自身的不利影响?

在现代金融体系中&#xff0c;大数据技术的应用使得多头借贷成为一种普遍现象。多头借贷指的是个人或企业在短时间内同时或近期内申请多笔贷款或信用产品&#xff0c;这种行为可能带来一系列财务和信用风险。以下是大数据多头借贷风险对个人自身可能产生的不利影响&#xff1a;…

如何编写一个多线程、非阻塞的python代码

一、【写在前面】 最近csdn每天写两篇文章有推广券&#xff0c;趁这个机会写一个python相关的文章吧。 一般我们的任务都可以分为计算密集型任务和IO密集型任务。 python因为全局GIL锁的存在&#xff0c;任何时候只有一个python线程在运行&#xff0c;所以说不能利用多核CPU…

数字的位操作——326、504、263、190、191、476、461、477、693

326. 3 的幂&#xff08;简单&#xff09; 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 3 的幂次方需满足&#xff1a;存在整数 x 使得 n 3x 示例 1&#xff1a; 输入&a…

程序员面试题------N皇后问题算法实现

N皇后问题是一个著名的计算机科学问题&#xff0c;它要求在NN的棋盘上放置N个皇后&#xff0c;使得它们之间不能相互攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。这个问题可以看作是一个回溯算法问题&#xff0c;通过逐步尝试不同的放置位置&#xf…

订单状态统计业务

文章目录 概要整体架构流程技术细节小结 概要 订单状态统计是电子商务、供应链管理、客户服务等多个领域中的一项核心业务需求. 需求分析以及接口设计 技术细节 1.Controller层: ApiOperation("各个状态的订单统计")GetMapping("/statistics")public Re…

检索增强生成(RAG):智能内容生成的新纪元

引言 在大 AI 时代&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;模型&#xff0c;尤其是大型语言模型&#xff08;LLM&#xff09;&#xff0c;已经展现出了令人瞩目的能力。然而&#xff0c;这些模型在提供信息的准确、即时、专业、权威等方面仍存在局限。检索增…

用Python打造精彩动画与视频,3.2 基本的剪辑和合并操作

3.2 基本的剪辑和合并操作 在这一节中&#xff0c;我们将学习如何使用 MoviePy 库对视频进行基本的剪辑和合并操作。MoviePy 是一个用于视频编辑的 Python 库&#xff0c;可以轻松地实现视频的剪辑、合并、添加音频等操作。 准备工作 首先&#xff0c;确保你已经安装了 Movi…

c++----类与对象(下)

当我们简单的学习了上一篇日期类。简单的理解并且使用了我们前面学习的知识。当然这还只是我们c的九牛一毛。并且我们的类与对象的知识还没学习完。今天我们来把类与对象的知识完善一下。 初始化列表 那么今天我们就不讲废话了&#xff0c;我们直接来主题。首先我们可以看到我…

防火墙Firewalld(iptables)

目录 一、Linux防火墙基础 1.什么是防火墙 2.防火墙的功能 3.防火墙的类型 二、Linux防火墙工具 1.iptables 2. netfilter 3.四表五链结构 3.1四表 3.2五链 3.3总结 4.数据包过滤的匹配流程 4.1规则表之间的顺序 4.2规则链之间的顺序 4.3规则链内的匹配顺序 …

项目实战_表白墙(升级版)

你能学到什么 表白墙&#xff08;升级版&#xff09;Mybatis的一些简单应用 正文 前⾯的案例中, 我们写了表⽩墙, 但是⼀旦服务器重启, 数据就会丢失. 要想数据不丢失, 需要把数据存储在数据库中&#xff0c;接下来咱们借助MyBatis来实现数据库的操作。 数据准备 如果我们…

Kubernetes Prometheus 系列 | AlertManager实现企业微信报警

helm部署prometheusgrafana直通车&#xff08;与本文章关联&#xff09; 首先注册企业微信&#xff1a;https://work.weixin.qq.com/ 目录 一、第一种根据企业id&#xff0c;应用secret等绑定二、第二种方式-添加群聊天机器人webhook&#xff08;推荐&#xff09; 前言&#x…

AI Agent学习系列:利用扣子智能体快速生成字体大小可控的金句海报

像这样的金句海报是如何生成的&#xff1f; 利用智能体可以轻松实现&#xff0c;还能控制字体大小&#xff0c;下面就介绍这个智能体的搭建过程。 一、创建扣子bot 打开扣子&#xff0c;点击“创建Bot”&#xff0c;手动创建一个bot。 在Bot创建页面输入Bot名称&#xff0c;比…

【项目实战】—— 高并发内存池

文章目录 什么是高并发内存池&#xff1f;项目介绍一、项目背景二、项目目标三、核心组件四、关键技术五、应用场景六、项目优势 什么是高并发内存池&#xff1f; 高并发内存池是一种专门设计用于高并发环境下的内存管理机制。它的原型是Google的一个开源项目tcmalloc&#xff…

SAP MM学习笔记50 - 分割评价(分别评估)

上一章讲了两个不太常用的物料类型&#xff0c;UNBW 和 NLAG。 学它的主要目的就是应付客户&#xff0c;因为根本就不好用&#xff0c;而客户还会很好奇的问这是啥东西呢&#xff1f; SAP MM学习笔记49 - UNBW - 非评价品目&#xff08;未评估物料&#xff09;&#xff0c;NL…

【Golang 面试 - 基础题】每日 5 题(九)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

主题巴巴WordPress主题合辑打包下载+主题巴巴SEO插件

主题巴巴WordPress主题合辑打包下载&#xff0c;包含博客一号、博客二号、博客X、门户一号、门户手机版、图片一号、杂志一号、自媒体一号、自媒体二号和主题巴巴SEO插件。

【LLM大模型】AI大模型大厂面试真题:「2024大厂大模型技术岗内部面试题+答案」

AI大模型岗的大厂门槛又降低了&#xff01;实在太缺人了&#xff0c;大模型岗位真的强烈建议各位多投提前批&#xff0c;▶️众所周知&#xff0c;2025届秋招提前批已经打响&#xff0c;&#x1f64b;在这里真心建议大家6月7月一定要多投提前批&#xff01; &#x1f4bb;我们…