/NL2SQL

Text2SQL 语义解析数据集、解决方案、paper资源整合项目

Text2SQL

Text to SQL( 以下简称Text2SQL),是将自然语言文本(Text)转换成结构化查询语言SQL的过程,属于自然语言处理-语义分析(Semantic Parsing)领域中的子任务。

它的目的可以简单概括为:“打破人与结构化数据之间的壁垒”,即普通用户可以通过自然语言描述完成复杂数据库的查询工作,得到想要的结果。

Text2SQL 简单示例

示例

表_1-1

代码 名称 上市地点 收盘价 周涨跌幅 月涨跌幅
SINA.O 新浪 纳斯达克 58.93 -4.52 8.791
BITA.N 易车 纽约证券交易所 18.11 -4.78 -11.742
JRJC.O 金融界 纳斯达克 1.09 -9.17 2.834
SFUN.N 淘屏 纳斯达克 1.09 -9.17 2.834
SFUN.N 搜房网 纽约证券交易所 1.71 -9.52 28.575
RENN.N 人人网 纽约证券交易所 1.61 -9.55 14.18

Query:新浪和人人网的周涨跌幅分别是多少?

SQL: SELECT 周涨跌幅 FROM 表_1-1 WHERE 名称=‘新浪’ OR 名称=‘人人网’

用户输入一句普通文本,模型将其转换为 SQL,查询数据库得到结果:"-4.52, -9.55"

当然实际场景或业务中,需要查询的内容可能更加复杂(例如涉及跨表、嵌套查询,group by/having 等查询条件等)。

SQL组成

SQL组成来自三部分:数据库中元素(表名、列名)、问题中的词汇SQL关键字

已有数据集

现有Text2SQL数据集List:

nl2sql实际应用demo

1.WikiSQL

WikiSQL 标注数据集 适合入门数据集

WikiSQL是一个大型的语义解析数据集,由80,654个自然语句表述和24,241张表格的sql标注构成。
WikiSQL中每一个问句的查询范围仅限于同一张表,不包含排序、分组、子查询等复杂操作。
虽然数据规模大,SQL语法却非常简单;适合做NL2SQL任务入门。

2.Spider

Spider 难度最大数据集

耶鲁大学在2018年新提出的一个大规模的NL2SQL(Text-to-SQL)数据集。
该数据集包含了10,181条自然语言问句、分布在200个独立数据库中的5,693条SQL,内容覆盖了138个不同的领域。
涉及的SQL语法最全面,是目前难度最大的NL2SQL数据集。

3.CSpider

Cspider 中文Spider

CSpider是Spider的中文版,西湖大学出品。对该任务感兴趣的同学可以尝试去链接中对应的榜单刷榜,目前只有2个team提交。
美中不足的是,数据集只是翻译了Spider的question部分,表格列名等仍是英文,需要额外处理对齐。
数据集已完整打包在data目录下。

4.WikitableQuestion

3.WikitableQuestion 表格问答

WikitableQuestion是斯坦福自然语言处理小组的工作。数据集中每个问题都带有来自Wikipedia的表格。给定问题和表格,任务是根据表格回答问题。
数据集包含来自各种主题的2,108个表和具有不同复杂性的22,033个问题

5.天池NL2SQL中文挑战赛数据集

NL2SQL天池大赛 中文NL2SQL数据集

2020年之前公开的Text2SQL数据集中唯一一份高质量的中文数据集,由比赛主办方追一科技提供。数据集使用金融以及通用领域的表格数据作为数据源,提供在此基础上人工标注的自然语言和SQL语句的匹配对。
一共包含49,867条有标注的训练集数据,10,000条无标注数据作为测试集

6.DuSQL中文数据集

2020语言与智能技术竞赛:语义解析任务 难度接近Spider的中文数据集

2020语言与智能技术竞速提供的大规模开放领域的复杂中文Text-to-SQL数据集,语法覆盖了 "order by","group by","having","嵌套SQL","join" 等几乎所有SQL语法。
包含18602训练集,2039开发集和4868测试集

7.Sparc

Sparc 多轮交互Text2SQL

耶鲁大学在2019年提出的基于对话的Text-to-SQL数据集。
SParC是一个跨域上下文语义分析的数据集,是Spider任务的上下文交互版本。SParC由4298个对话(12k+个单独的问题,每个对话平均4-5个子问题,由14个耶鲁学生标注)组成,这些问题通过用户与138个领域的200个复杂数据库进行交互获得。

8.CoSQL

CoSQL 多轮交互Text2SQL

耶鲁大学在2019年提出的基于对话的Text-to-SQL数据集。
内容和Sparc相似,但是S标注风格略有不同,例如数据集中SQL各关键字的分布差异较大。

持续更新中....

比赛排名

截止2020年10月19号,我们实验室(浙江大学DCD实验室)所在的语义解析小组获得了Spider排行榜top2的成绩。

spider-top2

解决方案

1.Spider榜单开源模型

(1)EditSQL:关注跨域上下文依赖的文本到sql生成任务

(2)IRNet:用于复杂和跨域文本到sql的神经网络方法

(3)RAT-SQL:基于关系Attention和抽象语法树的端到端SQL生成模型

2.NL2SQL中文挑战赛方案

(1)基于Bert的NL2SQL模型:一个简明的Baseline

​ 追一科技苏剑林同学分享的baseline,强烈推荐还不熟悉nl2sql任务的同学阅读!

​ 博客比较详细的介绍了数据集、baseline通用模型方案和trick

(2)追一科技-baseline

(3)首届中文NL2SQL挑战赛决赛第3名方案+代码

(4)首届中文NL2SQL挑战赛复赛第6名开源

Tips: 可能因为版权问题,NL2SQL中文挑战赛数据集已经停止对外公开。有需要的同学可以联系我或者比赛主办方索要竞赛数据!

3.基于NL和SQL的预训练语言模型

(1)TaBERT:联合理解文本和表格数据的预训练

(2)GRAPPA:用于表格语义解析的语法增强的预训练

落地应用

“在创业阶段,比技术更重要的是寻找落地场景。”——何帆《变量》

一项技术无论新旧,无论多么酷炫,如果不能落地转变为产品,总是有很大的缺失。

针对Text2SQL,可能的落地应用

  • 数据库查询系统

    不用学习SQL,直接通过自然表达与数据库交互,得到想要结果。例如企业数据库报表查询

  • 问答系统/问答机器人

    真实应用案例:浙江xxx公安局破案机器人项目(接触的实习项目)

    具体demo可以查看下方图片。其中question表示自然语言问句,sql_str表示模型预测、拼接的sql语句,sql_json是json格式的sql语句,方便和下游任务对齐。

    nl2sql实际应用demo

  • 内容编码

参考论文

1.《Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions》
EditSQL 模型

2.《Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation》
IRNet 模型,Spider 数据集目前已经开源的 SOTA 模型

3.《X-SQL: reinforce schema representation with context》
X-SQL 模型

4.《Memory Augmented Policy Optimization for Program Synthesis and Semantic Parsing》
MAPO:用于程序综合和语义分析的内存增强策略优化

5.《SEQ2SQL- GENERATING STRUCTURED QUERIES FROM NATURAL LANGUAGE USING REINFORCEMENT LEARNING》
SEQ2SQL:使用强化学习从自然语言生成结构化查询

6.《SEQ2SQL: GENERATING STRUCTURED QUERIES FROM NATURAL LANGUAGE USING REINFORCEMENT
LEARNING》
WikiSQL 数据集和任务介绍

7.《RAT-SQL: Relation-Aware Schema Encoding and Linking for Text-to-SQL Parsers》
Spider Top1 方案模型,基于关系型Attention的模型RAT-SQL

8.《GRAPPA: Grammar-Augmented Pre-Training for Table Semantic Parsing》
用于表格语义解析的语法增强的预训练

9.《TABERT: Pretraining for Joint Understanding of Textual and Tabular Data》
联合理解文本和表格数据的预训练

详见 paper 目录

参考资料

1.NL2SQL 这个领域研究进展如何

2.首届中文NL2SQL挑战赛冠军比赛攻略_不上90不改名字(pdf)

3.百度NLP:语义解析 (Text-to-SQL) 技术研究及应用

4.”林俊杰新签约了哪家公司?"让Text2SQL模型自动帮你回答! (A Survey)