”想知道你家爱豆最近的演唱会?"让Text2SQL模型自动帮你回答!

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
NLP 自学习平台,3个模型定制额度 1个月
简介: ”想知道你家爱豆最近的演唱会?"让Text2SQL模型自动帮你回答!

Text2SQL,是自然语言处理语义解析领域的子任务,核心目标是打破人与结构化数据之间的壁垒,让普通用户可以通过自然语言描述完成复杂数据库的查询工作,得到想要的结果。


例如有如下表格,用户根据表格提问:

“周杰伦和林俊杰最近的演唱会是什么时候?”

Text2SQL模型自动将问题转换为可执行的SQL语言:


SELECT 近期演唱会 FROM singer WHERE 姓名 = 周杰伦 OR 姓名 = 林俊杰”

并返回查询结果:“北京-01.08”和“上海-04.28”。


姓名 年龄 国籍 唱片公司 代表作 近期演唱会
周杰伦 41 中国 杰威尔音乐 七里香、枫 北京-01.08
林俊杰 39 新加坡 JFJ Productions 江南、小酒窝 上海-04.28
赵雷 34 中国 独立唱作人 成都、南方姑娘 成都-02.05
崔健 59 中国 索尼中国 一无所有 北京-06.06
Austin Mahone 24 美国 Chase Send it 纽约-07.12
Taylor Swift 31 美国 环球唱片 Love Story 纽约-10.05


Text2SQL是笔者在硕士期间主要的研究方向之一,本文是对该方向的综述,将尽可能完整地介绍Text2SQL各方面内容。相信阅读本文后,即使第一次听说Text2SQL的读者也能对它有一个清晰的认识,甚至产生兴趣。


本文将从以下几个章节介绍Text2SQL。


1、背景
2、数据集
3、热门榜单
4、解决方案
5、应用方向
6、资料包(https://github.com/yechens/NL2SQL)


一、背景



如文章开篇所述,数据库中往往蕴含了大量有价值的信息,以往用户想要查询数据库需要先学习结构化查询语言SQL。SQL是一种强大又灵活的编程语言,普通用户学习SQL有一定的技术门槛,而且对于一些复杂的查询条件(如嵌套、跨表等),手工编写SQL很容易出错。


如果能够通过机器学习、深度学习等技术,将我们想要查询的目标从自然语言(NL)直接“翻译”成SQL,可以显著降低技术门槛,同时又提升数据库的查询效率。

鉴于此,学术界在上世纪末提出了语义解析新分支——Text to SQL(Text2SQL)。相比于文本分类、实体识别等NLP浅层任务,Text2SQL难度更高涉及的技术面更广。


二、数据集



关于Text2SQL任务,经过多年研究国内外的专家学者们提出了众多数据集。总的来看,数据集经历了从单领域/单轮、跨领域/单轮、最终到跨领域/多轮的发展历程,难度逐级提升。



Text2SQL数据集

最早期的数据集例如ATIS、GeoQuery等出现在20世纪90年代,任务内容是针对单领域、单表、单轮的自然语言(NL)到SQL的转换工作。数据集规模较小,场景单一应用十分有限。


直至2017年出现了第一份大规模手工标注数据集WikiSQL,包含80,657个query-SQL对和26,521个数据库。WikiSQL的局限性在于每一个问题只关联一张表格,而且涉及的SQL语法十分有限,仅包含“>, <, ==, !=”操作,同时每一个query基本只有1个查询条件。

总的来说,WikiSQL任务相对简单,是最适合入门的数据集


2019年追一科技发布了第一份中文Text2SQL数据集TableQA,相比WikiSQL增加了查询条件数量(0-4个),人工翻译的query有一定的语义泛化性,例如可能存在实体省略现象。


另一份代表性数据集是耶鲁大学2018年公开的跨领域复杂SQL解析数据集Spider,刷新了该方向的任务难度。主要体现在:(1)涵盖了几乎所有的SQL语法,例如“ORDER BY”,“HAVING”,“JOIN”,“INTERSECT”等;(2)同一个query可能和多张table关联,跨表查询十分普遍;(3)train、dev、test中的数据库均来自不同领域,对模型的泛化性提出了挑战。


以上数据集还只涉及单轮对话。紧接着2019年,耶鲁大学继续发布了2个跨领域多轮对话版本的Text2SQL数据集SparcCoSQL。每一轮对话平均有4-5个子问题组成,第i个问题需要考虑0~i-1轮对话的上下文信息,任务难度再次提升。


三、热门榜单



随着数据集的公布,国内外的科研机构和大厂也发布了一些有意思的榜单供大家刷榜。比较知名的如追一科技在阿里天池举办的首届中文NL2SQL挑战赛(已结束),榜单第一的国防科大团队取得了0.92的SQL完全匹配准确率。



NL2SQL中文挑战赛

百度在今年上半年基于DuSQL数据集同样举办了中文SQL解析比赛(已结束),虽然难度很高(对齐Spider),榜首成绩仍然超过了0.76。



DuSQL

业内认可度最高的比赛是耶鲁大学举办的Text-to-SQL语义解析挑战赛Spider类似于NLP阅读理解领域的SQuAD和CV图像识别领域的ImageNet,Spider同样属于长期开放的榜单,吸引了上交大、浙大、微软研究院、Allen实验室等机构参赛。


由于Spider属于单轮Text2SQL中难度最大的数据集,迄今排行榜第一的SQL准确率只有69.7%。



Spider

财大力大的耶鲁大学还同时发布了和SParcCoSQL同名的公开榜单。多轮Text2SQL任务难度更高,榜单上的队伍数量至今还比较少。但“多轮”有更实际的落地价值,未来可能是人机交互系统的重要组成部分,相信今后会有更多的关注与研究热点。



Sparc


CoSQL


四、解决方案



从技术角度考虑,Text2SQL任务的核心目标是「对query和数据库模式进行联合编码,并从编码特征中解析出完整的SQL序列」。其中数据库模式包含表名、列名、列中的单元值以及不同列之间蕴含的关系信息(如主键、外键)等。


如何充分有效编码、解决query和column之间的链接问题、精确解码、实现语义泛化是Text2SQL任务的主要难题。


针对这些特点,本章将从4个角度介绍当前Text2SQL的主流解决方案。


4.1 端到端的Multi-task架构


对于简单类型的Text2SQL数据集,例如WikiSQL、TableQA等,共享编码器+多任务解码是一种比较有效可控的神经网络方法。


其中共享编码器部分一般是使用词向量或语言模型对query、table和column进行联合编码,例如将输入序列拼接为“[CLS] query [SEP] column1 [SEP] column2 [SEP] .... [SEP]”这样的长序列。


解码器部分根据SQL语言的组成特点设计不同的子网络分别解码。



TableQA排名第一的模型M-SQL[6],将SQL序列拆分为上图所示的8个子片段,在解码器中设计了8个神经网络分别解码对应片段的输出,最后通过简单的规则拼接为完整的SQL。


M-SQL模型结构

Multi-task的优点在于针对不同片段可以设计有效的损失函数,在训练过程中各个子任务的准确率可以实时监控


再结合一些人工规则,能够生成高质量的SQL,便于在实际中落地。在IEEE上发表的M-SQL各个子任务的准确率都超过了90%,总体准确率超过92%。


对此方法感兴趣的读者可以进一步阅读X-SQL[3]、M-SQL[6]模型的原论文。


4.2 抽象语法树SQL解码


这种方法将SQL结构视作一棵抽象语法树(AST),树中的各个结点是SQL的关键字(SELECT、WHERE、COUNT、AND...)或者table和column的候选值。生成SQL的过程相当于从树的root结点对语法树做一次DST搜索。


Abstract Syntax Tree

以开始节点“SELECT”为例。“SELECT”节点往下可能包含3个叶子节点:


“Column”、“AGG”、“Distinct”,分别代表“选取某一列”、“在列前增加聚合操作”、“对列进行去重操作”。


从“SELECT”节点向下搜索相当于是一个3分类任务,根据真实路径和搜索路径依次计算各个节点的交叉熵并求和,作为总损失。


抽象语法树的思想避免了设计各种各样的子网络,对于涉及跨表查询、嵌套查询的复杂数据集有很好的效果。Spider排行榜排名靠前的RAT-SQL、IRNet等模型都借鉴了该思想。

至于编码器部分,可以单独优化或直接使用4.1节介绍的方法。


当然,AST的应用远不止于此。除了解析SQL,AST还可以生成各种各样的目标序列,例如Text2Java、Text2Python甚至Text2note(音符)等等。


具体可以参考CMU的这篇论文:“A Syntactic Neural Model for General-Purpose Code Generation”。论文中作者从文本生成了对应的Python语言。


4.3 训练文本和表格联合编码的预训练语言模型


本节的思路是针对模型的编码器部分进行改进。


将预训练语言模型应用于各种NLP下游任务已经是一种通用的方法。但是以往的语言模型如BERT、ERNIE等一般是在通用的文本场景中使用MLM等任务训练得到,和下游基于表格和文本的Text2SQL任务场景明显不一致。


为了获得具有文本和表格联合编码能力的语言模型,耶鲁大学的Yu等人[5]提出了一种适用于表格语义解析的语法增强预训练方法。


论文的核心思想是先用语法规则得到一批人工合成的query-SQL语料,然后基于此(主要针对query、column)设计了新的训练目标:MLM、SSP。具体内容可以参考引用[5]。



最终训练得到的语言模型GRAPPA可以捕捉text和table之间的关联信息,获得更好的初始化表示。同时,这种训练方式得到的新模型可以直接替换已有Text2SQL模型中的BERT/word2vec编码器。


论文实验证明了GRAPPA方法的有效性。最终,GRAPPA+RAT-SQL组合获得了Spider榜单第一(69.7%)。


4.4 从强化学习角度考虑Text2SQL


2019年初Google大脑的研究员提出了一种基于弱监督的强化学习Text2SQL解决方案:MAPO。模型的输入部分由query、table、SQL执行结果组成,不存在真实的有标注SQL语句。由于只包含SQL执行结果,相比于标注的SQL序列信息量很低,是一种弱监督的学习方法。


强化学习使用回报函数对模型生成的SQL语句进行评估,如果生成SQL的执行结果和真实结果相同,表明模型预测正确获得“1分”,否则判为错误“得0分”。这种反馈方式和MAPO关于标注SQL语句不存在的假设非常匹配。


强化学习中其他的必备要素,如生成SQL的决策网络,作者采用了基于语法的神经网络神经符号机(neural symbolic machine)。Action部分,作者使用预测SQL的逻辑形式;对应环境是数据库引擎。


为了加速模型收敛,作者在论文中还使用了非常多的技巧,例如将高得分的样本保存在内存中多次采样避免遗忘,以帮助模型更好地学习。


强化学习和Text2SQL任务如何有效结合还是一个很新颖的课题,MAPO虽然在WikiSQL上的准确率不高,却提供了一种可能的思路。


五、应用方向



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

一项技术无论新旧,无论多么酷炫,如果不能落地转变为产品或为产品赋能,是没有意义的。


结合自身的实际经历,笔者抛砖引玉,总结了几种Text2SQL技术比较有价值的应用场景:


(1)数据库查询系统

企业中往往包含了众多结构化的表格。如果引入Text2SQL技术,普通的业务或财务人员不需要学习SQL,就可以直接通过自然语言与数据库交互,得到想要的结果。例如企业数据库报表查询系统。


(2)问答系统/问答机器人

Text2SQL作为问答系统的重要模块之一,在涉及结构化表格场景发挥重要作用。例如,下图是笔者实习时接触到的公安局破案机器人真实案例,通过我们的系统可以将民警的提问端到端转换为SQL,并自动查询结果。



(3)数据信息增强


给定一个搜索目标或实体,我们可以通过Text2SQL方法从海量数据库中得到实体相关联的信息,丰富实体内容。

相关文章
|
SQL 存储 数据挖掘
Quick BI 的模型设计与生成SQL原理剖析
本文介绍Quick BI如何进行维度建模,基于维度模型如何来自动化的生成分析查询的SQL语句,从而使数据分析变得更容易。
3022 0
|
SQL 存储 OLAP
如何基于维度模型自动化生成SQL语句
众所周知数据分析的核心是数据,为了更容易的分析数据,数据模型的设计需要遵循一定的规范。当前最流行的联机分析处理(OLAP)的规范为维度建模规范。本文介绍Quick BI如何进行维度建模,基于维度模型如何来自动化的生成分析查询的SQL语句,从而使数据分析变得更容易。
2502 0
|
4月前
|
机器学习/深度学习 SQL 数据采集
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
40 0
|
4月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
88 0
|
4月前
|
SQL 存储 NoSQL
数据模型与应用场景对比:SQL vs NoSQL
【8月更文第24天】随着大数据时代的到来,数据存储技术也在不断演进和发展。传统的SQL(Structured Query Language)数据库和新兴的NoSQL(Not Only SQL)数据库各有优势,在不同的应用场景中发挥着重要作用。本文将从数据模型的角度出发,对比分析SQL和NoSQL数据库的特点,并通过具体的代码示例来说明它们各自适用的场景。
123 0
|
6月前
|
SQL 存储 数据建模
SQL 语言:对象关系数据模型
SQL 语言:对象关系数据模型
52 3
|
7月前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
7月前
|
SQL 存储 开发工具
vanna+qwen实现私有模型的SQL转换
本文档介绍了如何在本地部署Vanna服务以使用Qwen模型进行text2sql转换。首先,通过`snapshot_download`下载Qwen-7B-Chat模型,并安装相关依赖。接着,修改`openai_api.py`设置本地LLM服务接口。然后,安装并配置Vanna Flask服务,包括自定义LLM服务、连接数据库以及修改端口。为了解决内网访问问题,使用ngrok或natapp进行内网穿透,提供公网访问。最后,处理了chromadb包中自动下载资源的问题,以防网络不佳导致的失败。通过这些步骤,实现了使用本地Qwen模型的Vanna服务。
5186 1
|
流计算
Flink CDC-sql怎样导数据使starrocks支持主键模型delete的配置吗?目前只能更新和插入,但是删除不行
Flink CDC-sql怎样导数据使starrocks支持主键模型delete的配置吗?目前只能更新和插入,但是删除不行
250 1