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

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

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

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

文章目录

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

一、背景

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

二、NL2SQL 的实现方式

2.1 Vanna

先说一下目前比较火的开源项目 Vanna 的实现方式:RAG + LLM

这是它的整体架构和实现方式:
我也翻了一下它的源码,它内部实现特别暴力,通过用户的 question,将 schemal、doc 以及 sql 全部查出来,拼接 prompt 然后给大模型。

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

txt 复制代码
 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

sql 复制代码
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 为

txt 复制代码
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

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

txt 复制代码
要查询表 `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的研究者具有一定的参考意义。

相关推荐
264玫瑰资源库1 小时前
问道数码兽 怀旧剧情回合手游源码搭建教程(反查重优化版)
java·开发语言·前端·游戏
技术项目引流1 小时前
elasticsearch查询中的特殊字符影响分析
大数据·elasticsearch·搜索引擎
EasyDSS1 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
普if加的帕1 小时前
java Springboot使用扣子Coze实现实时音频对话智能客服
java·开发语言·人工智能·spring boot·实时音视频·智能客服
施嘉伟2 小时前
Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
数据库·oracle
KoiC2 小时前
Dify接入RAGFlow无返回结果
人工智能·ai应用
lilye662 小时前
精益数据分析(20/126):解析经典数据分析框架,助力创业增长
大数据·人工智能·数据分析
苏小夕夕2 小时前
spark-streaming(二)
大数据·spark·kafka
珈和info2 小时前
珈和科技助力“农险提效200%”!“遥感+”技术创新融合省级示范项目荣登《湖北卫视》!
大数据·科技·无人机·智慧农业
盈达科技2 小时前
盈达科技:登顶GEO优化全球制高点,以AICC定义AI时代内容智能优化新标杆
大数据·人工智能