【Text2SQL】Spider 数据集
论文:Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task
⭐⭐⭐⭐⭐
EMNLP 2018, arXiv:1809.08887
Dataset: spider
GitHub: github.com/taoyds/spider
一、论文速读
本文提出了 Text2SQL 方向的一个经典数据集 —— Spider 1.0,其难度远大于 WikiSQL,包含了 200 个数据库,覆盖了 138 个不同的领域,平均每个数据库由 27.6 个 columns 和 8.8 个外键,总共由 10,181 个 questions 以及 5,693 个对应的复杂 SQL 查询构成。
1.1 数据集的特点
数据集由 11 名计算机学生构建,在做数据标注时,确保了以下三个方面:
- SQL 模式的覆盖:每个数据库的示例覆盖了常见的 SQL 模式,包含多列的 SELECT 和 aggregation、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、JOIN、UNION、LIKE 等等,且每个 table 都至少出现在一个 query 中。
- SQL 一致性:有些 question 可能有多种 SQL 查询写法,该工作设计了标注协议,当存在多个等效 query 时,所有标注者都选择相同的 SQL 查询模式。
- 问题清晰化:不会创建模糊有歧义的问题,比如“最受欢迎”这种没有明确定义的问题;也没有需要数据库之外的常识才能回答的问题,因为这脱离了“语义解析”的训练目标。
标注工作可以借助 sqlite-web 来打开数据库并查看。
1.2 任务的定义
模型将被在不同的复杂 SQL、复杂数据库、复杂 domains 上被测试,要求模型能够对 question 理解语义,并对新的数据库有泛化能力。
任务不评估模型生成 value 的能力,因为这个 benchmark 侧重评估预测出正确的 SQL 结构和 columns,数据集中也被排除了需要常识推理和数学计算的 querys。
论文工作还对数据库的 table names 和 column names 做了清洗,让这些名字清晰且自成一体。比如将 stu id 转为 student id
二、评价指标
本论文给出了三个 metrics:Component Matching、Exact Matching 和 Execution Accuracy。
2.1 Component Matching
Component Matching 衡量的是 prediction 和 ground-truth SQL 的不同 component 的平均精确匹配效果。
SQL 中每个 keywords 视为一种 component,并将其分解为含有多个 sub-component 的 bag。比如 SELECT avg(col1), max(col2), min(col1) 被分解为一个 bag:(avg, min, col1), (max, col2),然后查看 prediction 和 ground-truth SQL 的 bag 是否相同。
keywords 指的是包括所有不带 column name 和 operatiors 的 SQL 关键字,如 SELECT、WHERE 等。
被分解后,每一个 component 被分解为一个 bag,这个 bag 中的每一个元素对应一个 sub-component,这个 sub-component 也是被分解为一个 bag。
为了报告一个 model 在每个 component 上的整体表现,我们会计算每个 exact set matching 的 F1 score。
2.2 Exact Matching
Exact Matching 衡量的是两个 SQL 是否整体上等同。按照上一节的描述,只有当两个 SQL 在所有 component 上都精确匹配的情况下,这个样本预测才算做正确。
2.3 Execution Acc
Execution Acc 比较的两个 SQL 执行的结果集是否相同。
- Exact Matching 可能会产生 false negative
- Execution Acc 可能会产生 false positive
三、数据集示例
根据 SQL component 数量、conditions 等等,将 SQL queries 分成了四个难度:easy、medium、hard 和 extra hard。
下图展示了四个 level 的示例:

当时论文测试了已有的几个 Text2SQL 模型,也发现都没有表现很好,也说明了 Spider 数据集的难度较高。
四、实验结论
论文使用 SQLNet、TypeSQL 等模型测试了一波,发现以下整体的结论:
- 所有模型的整体表现都很低,说明 Spider 具有挑战性,尤其是 WHERE 子句的预测,因为 WHERE 子句更有可能有多个 columns 和 operators。
- 目前的模型在 test split 上拓展到新数据库时都表现较差,这说明 Spider 为模型泛化到新的数据库提出了挑战。
- 数据库的模式复杂性也会影响模型的性能,实验也发现,随着数据库的外键数量增多,表现也会下降。
五、代码
GitHub 首页中给出了 example 的格式,也给出了用于评估的脚本 evaluation.py。
相关文章:
【Text2SQL】Spider 数据集
论文:Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task ⭐⭐⭐⭐⭐ EMNLP 2018, arXiv:1809.08887 Dataset: spider GitHub: github.com/taoyds/spider 一、论文速读 本文提出了 Text2SQL 方向的…...
语雀——云知识库/笔记
对于日常进行学习/创作或是记录学习、工作内容与心得的群体来说,能够及时同步的云笔记应用有着广泛的应用场景。近期,我也探索了许多款不同的软件应用,今天来分享一款很有特点的应用——语雀。 语雀,为每一个人提供优秀的文档和知…...
Java学习:电影查询简单系统
1.创建一个movice的对象来存放电影 里面设置构造器(有参和无参) package com.movie;public class movice {//创建一个movice的对象存放电影private int id;private String name;private double price;private double score;private String diector;pri…...
在Mac电脑下怎么部署QAnything?
在Mac电脑下部署QAnything,可以选择使用纯Python环境进行部署,这种方式不依赖GPU,适合在Mac等笔记本电脑上运行。以下是基于QAnything的纯Python环境安装教程的步骤[18]: 安装要求 Python 3.10(建议使用Anaconda3来管…...
单条16g和双条8g哪个好
单条16g和双条8g各有优劣,具体选择要根据个人需求和电脑配置来决定。 以下是一些参考信息: •单条16g内存的价格比双条8g内存的价格低,而且16g的内存容量大,一条内存十分的方便。 •两条8g内存可以组成双通道,电脑运行速度要快一些。 •对于普通使用电脑的人群与热衷于…...
Microsoft VBA Excel 去重小工具
问题简述 在本工作表中,A1:B3单元格样式如下,通过名称管理器B列的单元格被命名为"LinkFile"、“SheetName”、“InputArea”,请实现以下功能:读取Excel文件中的数据,去除重复的数据,并记录每个数…...
数据库管理-第194期 网络加速RDMA初探(20240526)
数据库管理194期 2024-05-26 数据库管理-第194期 网络加速RDMA初探(20240526)1 概念2 发展3 使用总结 数据库管理-第194期 网络加速RDMA初探(20240526) 作者:胖头鱼的鱼缸(尹海文) Oracle ACE A…...
C++小游戏 合集
生化危机 #include<conio.h> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<time.h> #include<direct.h> int n,round,gold0; bool f1,f2,f3,deadfalse,PC_64Bit; char str[4]; struct n…...
【Python爬虫篇】Selenium在获取网页数据方面的使用及采集中国大学课程评论数据
1 selenium概述 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种driver&#…...
【JavaScript】文件下载
文件下载的消息格式 服务器只要在响应头中加入 Content-Disposition: attachment; filename"kxx" 即可触发浏览器的下载功能其中: attachment 表示附件,浏览器看到此字段,触发下载行为(不同的浏览器下载行为有所区别&…...
利用Python去除PDF水印
摘要 本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印,并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理,并提供一个简单的使用示例。 导言 简介:水印在许多 PDF 文件中都很常见&#x…...
Unity Assembly Definition Dotween 引用
原理: 具体Unity程序集原理用法,暂时留坑,不介绍了,相信有很多人也写过了 这里简单放个官方API链接 https://docs.unity3d.com/cn/current/Manual/ScriptCompilationAssemblyDefinitionFiles.html 现象 :Dotween引用…...
重开之数据结构(二刷)
引言: 由于前段时间学习效率不高,导致后面复习前面数据结构没有一个大纲,因此打算重新来学习以下数据结构,期望再次把数据结构学透,并有深刻的印象.并且记录每一次的学习记录 以便于后续复习 二分查找 需求:在有序数组arr内,查找target值 如果找到返回索引位置如果找不到返回…...
JVM(三)
在上一篇中,介绍了JVM组件中的类加载器,以及相关的双亲委派机制。这一篇主要介绍运行时的数据区域 JVM架构图: JDK1.8后的内存结构: (图片来源:https://github.com/Seazean/JavaNote) 而在运行时数据区域中&#…...
【二叉树】:LeetCode:100.相同的数(分治)
🎁个人主页:我们的五年 🔍系列专栏:初阶初阶结构刷题 🎉欢迎大家点赞👍评论📝收藏⭐文章 1.问题描述: 2.问题分析: 二叉树是区分结构的,即左右子树是不一…...
[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能
VideoFX 是来自 labs.google 的最新实验,您可以查看音乐效果和图像效果的新更新,现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能,以更好地理解这些生成…...
[7] CUDA之常量内存与纹理内存
CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间,可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势,使用常量内存也一定程序上减少了对全局…...
python使用base加密解密
原理 base编码是一种加密解密措施,目前常用的有base16、base32和base64。其大致原理比较简单。 以base64为例,base64加密后共有64中字符。其加密过程是编码后将每3个字节作为一组,这样每组就有3*824位。将每6位作为一个单位进行编码…...
简述vue.mixin的使用场景和原理
Vue.mixin的使用场景 Vue.mixin是Vue的全局混入功能,它提供了一种非常灵活的方式来分发Vue组件中的可复用功能。使用Vue.mixin可以为Vue实例和组件添加全局的方法、属性、钩子函数等。具体的使用场景包括: 全局设置默认属性或方法:例如&…...
C# WPF入门学习(四)—— 按钮控件
上期介绍了WPF的实现架构和原理,之后我们开始来使用WPF来学习各种控件。 一、尝试插入一个按钮(方法一) 1. VS2019 在界面中,点击工具栏中的视图,在下拉菜单中选择工具箱。 至于编译器中的视图怎么舒服怎么来布置&am…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
