解开基于大模型的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://xiahunao.cn/news/3266642.html

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

相关文章

环境搭建-Windows系统搭建Docker

Windows系统搭建Docker 一、系统虚拟化1.1 启用虚拟化2.2 启用Hyper-v并开启虚拟任务 三、安装WSL3.1 检验安装3.2 安装WSL 四、Docker安装4.1 Docker安装包下载4.2 Docker安装4.3 运行docker Desktop 五、Docker配置5.1 打开Docker配置中心5.2 配置Docker国内镜像 六、使用 一…

提高爬虫稳定性:解决代理IP频繁掉线的完整指南

当代理IP在爬虫中频繁掉线时,我们先要了解出现问题的可能原因,这不仅限于技术性因素,还涉及操作策略和环境因素。只有在找到具体原因后,才能针对问题类型从源头解决IP掉线问题。 一、问题原因: 1. 代理IP质量问题导致…

vue3前端开发-小兔鲜项目-form表单的统一校验

vue3前端开发-小兔鲜项目-form表单的统一校验!实际上,为了安全起见,用户输入的表单信息,要满足我们的业务需求,参数类型等种种标准之后,才会允许用户向服务器发送登录请求。为此,有必要进行一次…

通过限制访问,实现纯私有Docker镜像

怎么会不过审呢?没有敏感信息呀。 For obvious reasons,Many Docker image repositories are inaccessible,The official warehouse has also been filtered by the firewall,So write about how to build a self use Docker image using CloudFlares Workers and Pages. …

【第二天】计算机网络 HTTP请求报文和响应报文是什么样的 HTTP请求方式有哪些 GET请求和POST请求的区别

HTTP请求报文和响应报文是什么样的? 我去,以前都没怎么研究过这个。 客户端发送一个请求给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放到响应报文中返回给客户端。 URL HTTP使用URL (Uniform Resource Locator&…

vscode 连接WSL子系统方法

1、在应用商店中安装wsl子系统:Ubuntu22.04 2、安装WSL扩展 3、打开vscode命令面板(左下角设置中);输入wsl, 选择:Remote Explorer: Focus on WSL目标 view 这样就连接上了。。。。。 有时这个会没有这个链接箭头,可…

SSIS_SQLITE

1.安装 SQLite ODBC 驱动程序 2.添加SQLite数据源 在“用户DSN”或“系统DSN”选项卡中,点击“添加”。选择“SQLite3 ODBC Driver”,然后点击“完成”。在弹出的配置窗口中,设置数据源名称(DSN),并指定S…

React Native在移动端落地实践

在移动互联网产品迅猛发展的今天,技术的不断创新使得企业越来越注重降低成本、提升效率。为了在有限的开发资源下迅速推出高质量、用户体验好的产品,以实现公司发展,业界催生了许多移动端跨平台解决方案。这些方案不仅简化了开发流程&#xf…

使用AI大模型统计英语四六级试题高频词汇

引子 前些年我做过商品搜索,当时为了优化一些搜索词和搜索关联提示,接触到一点NLP的知识。所以后来有一场非全日制的研究生考试,为了高效的复习英语单词,我爬取了往年的历史真题数据,以及其他模拟等各种试题的数据。然…

【零基础必看的前端教程】——JavaScript(八)函数

欢迎大家打开前端的新篇章——JavaScript,JavaScript与HTML、CSS合称为前端三大件,JavaScript是前端的重中之重,小洪将继续以零基础视角,带你循序渐进学习前端知识,一看就懂,小白也能转行做前端&#xff01…

【PyTorch】基于YOLO的多目标检测项目(二)

【PyTorch】基于YOLO的多目标检测项目(一) 【PyTorch】基于YOLO的多目标检测项目(二) YOLO-v3网络由跨距为2的卷积层、跳跃连接层和上采样层组成,没有池化层。网络接收一幅416 * 416的图像作为输入,并提供三…

nacos2.x作为配置中心和服务注册和发现以及springcloud使用

目录 一、nacos是什么 二、windows下安装配置nacos 1、准备 2、安装nacos 3、配置nacos 4、启动并且访问nacos 三、springcloud使用nacos作为配置中心 四、springcloud使用nacos进行服务注册与发现 五、springcloud使用nacos进行服务消费 六、nacos的一些高级配置 1…

pytorch-梯度下降

梯度下降 y x 2 ∗ s i n ( x ) y ′ 2 x s i n x x 2 c o s x x 1 x − Δ y ′ ( x ) 其中 Δ 表示学习率, y ′ ( x ) 代表 y 在 x 点处关于 x 的梯度。 y x^2 * sin(x) \\ y 2xsinxx^2cosx \\ x_1 x - \Delta y(x) \\ 其中 \Delta 表示学习率&#xff0c…

nginx 启动 ssl 模块

文章目录 前言nginx 启动 ssl 模块1. 下载2. 启动 ssl 模块 步骤3. 验证前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! nginx 启动 ssl 模块 1. 下载 下载…

土耳其云手机提升TikTok电商效率

在数字化飞速发展的今天,TikTok不仅是一个社交平台,更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展,土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇,实现业务…

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

Pytorch使用教学4-张量的索引

1 张量的符号索引 张量也是有序序列&#xff0c;我们可以根据每个元素在系统内的顺序位置&#xff0c;来找出特定的元素&#xff0c;也就是索引。 1.1 一维张量的索引 一维张量由零维张量构成 一维张量索引与Python中的索引一样是是从左到右&#xff0c;从0开始的&#xff…

MSP430M03507最小系统板的keil环境搭配,用keil编辑ti单片机

转载自嘉立创MSP430M03507开发手册 这篇文章只是因为我的keil版本与嘉立创的不一样&#xff0c;所以添加了我自己遇到的问题解析 先说说为什么要用keil编辑&#xff0c;因为ti单片机自己的ccs编译环境需要对应仿真器&#xff0c;那个加芯片都240了&#xff0c;哪有那么多钱买…

谷粒商城实战笔记-踩坑-跨域问题

一&#xff0c;When allowCredentials is true, allowedOrigins cannot contain the special value “*” since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider u…

华东科技杂志华东科技杂志社华东科技编辑部2024年第12期目录

主编的话 造梦国际创新科技之“港” 李岩; 5 焦点 华东视界 6-7 焦点_产业风暴 新材料 8 前沿产品 8 人工智能 9 电子信息 9 生物医药 9 焦点_科技人物 Demis Hassabis&#xff1a;界定AI角色 李冲; 10-15 观点_专题策划 沪港科创“乘数效…