百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践

编者按:NL2SQL是语义剖析和智能问答领域的前沿课题,可以将人类的自然语言问句转化为结构化盘问语句,是实现人类和数据库无缝交互和提高数据库分析效率的核心手艺。百分点认知智能实验室自成立以来,结合公司

编者按:NL2SQL是语义剖析和智能问答领域的前沿课题,可以将人类的自然语言问句转化为结构化盘问语句,是实现人类和数据库无缝交互和提高数据库分析效率的核心手艺。百分点认知智能实验室自成立以来,结合公司实际业务和项目需求,自主研发NL2SQL算法,并在各个公开数据集上取得了良好的效果,同时还在业务项目中积累了宝贵的实际落地经验,本文主要就NL2SQL手艺路线的发展历史和实验室在工程实践中的落地经验从事分享。本文作者:易显维、宁星星、镇诗奇、苏海波一、NL2SQL课题描述以往通过SQL盘问业务数据或做数据分析时,一般要经历以下几个步骤:总结要盘问数据的需求;后端工程师编写SQL并部署成服务和数据库连接;前端工程师编写该SQL盘问对应的界面;运维工程师上线服务;业务数据分析人员和用户登录页面执行盘问语句显示数据。例如,下图中对一个表格从事盘问,针对该需求需要写成一条SQL语句才能在数据库中执行并得到答案。百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践Spider数据集中自然语言课题和对应的SQL那么,如何能够减少数据分析和盘问时的工作量,最好是让用户只通过一个搜索框,输出盘问语句,通过自然语言处理手艺将输出转化为SQL,直接执行并显示答案,这就是NL2SQL要解决的课题,详见下图。百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践从上图可以看出,我们将以前研发SQL盘问新需求的工作效率极大地提高了,并且很多非IT人士也能通过自然语言交互界面便捷快速地和数据库交互,业务流程速度大为提高。二、NL2SQL数据集研究任何一个机器学习算法课题都需要该领域的数据集,在此我们列举了NL2SQL中经常使用到的几个数据集。根据数据集中SQL涉及到的数据库表的个数不同,分为单表和多表;根据所天生的SQL结构中是否含有嵌套盘问,将数据集分类为有嵌套和无嵌套。1. 单表无嵌套数据集ATIS&GeoQuery数据集:ATIS来源于机票订阅系统,由用户提问天生SQL语句,是一个单一领域且上下文相关的数据集。GeoQuery来源于美国的地理,包括880条的提问与SQL语句,是一个单一领域且上下文无关的数据集。WikiSQL数据集:ATIS和GeoQuery这两个数据集存在着数据规模小(SQL不足千句),标注简单等课题。于是,2017年VictorZhong等研究人员鉴于维基百科,标注了80654的训练数据,涵盖了26521个数据库,取名为WikiSQL。这个大型数据集一经推出,便引起学术界的广泛关注,因为它对模型的设计提出了新的挑战,需要模型更好地建构Text和SQL之间的映射关系,更好地利用表格中的属性,更加关注解码的过程。在后续工作中产生了一系列优秀的模型,如Seq2SQL、SQLNet、TypeSQL等,我们将在主流工作一章从事详细的介绍。项目链接:https://github.com/salesforce/WikiSQL。2. 多表嵌套数据集Spider数据集:由于WikiSQL数据集也存在着课题,它的每个课题只涉及一个表格,而且仅支持比较简单的SQL操作,这不是很符合日常生活中的场景。现实生活中存在着医疗、票务、学校、交通等各个领域的数据库,而且每个数据库又有数十甚至上百个表格,表格之间又有着复杂的主外键联系。于是,2018年耶鲁大学的研究人员推出了Spider数据集,这也是目前最复杂的Text-to-SQL数据集。它有以下几个特点:(1)领域比较丰富,拥有来自138个领域的200多个数据库,每个数据库平均对应5.1个表格,并且训练集、测试集中出现的数据库不重合。(2)SQL语句更为复杂,包含orderBy、union、except、groupBy、intersect、limit、having 关键字,以及嵌套盘问等。研究人员根据SQL语句的复杂程度(关键字个数、嵌套程度)分为了4种难度,值得注意的是,WikiSQL在这个划分下只有EASY难度。Spider相比WikiSQL,对模型的跨领域、天生复杂SQL的能力提出了新的要求,目前的最佳模型也只有60%左右的准确度。挑战赛链接:https://yale-lily.github.io/spider。中文CSpider数据集:西湖大学在EMNLP2019上提出了一个中文Text-to-SQL的数据集CSpider,主要是选择Spider作为源数据集从事了课题的翻译,并利用SyntaxSQLNet作为基线系统从事了测试,同时探索了在中文上产生的一些额外的挑战,包括中文课题对英文数据库的对应课题(Question-to-DBmapping)、中文的分词课题以及一些其他的语言现象。挑战赛链接:https://taolusi.github.io/CSpider-explorer/。3. 竞赛数据集在国内,关于NL2SQL的角逐已举办过多次,其中规模较大的两次分别为追一科技的“首届中文NL2SQL挑战赛”和百度的“2020语言与智能手艺竞赛:语义剖析使命”。其中,追一角逐数据集为单表无嵌套NL2SQL数据集,数据形式较为简单,每一条SQL只有求最大值、最小值、平均值、求和、计数和条件过滤语法现象,无聚合函数,所以排行榜得分较高,算法实现较为容易。百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践追一角逐官网截图百度数据集为多表含有嵌套SQL数据集,数据形式较为复杂,更贴近真实用户和工业落地场景。百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践百度角逐截图三、主要手艺路线目前关于NL2SQL手艺路线的发展主要包含以下几种:Seq2Seq办法,在深度学习的研究背景下,很多研究人员将Text-to-SQL看作一个类似神经机器翻译的使命,主要采取Seq2Seq的模型框架。基线模型Seq2Seq在加入Attention、Copying等机制后,能够在ATIS、GeoQuery数据集上达到84%的精确立室,但是在WikiSQL数据集上只能达到23.3%的精确立室,37.0%的执行正确率;在Spider数据集上则只能达到5~6%的精确立室。模板槽位填充办法,将SQL的天生过程分为多个子使命,每一个子使命负责预测一种语法现象中的列,该办法对于单表无嵌套效果好,并且天生的SQL可以保证语法正确,缺点是只能建模固定的SQL语法模板,对于有嵌套的SQL情况,无法对所有嵌套现象从事灵活处理。中间表达办法,该办法为当前主流办法,以IRNet为代表,将SQL天生分为两步,第一步预测SQL语法骨干结构,第二步对前面的预测结果做列和值的补充。在后续的文章中将围绕此办法展开讲述我们的实践经验。结合图网络的办法,此办法主要为解决多个表中有同名的列的时候,预测不准确的课题,以Global-GNN、RatSQL为代表,但是由于数据库之间并没有边相连接,所以此办法提升不大且模型消耗算力较大。强化学习办法,此办法以Seq2SQL为代表,每一步计算当前决策天生的SQL是否正确,本质上强化学习是鉴于交互产生的训练数据集的有监督学习,此法效果和翻译模型相似。结合预训练模型、语义立室的办法,该办法以表格内容作为预训练语料,结合语义立室使命目标输出数据库Schema,从而选中需要的列,例如:BREIDGE、GRAPPA等。1. X-SQL办法本节主要介绍X-SQL的办法,此办法为当前模板填充法的代表,将单表的NL2SQL使命转化为多个子使命,每一个子使命负责预测一个语法现象中存在的列和对列的操作,将NL2SQL使命转化为一个在列上的分类使命。模型结构如图所示:百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践X-SQL网络结构上图中的模型分为编码器、上下文强化层、输出层。编码器来自改良的BERT–MT-DNN,其数据输出形式为自然语言课题和各列的名称,自然语言课题和列名之间用BERT中的特殊token [SEP]隔开,并且在每一列的开始位置使用不同的token表示不同的数据类型。编码器还把[CLS] token换成了[CTX] token。上下文巩固层是将每个列的输出向量合并到[CTX]位置的输出向量中得到一个列向量。输出层有六个子使命分别是:W-NUM(条件个数),W-COL(条件对应列,column_index),W-OP(条件运算符,operator_index),W-VAL(条件目标值,condition),S-COL(盘问目标列,sel),S-AGG(盘问聚合操作,agg)。由于在工程实践中目标数据库的列较多,SQL选中的列相对数据库存在的列的比例较少,例如一个一百列的数据库可能SQL选中其中一列,因此造成标记数据稀疏的课题,需要先从事列名的相关性排序或者人工在程序中从事重采样来解决。2. IRNet办法IRNet设计了一种在自然语言和SQL之间的中间表达SemQL,采用两步完成Text-to-SQL的过程:第一步SchemaEncoding和Schema Linking:SchemaEncoding顾名思义就是对表结构(表名、列名、列类型、主键、外键等等)从事编码,以便后续模型训练使用。SchemaLinking则是要把Question中表述的内容与具体的表名和列名对齐。第二步预测SemQL,然后用第一步预测的列来填充SemQL所表示的SQL语法结构。文中设计的中间表达SemQL结构如下:百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践SemQL结构图SQL根据文中设定的规则可以拆解为如下图的语法树:百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践IRNet中SemQL的语法树Z是根节点,R表示一个SQL单句,上图的”Select Filter“表示当前的SQL中包含有SELECT和WHERE两个SQL关键词。树中的每一个中间节点表示该SQL含有某一个SQL中的语法现象。其中的C、T分别代表该SQL盘问到的列和表。最终通过第一步Schema Encoding和Schema Linking中的结果将该树补全则成为一条完整的SQL语句。3. BRIDGE办法考虑到课题和Schema之间的表达是有关联和差距的,BRIDGE办法设计了一种桥接手段,通过课题和Schema中的值模糊立室,丰富模型的输出。具体地,将命中的值拼接到所属列名的后面,用来表示该列名与课题之间较可能存在关联,相当于从值的层面告诉模型该课题应该重点关注哪几个列。最后,输出经过BERT+Bi-LSTM得到列的语义表示。BRIDGE模型架构如下图所示:百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践四、算法大赛实践分享以国家电网调控人工智能创新大赛为例1. 角逐赛题及背景电网调控系统经多年运行汇集了海量的电网运行数据,存储于数据库或文件系统中,呈现出规模大、种类多、范围广等特点,对于这类数据的获取和分析通常需要通过机器编程语言与数据库(或文件系统)从事交互操作,给数据分析带来了较高的门槛。数据挖掘深度不够、数据增值变现能力弱等课题也逐渐显现。亟需通过人工智能手艺手段,实现人机交互方式变革,提高数据分析挖掘效率,激活数据价值,促进数据价值变现。针对电网调控系统数据以结构化、半结构化形式存储特点以及海量数据分析繁琐低效的课题,要求参赛者利用语义剖析手艺训练AI智能体,理解调控系统常见课题,剖析数据库的表、属性、外键等复杂关系,最终天生SQL语句并在数据库中执行获得课题答案,为用户提供自动、高效、精准的信息检索服务。2. 赛题理解和分析本赛题属于语义剖析领域,即将自然语言转换为逻辑形式的使命,它被认为是从自然语言到语义表征的映射,它可以在各种环境中执行,以便通过将自然语言剖析成数据库盘问,或在会话代理(如Siri和Alexa)中从事盘问剖析来实现,诸如机器人导航、数据探索分析等使命。语义剖析手艺发展至今,已经有诸多相关的解决方案和学术研究,例如,鉴于模板填充的剖析手艺、鉴于Seq2Seq的语义剖析手艺、鉴于强化学习的语义剖析手艺等等。本次《电网运行信息智能检索》赛题要求是“给定自然语言表述的电网调控课题及其对应的数据库,要求参评的语义剖析系统自动天生SQL盘问语句。”分析数据集得知,角逐数据集来自电网调控领域真实语料,包含46张表以及对应的1720条调控场景课题-SQL语句对,涉及公共数据、电力一次设备、自动化设备等多个数据对象;收集调控领域常用盘问课题并转写为SQL语句,包含了同一类课题的不同问法等多种情况。3. 手艺路线由于本赛题涉及数据资源属于单一数据库类型,数据并不存在跨领域课题,SQL表达具有较好的一致性,因此适用于鉴于Seq2Seq的翻译模型来完成使命。根据数据集“单一数据库”、“较多连表盘问”、“表列数目较大”等特点,我们设计了鉴于Transformer的融合表列值信息的Seq2Seq语义剖析模型,我们以Transformer作为基础特征提取单元,构建一个融合表、列、值多元信息的Encoder-Decoder架构来完成端到端的NL2SQL使命。算法流程图如下:百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践算法流程描述:如图所示,首先由于数据量的限制,我们需要对数据从事合理的增广,通过对原始自然问句从事分词,通过列名替换、停用词替换和句式替换等办法得到新的问句-SQL盘问对。同时,采用AEDA的噪音巩固手艺,参杂一定比例的噪音样本巩固模型鲁棒性。由于SQL语句对大小写不敏感,所以我们统一将SQL语句转化为小写字符。比较关键的一步是,如何将Schema信息与自然语言问句从事交互,我们采用鉴于模糊立室的办法,根据不同的自然语言问句动态天生相应的Schema信息与原自然语言问句从事拼接。对于扩充后的数据集,我们采用鉴于Transformer架构的天生式预训练Text2Text模型,从事端到端的Finetune。在测试时,同样地,我们对测试样本动态天生Schema拼接信息,完成端到端推理预测,得到SQL语句。算法的关键环节如下:自然语言问句AEDA数据巩固;输出文本与输出文本保持大小写统一;对每一个自然语言问句使用动态Schema信息天生手艺,从事额外的信息拼接;对于绝大部分SQL语句从事Greedy Decoding,部分较长SQL盘问采用Top-p  Sampling或BeamSearch Decoding。接下来,我们对本次角逐中有较多贡献的AEDA数据巩固手艺和动态Schema信息天生手艺从事详细阐述。本次数据集的规模相较于真实用户场景的数据规模而言是非常小的。数据巩固手艺的使用不可避免。怎样去使用数据巩固手艺,使用哪一种数据巩固手艺,对于模型的影响都是举足轻重的。2019年的EDA(Easy Data Augmentation Techniques forBoosting Performance on Text Classification Tasks)论文发表于ICLR2019,提出了四种简单的数据巩固操作,包括:同义词替换(通过同义词表将句子中的词语从事同义词替换)、随机交换(随机交换句子的两个词语,改变语序)、随机插入(在原始句子中随机插入,句子中某一个词的同义词)和随机删除(随机删除句子中的词语)。本次角逐中应用的AEDA(An Easier Data Augmentation),是一种简单的用于天生噪音文本的数据巩固手艺。最开始被用于提升文本分类的鲁棒性,主要是在原始文本中随机插入一些标点符号,属于增加噪声的一种,主要与EDA论文对标,突出“简单”二字。传统EDA办法,无论是同义词替换,还是随机替换、随机插入、随机删除,都改变了原始文本的序列信息,而AEDA办法,只是插入标点符号,对于原始数据的序列信息修改不明显。而在NL2SQL的EDA过程中,我们显然是不希望原始问句语义被篡改,因此,在数据量较小的场景下,AEDA的巩固手艺能够较好地完成巩固NL2SQL语义剖析模型的鲁棒性提升使命。接下来将介绍本次角逐的另一个关键点——动态Schema信息天生手艺。对于NL2SQL使命,如何将输出的自然语言问句与数据库中的存储信息从事连接,十分关键,我们称之为Schema Linking环节。对于百分点科技此次角逐使用的End2End翻译模型而言,传统的Schema Linking手艺并不适用。因而我们采用了一种鉴于字符串立室的动态Schemainformation天生手艺,对模型的输出从事动态巩固,从而达到翻译过程中的Schema Linking目的。首先,为了将自然语言问句与数据库的Schema从事关联,需要将数据库中的表名和列名从事规范化(例如对不合理命名、歧义命名、英文命名等,根据业务从事重新梳理规整)。然后,对于所有的规范化后的表名和列名,我们通过模糊立室的方式对其与自然语言问句从事相似度评分,并依据评分从大到小从事表列名的字符串拼接,形式如下:“{Table name1:Column1| Column2 | …} | {…}…”这里我们将不同表的信息用“{}”从事聚合,然后通过“|”分隔,同一张表内的不同列之间通过“|”分隔,无论是表间信息的排序还是表内信息的排序,都是依据字符串模糊立室得分来从事。在对每一个自然语言问句模型输出前,均从事这样的动态Schema 信息天生,然后拼接到原始自然语言问句中,作为模型新的输出。这里由于拼接信息可能会超过512字符(传统BERT模型的限制),于是我们采用鉴于更长距离建模特征的Transformer-XL来替代原始Transformer模块,来完成长序列的建模。同样的,我们的动态Schema天生手艺,亦可用于DB Content的信息拼接,思路大同小异。总结一下,算法的创新点如下:End-to-End方式解决NL2SQL使命,执行效率高,无子模型pipeline误差传递;AEDA数据巩固手艺,简单直接的文本巩固手艺,可以天生带噪音的自然语言问句样本;动态融合Schema信息和DBContent信息,构建简单合理的Schema Linking机制,使得自然语言问句与数据库中的目标表和列联系更加紧密。5. 角逐成绩在该角逐中,百分点科技参赛团队名称是“语义剖析”队,我们的方案在初赛中的精准立室率是0.8228,获得了第三名成绩;在决赛中的精准立室率是0.6554,获得了第五名的成绩。五、工程实践经验本节以某地方空天院的NL2SQL项目简单介绍我们工程实施中的方案,经过上文中介绍的手艺路线,我们对比了两种主流手艺路线中的优劣势:鉴于模板填充的办法:优势在于计算资源依赖少、SQL天生效率高、可控性强、SQL组件顺序不敏感;劣势在于复杂SQL天生乏力,子模型累积误差;鉴于Seq2Seq的办法:优势在于可天生任意形态SQL;劣势在于资源依赖高、SQL天生效率低、可控性一般、SQL组件顺序敏感。其中可控性指的是模型产生的SQL语句是否符合SQL语法规范能够正确执行,SQL顺序敏感指的是在SQL的过滤条件中列的前后顺序并不影响SQL的正确性。和前面介绍的百度和国家电网NL2SQL竞赛不同,工业应用对于可控性的要求比较高,同时涉及到的数据形式会更复杂,采用Seq2Seq模型天生的SQL语句无法保证其语法规范性,同时也无法针对具体的领域数据从事定向优化。而简单的“模版填充法”虽然可以实现定向优化,但是无法解决复杂的嵌套表达形式。为了能够更好地扬长避短,结合两种主流方案的优势,我们提出了以下的算法工程方案:SQL结构预测:将自然语言问句和表结构到最终天生的SQL中出现的语法现象编码(子盘问、分组等),通过bert-sequence建模;列识别模型:预测SQL中Select部分存在的列和列上执行的操作(聚合函数等);值识别模型:预测SQL中where部分中对应的判断符号(大于、小于、等于)。整体模型流程如下:百分点认知智能实验室:鉴于NL2SQL的问答手艺和实践在该项目中由于课题和需要天生SQL的数据库表格长度较短,所以可以直接从事Schema Linking,并且不会由于选中列的标记数据稀疏导致训练失效的课题,所以我们采用了上面的方案取得了不错的效果。六、总结与展望当前,自然语言处理手艺的发展和预训练模型的大规模应用,使语义剖析中的NL2SQL手艺在真实场景落地成为可能。但是在工业实践中应用仍旧有不少课题尚待解决,主要表现在自然语言建模更多的是使用联结主义的办法,如深度学习,而要天生的SQL语句为形式化语言,人工智能手艺尚且无法完全弥合符号主义和联结主义两种办法之间的鸿沟,这也是NL2SQL手艺所面临的最大挑战。不过随着认知智能手艺的发展,出现了越来越多的办法,相信终有一日NL2SQL等语义剖析课题会被完美解决,实现人机交互的无缝衔接。本文介绍了当前NL2SQL的主流手艺路线,以及百分点认知智能实验室在竞赛和项目中积累的实践经验。后续实验室将继续努力深耕NL2SQL课题,为客户带来更好的手艺解决方案,创造更大的业务价值。参考资料[1] Lin X V ,  R  Socher, Xiong C . Bridging Textual and Tabular Data for Cross-Domain Text-to-SQLSemantic Parsing[C]// Findings of the Association for ComputationalLinguistics: EMNLP 2020. 2020.[2] Yu T ,  Wu C S ,  Lin X V , et al. GraPPa: Grammar-AugmentedPre-Training for Table Semantic Parsing[J]. 2020.[3] Seq2sql: Generating structured queries fromnatural languageusing reinforcement learning (Victor Zhong, Caiming Xiong,Richard Socher.CoRR2017)[4] SQLNet: Generating Structured Queries FromNatural LanguageWithout Reinforcement Learning (Xiaojun Xu, Chang Liu, DawnSong. ICLR2018).[5] Global Reasoning over Database Structures forText-to-SQLParsing (Ben Bogin, Matt Gardner, Jonathan Berant. EMNLP2019).[6] RAT-SQL: Relation-Aware Schema Encoding andLinking forText-to-SQL Parsers (Bailin Wang, Richard Shin, Xiaodong Liu,Oleksandr Polozov,Matthew Richardson. Submitted to ACL2020).[7] Towards Complex Text-to-SQL in Cross-DomainDatabase withIntermediate Representation (Jiaqi Guo, Zecheng Zhan, Yan Gao,Yan Xiao,Jian-Guang Lou, Ting Liu, and Dongmei Zhang. ACL2019).

原创文章,作者:百分点科技,如若转载,请注明出处:https://www.iaiol.com/news/33939

(0)
上一篇 2022年1月11日 上午9:35
下一篇 2022年1月11日 上午9:37

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注