一、 简介

语义解析是近几年发展起来的一个NLP的分支,主要目的是将自然语言的文本描述,自动转成机器语言(SQL)语句。也称Text-to-SQL, nl2SQL等。随着知识图谱的发展,也逐渐孵化出很多nl2Cypher算法。

NL2SQL的历史悠久,早在1973年,Woods等人就开发了一个名为LUNAR的系统,可以回答关于从月球带回的岩石样本的问题。到了1978年,Hendrix设计了一个连接美国海军舰艇信息数据库的自然语言接口,名为LIFER/LADDER。这些系统仅仅支持特定数据库的单表操作,受限于当时的技术发展,NL2SQL并没有受到太多的关注。直到2015年AI的复苏和NLP的发展,它渐渐回到人们的视线。

二、数据集

目前比较火的英文数据集有WikiSQL、Spider、WikiTableQuestions、ATIS等,中文数据集有刚刚结束的中文首届NL2SQL挑战赛公开的数据,各个数据集都有各自的特点,下面简单介绍下这几个数据集。

2.1 WikiSQL

英文数据集,单表查询数据集

https://github.com/salesforce/WikiSQL

WikiSQL数据集是Salesforce在2017年提出的大型标注NL2SQL数据集,也是目前规模最大的NL2SQL数据集。它包含了 24,241张表,80,645条自然语言问句及相应的SQL语句。目前学术界的预测准确率可达91.8%。样例如下图。

WikiSQL的问题长度8~15个词居多,查询长度8~11个词居多,表的列数5~7个居多,另外,大多数问题是what类型,其次是which、name、how many、who等类型。

下载方法:

git clone https://github.com/salesforce/WikiSQL
cd WikiSQL
pip install -r requirements.txt
tar xvjf data.tar.bz2

创建evaluate

mkdir -p third_party
git clone https://github.com/salesforce/WikiSQL third_party/wikisql

2.2 Spider数据集

耶鲁大学的LILY Lab在2018年发布了Spider数据集。相比起之前的数据集更加接近真实场景——涉及多表关联、更多SQL种类、更广泛的领域——任务难度很大。数据集发布到现在1年半以来,(测试集上)准确率虽然已经从最初的27.2%为61.9%,但距离工业应用还有不小差距。

该数据集包含了10,181条自然语言问句,分布在200个独立数据库中的5,693条SQL,内容覆盖了138个不同的领域。虽然在数据数量上不如WikiSQL,但Spider引入了更多的SQL用法,例如Group By、Order By、Having等高阶操作,甚至需要Join不同表,更贴近真实场景,所以难度也更大。

https://yale-lily.github.io/spider

英文数据集,多表格,有CSpider,中文翻译版,但是对应的表格列名为英文,相对实验效果较差。

数据格式

数据样例

2.3 WikiTabelQuestions

https://github.com/ppasupat/WikiTableQuestions

该数据集是斯坦福大学于2015年提出的一个针对维基百科中那些半结构化表格问答的数据集,内部包含22,033条真实问句以及2,108张表格。由于数据的来源是维基百科,因此表格中的数据是真实且没有经过归一化的,一个cell内可能包含多个实体或含义,比如「Beijing, China」或「200 km」;同时,为了很好地泛化到其它领域的数据,该数据集测试集中的表格主题和实体之间的关系都是在训练集中没有见到过的。样例数据如下:

2.4 ATIS

ATIS(The Air Travel Information System)是一个年代较为久远的经典数据集,由德克萨斯仪器公司在1990年提出。该数据集获取自关系型数据库Official Airline Guide (OAG, 1990),包含27张表以及不到2,000次的问询,每次问询平均7轮,93%的情况下需要联合3张以上的表才能得到答案,问询的内容涵盖了航班、费用、城市、地面服务等信息。

https://www.kaggle.com/siddhadev/ms-cntk-atis

2.5 2019 首届中文NL2SQL挑战赛

https://tianchi.aliyun.com/competition/entrance/231716/information

该数据集由追一科技在2019年举办的首届中文NL2SQL挑战赛中提出,使用金融以及通用领域的表格数据作为数据源,提供在此基础上标注的自然语言与SQL语句的匹配对,包括4万条有标签数据作为训练集,1万条无标签数据作为测试集。其中,5千条测试集数据作为初赛测试集,对选手可见;5千条作为复赛测试集,对选手不可见。样本格式如下:

中文单表格

表格信息:

2.6 LIC2020 语义解析

2020年百度举办的LIC比赛,包含语义解析赛道,数据为中文数据,并在首届nl2sql基础上增加了多表查询的数据。提高了难度。

https://aistudio.baidu.com/aistudio/competition/detail/30?isFromCcf=true

三、当前Spider榜单

红色文字标示出的是各阶段表现最好的基础模型,桔色高亮标示出的是各个时间点上的SOTA。

四、模型简介

单表任务有很多比较好的模型,且达到了较高的结果,但是实际生产应用中多表查询更契合实际场景。。

4.1 A Syntactic Neural Model for General-Purpose Code Generation

2017 ACL Pengcheng Yin,Graham Neubig,Carnegie Mellon University

作者认为现有的方法将代码生成看做是自然语言生成的任务,生成树形结构结果

论文link

4.2 SyntaxSQLNet

EMNLP 2018 论文链接:https://arxiv.org/abs/1810.05237

SyntaxSQLNet是第一个针对Spider任务设计的模型。在decoder阶段,不是生成线性文本,而是生成一棵对应SQL语言特点的语法树。同时论文提出了一种生成跨领域训练数据的方法,用数据增强来提升模型表现。

这篇论文是基于2017 ACL Pengcheng Yin,Graham Neubig的那篇论文来的,也是生成树形结构。

4.3 RCSQL

(Lee, 2019):针对不同的SQL语句来创建decoder;使用seq2seq而不是seq2set的方法进行列名预测;使用循环递归的方法来生成子查询。

4.4 GNN

(Bogin et al., 2019):将关系型数据库的数据结构用图神经网络表示,以此来提升数据库信息的利用效率。并将GNN结构用于辅助后续的编码和解码过程。

4.5 IRNet

(Guo and Zhan et al., 2019):微软亚洲研究院。分三个阶段进行,首先,将所提问题和数据库的关系结构做schema linking。然后,用基于语法规则的神经网络构造一个SemQL query。最后,基于SemQL构造不同场景下的SQL query。

这个方法是19年的一个经典,基本处于当时霸占榜首的位置。

4.6 RATSQL

RATSQL(Wang et al., 2019):也是微软出品。用基于relation-aware的自注意力机制,建立一套完整框架来进行schema linking和schema encoding。同时,在有向图上定义了更多的边,对schema进行了更加详细的分解。

在进行几波改进之后,处于当前sota效果,所以简单说几句,这篇论文有重点

①对于Transformer的改进是第一大点,加入了关系进行attention(个人认为这个是提高效果很有意义的一点)

②graph的构建,这块貌似参考了IRNet相关内容

③ 生成SQL树,这块论文中记录是参考2017  Pengcheng Yin,Graham Neubig 这篇方法

4.7 RYANSQL

Recursively Applying Sketch-based Slot Fillings for Complex Text-to-SQL in Cross-Domain Databases

https://arxiv.org/pdf/2004.03125.pdf

方法采用将SQL分块,在补充对应的内容的方法,SQL的块通过生成模型实现。

从榜单可以看到,除了IRNet RatSQL之外的方法中, RYANSQL的方法比较脱颖而出,且是单模型,未进行多余改进。

2020年LIC2020 语义解析比赛中,冠军团队的方法也是采用类似方案达到了远高于第二名和第三名的效果。

4.8 其它

这里有一些比较经典的模型没有介绍到,比如XSQL是18年比较经典的一个nl2sql模型,主要用来解决单表查询任务,可以通过模板配置实现。有兴趣可以学习下相关论文。

目前榜首的几篇,① 多采用BERT XLNET等预训练模型来增强,② 其次,DB content 通过字段内容来提升模型识别能力。③ 重排序算法对于模型效果提高也有一定意义,,在beam输出里选择最优的预测来提升准确率。LIC2020语义解析冠军方案采用了重排序算法来对输入的column和tabel进行降维; 最新的论文Bertrand-DR(Kelkar et al., 2020/2/3) 建议了类似的方法。

NL2sql相关论文链接

https://zhuanlan.zhihu.com/p/143400912 RATSQL

https://zhuanlan.zhihu.com/p/139973372 RYANSQL

https://zhuanlan.zhihu.com/p/136877103 IRNet

五、参考链接

从Spider榜单梳理Text2SQL技术演进的关键点

【综述】NL2SQL (一) 简介及数据集

论文笔记 | 语义解析相关论文

语义解析(一) —— 概述(数据和模型简介)相关推荐

  1. 论文浅尝 | AMUSE: 基于 RDF 数据的多语言问答语义解析方法

    来源:ISWC 2017 链接:https://link.springer.com/content/pdf/10.1007%2F978-3-319-68288-4.pdf 本文主要关注基于RDF数据的 ...

  2. 基于语义解析任务探究深度模型的组合泛化能力

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 自然语言处理领域有很多序列对序列任务,比如我们常见的机器翻译.语义解析.文本摘要等.目前最基本的解决方案是收集大量成对的数据,然后训练一 ...

  3. 一切转型始于数据和模型 | 2020 MATLAB EXPO 中国线上用户大会:即将上线

    2020 MATLAB EXPO 中国线上用户大会 一切转型始于数据和模型 2020 年 7 月 21-24 日 | 线上直播 MATLAB 和 Simulink,作为业界普遍使用的科学计算与模型仿真 ...

  4. 基于Go的语义解析开源库FMR,“屠榜”模型外的NLP利器

    (由AI科技大本营付费下载自视觉中国) 作者 | 刘占亮 一览群智技术副总裁 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) 如何合理地表示语言的内在意义?这是自然语言处理业 ...

  5. Unity解析OpenDRIVE地图数据,并生成路网模型

    文章目录 一.引言 二.OpenDrive概述 三.OpenDrive重要节点介绍 1.建模用到的主要节点及属性 2.geometry节点 3.lane的width节点 四.根据解析得到的数据创建道路 ...

  6. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  7. R语言 零基础入门教程第11章 Rattle可视化数据挖掘工具(1)Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 本章内容 Rattle简介及安装 功能预览 数据导入 数据探索 数据建模 模型评估 Rattle实例 本章目标 了解Rattle的安装及 ...

  8. PTMs:QLoRA技巧之源码解读(qlora.py文件)—解析命令与加载参数→数据预处理→模型训练+评估+推理

    PTMs:QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理→模型训练+评估+推理 目录 QLoRA技巧之源码解读(qlora.py文件)-解析命令与加载参数→数据预处理 ...

  9. 论文浅尝 | CoRR - 面向复杂知识问答的框架语义解析方法

    论文笔记整理:谭亦鸣,东南大学博士. 来源:CoRR abs/2003.13956 (2020) 链接:https://arxiv.org/pdf/2003.13956.pdf KBQA任务中的语义解 ...

最新文章

  1. Android recyclerView/listview的点击变色、点击换背景颜色
  2. jQuery遍历not的用法
  3. 网络上常用的一些网站
  4. 用python设计数独的心得体会_python实现数独算法实例
  5. Jmeter如何远程监控服务器
  6. java-高级编程课-实验题集标答整理
  7. VS2008SP1无法安装
  8. HTML跳转php没反应的问题解决
  9. 关于cuda驱动版本以及cuda运行版本不匹配的问题
  10. 网络安全技术概论知识点
  11. playwright 启动已经打开的浏览器,或者远程浏览器
  12. STC12C5A60S2单片机驱动超声波
  13. 数组下标访问越界导致溢出1
  14. C++——递归之数字组合
  15. 苹果CMS V10 整合阿里云播放器-带记忆播放
  16. 华为云智慧物流解决方案
  17. 进阶 Nginx 高手必须跨越的 5 座大山
  18. php写接口curd,接口实战(数据库的CURD操作)
  19. 电脑键盘中F1-F12被称为功能键其各自功能如下
  20. 【专业知识问答】问:发电机转子绕组匝间短路的危害、起因、处理要求和预防措施各是什么?

热门文章

  1. 2012年最值得学习的IT视频资料及技术资讯类网站列举
  2. OWASP ZAP安装kali
  3. elasticsearch -- win10 elasticsearch.bat闪退
  4. 微派微营销智能服务平台:微信营销最佳搭档
  5. 推荐搜索系统中关于多场景学习的常见方法
  6. 蓝牙学习笔记之建立蓝牙连接的过程
  7. super()函数的使用
  8. JavaEE系统架构师学习路线(基础篇)
  9. 之江汇空间如何加音乐背景_之江汇互动课堂使用方法
  10. “假离婚、真套现” 解禁潮将至 拉卡拉上演“一出好戏”