电子商务网站建设薛万欣,网络营销平台,青岛做网站公司排名,4399网页游戏大全电脑版在线玩你好#xff0c;我是 shengjk1#xff0c;多年大厂经验#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注#xff01;你会有如下收益#xff1a;
了解大厂经验拥有和大厂相匹配的技术等
希望看什么#xff0c;评论或者私信告诉我#xff01; 文章目录 一…你好我是 shengjk1多年大厂经验努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注你会有如下收益
了解大厂经验拥有和大厂相匹配的技术等
希望看什么评论或者私信告诉我 文章目录 一、背景二、NL2SQL 的实现方式2.1 Vanna2.2 DAIL-SQL2.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目前可以优化的点无非就是
RAG 想办法提高 RAG 数据的正确率元数据元数据有问题RAG的正确率再高也无济于事prompt通过优化 prompt比如 MCS-SQL 利用多个提示和多项选择来生成文本到 SQLLLM 目前的初步结论是参数越多效果越好
三、实现样例
有一个张 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 和是多少 应该怎么做。
将 表 a 相关的元数据本例子就是 DDL 写入到向量数据库根据用户提问查询 RAG 得到表 a 相关的信息拼接 prompt发给大模型
比如拼接 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 数据集上使用的关注模型的查询生成能力与真实数据库执行结果的一致性。
区别
Spider Exact Match (EM)主要关注生成的 SQL 查询是否与数据集中提供的标准查询语句完全匹配。它评估模型是否能够准确生成与参考查询语句结构、语法和语义完全一致的 SQL 代码。如果生成的 SQL 查询与参考查询完全一致则被认为是正确的。这种评估更侧重于模型的查询生成能力。Spider Exact Execution (EX)更关注生成的 SQL 查询在实际数据库上的执行结果是否与预期结果一致。它不仅检查查询语句的语法和结构还检查查询的执行结果是否正确。这意味着模型不仅要生成结构正确的查询语句还要保证这些查询能够在数据库上返回正确的结果。这种评估方式更全面地考虑了模型的性能包括查询生成能力和数据库执行能力。
简而言之EM 主要关注查询语句本身的准确性而 EX 则更关注查询在实际数据库上的执行结果的准确性。在实际应用中可以根据需求选择合适的评估指标。
七、总结
本文对Text2SQL的实现方式、测试集和评估指标进行了介绍和总结全面了解了Text2SQL技术的相关内容对于从事Text2SQL的研究者具有一定的参考意义。