聊天式数据查询的技术方案探讨获奖科研报告_第1页
聊天式数据查询的技术方案探讨获奖科研报告_第2页
聊天式数据查询的技术方案探讨获奖科研报告_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

聊天式数据查询的技术方案探讨获奖科研报告摘要:人工智能领域近年发展十分迅猛,其中自然语言处理(NLP)领域从2016年起进入高速发展期,以BERT为代表的各种新模型层出不穷,解决了文本数据分析和信息提取的问题。其中有一个子领域,即NL2SQL领域,是解决如何用自然语言问句进行数据库查询的问题。具体方案是通过语义解析,将自然语言问句翻译成SQL,再送到数据库中进行查询,大大降低了数据查询的难度,提升了交互友好度和查询效率。本文探讨具体的技术解决方案。

正文

NL2SQL领域目前的数据集英文以WikiSQL和Spider为主,中文有追一科技提供的竞赛数据集。WikiSQL数据集支持单表、单列、多Where子句查询,现有模型可以较好地支持。而耶鲁大学提供的Spider数据集要求支持GroupBy、OrderBy、Having,还需要Join不同表,这更贴近于真实场景,也带来了更大的难度。追一科技的竞赛数据集的难度介于两者之间,要求支持多列查询,支持多Where子句间不同操作符操作。本文以追一科技数据集的难度为准,探讨解决方案。

1.主流模型

目前業内的三大技术解决方案依次是SQLnet,SQLova和X-SQL,其中X-SQL在WikiSQL数据集上测试效果最好,但仍然满足不了追一科技数据集的要求。我们主要参考后两个模型,提出我们的解决方案。

2.方案思路

解决此问题有两大思路,增强学习和解耦任务。增强学习是端到端的解决方案,比较先进,但实际应用尚不成熟,达不到准确率的要求。因此解耦任务的思路成为首选。解耦的思路是将任务拆解为8个子任务,分别是

Select-Number:选择几列

Select-Column:选择哪一列

Select-Aggregation:使用什么聚合函数

Where-Number:有几个条件

Where-Column:筛选条件是针对哪几列

Where-Operator:各个条件的操作符

Where-Value:各个条件的条件值

Where-Operator:各个条件之间的关系。

为了将整体准确度提升到80%以上,需要8个子任务的平均准确度达到97.5%,这对方案提出了非常高的要求。

整体解决方案分为三部分:语义解析模块、执行引导模块和SQL增强模块。以下分别加以说明。

3.语义解析模块

语义解析模块是整个解决方案最重要的部分,共分为三个层次:编码层、语义增强层和输出层。

编码层采用2019年7月由Facebook公司推出的RoBERTa作为基础预训练模型。和2018年10月谷歌公司推出的BERT相比,此模型在CoLA和SST-2两项任务中分别领先16个百分点和3个百分点。而这两个任务是评判文本语义解析能力的重要指标。RoBERTa已经有支持中文的版本。

我们也考虑了其它的可能性,例如MT-DNN,XLnet,ERNIE2.0和DistilBERT,经过对可行性的分析和对性能的比较,最终选用RoBERTa。

语义增强层的思路是将问题的文本表示和组成数据列的token的文本表示进行融合,将融合后的结果结合注意力机制,然后进行数学相加,最后再加上问题的文本表示,以得到数据列的文本表示。

其中将问题与token进行融合的时候,加入两个多维训练参数(m*d),以构成神经网络层。那么数学上,两个多维表示如何变成一个注意力参数的呢?问题和token都是((m*d)*(d*1)),点积后成为(m*1)向量,再次转制和点积后成为(1*1)向量,即一个注意力参数。

最后再次加上问题的文本表示,是为了增强问题表示的比重,将问题和toke比重由1:1改为2:1,以增强最终效果。此处问题权重设为0.5。

到此已经增加了一层神经网络层。在输出层为所有的子任务还要再增加一层神经网络层,以WhereNumber子任务为例进行说明。这个子任务是二分类模型,可选值为1或2,而是否有Where子句由emptycolumn指定。此子任务增加一层MLP层。其余子任务由不同的公式加上神经网络参数计算。所有输出层的损失函数都是交叉熵损失函数。

这些子任务并不是每个独立进行训练,在每一个batchsize里,所有子任务按顺序依次正向传播,然后计算损失函数,按照梯度下降原理,进行整体反向传播,更新参数,使整体损失函数值最低。

4.执行引导模块

执行引导模块参考/abs/1807.03100直接进行增强,可有效提升执行准确率2%左右。

SQL增强模块

SQL增强模块在把生成的SQL送到数据库之前,进行调整如下:

●对于表中的类别型列数据,需要将生成的列值与数据库里的此列的类别值进行相似度匹配,以替换成正确值。例如解析后的WhereValue为“黄蜂”,而数据库里的数据为“大黄蜂”,则修改为“大黄蜂”。

●如果两个Where子句的列名相同,要检查两个WhereValue是否相同,相同的话将其中一个替换为相似度最高的另一个值。

●如果WhereValue里包含中文“和”字,则拆成两个值

●如果问题中有中文“或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论