【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…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...