作者提出了一种称为IRNet的神经方法的复杂和跨域文本到sql。IRNet旨在解决两个挑战:
IRNet不是端到端合成一个SQL查询,而是将合成过程分解为三个阶段。
在具有挑战性的文本到sql基准Spider上,IRNet实现了46.7%的准确率,比以前的方法获得了19.5%的绝对改进。在撰写本文时,IRNet在 Spider 排行榜上排名第一。
在本节中,将详细介绍IRNet。作者首先描述了如何解决不匹配问题和词汇问题(使用中间表示和模式链接)。然后,作者给出了合成SemQL查询的神经模型。
为了消除这种不匹配,作者设计了一种特定于领域的语言,称为SemQL,它作为NL和SQL之间的中间表示。图2 显示了SemQL的上下文无关语法。图3 显示了一个说明性的SemQL查询。作者将在下面详细介绍SemQL的设计。
受lambda DCS(Liang,2013)的启发,SemQL被设计为树状结构。这种结构一方面可以有效地约束合成过程中的搜索空间。另一方面,鉴于SQL的树状结构性质(Yu et al.,2018b;Yin and Neubig,2018),遵循相同的结构也可以更容易直观地翻译为SQL。
不匹配问题 主要是由于SQL查询中的实现细节和问题缺少规范造成的。因此,在中间表示中隐藏实现细节的做法是很自然的,这就形成了SemQL的基本思想。考虑到图3中的示例,在SemQL查询中消除了SQL查询中的GROUPBY, HAVING 和 FROM子句,而且在where 和having 的条件也被SemQL查询中的过滤子树统一表示。可以在稍后的推理阶段使用领域知识从SemQL查询中确定性地推断出实现细节。例如,SQL查询的GROUPBY子句中的一个列通常出现在SELECT子句中,或者它是一个表的主键,其中一个聚合函数被应用于它的列之一。
此外,作者严格要求在SemQL中声明一个列属于的表。如图3所示,
当涉及从SemQL查询推断SQL查询时,作者基于数据库模式的定义是精确和完整的假设来执行推断。具体来说,如果列是另一个表的外键,在模式中应该声明一个外键约束。这种假设通常认为它是数据库设计中的最佳实践。
IRNet中的模式链接的目标是识别问题中提到的列和表,并根据问题中提到的列为这些列分配不同的类型。模式链接是在 text-sql 上下文中实体链接的实例化,其中实体引用数据库中的列、表和单元格值。作者使用一种简单而有效的基于弦匹配的方法来实现链接。在下面,作者将说明IRNet如何基于数据库中的单元格值不可用的假设来详细执行模式链接。
总的来说,作者定义了在问题中可能提到的三种类型的实体,即表、列和值,
例如,如果一个跨度被识别为列,作者将为其分配一个类型列。图4描述了一个问题的模式链接结果。
对于那些识别为列的,如果它们与模式中的列名完全匹配,作者为这些列分配类型精确匹配,否则为类型部分匹配。为了将单元格值与模式中相应的列连接起来,作者首先在ConceceptNet(Speer和Havasi,2012)中查询值跨度,这是一个开放的、大规模的知识图,并在模式上搜索ConceceptNet返回的结果。作者只考虑ConceceptNet的两类查询结果,即“是一种”和“相关术语”,因为作者观察到单元格值所属的列通常出现在这两个类别中。如果在模式中存在一个精确或部分匹配列名的结果,则作者为该列分配一个类型值精确匹配或值部分匹配。
作者提出了合成SemQL查询的神经模型,它以一个问题、一个数据库模式和模式链接结果作为输入。图4通过一个说明性的示例描述了模型的总体架构。
为了解决词汇问题,作者在为模式中的问题和列构造表示时考虑了模式链接结果。此外,作者还设计了一个内存增强指针网络,用于在合成过程中选择列。当选择一个列时,它会首先决定是否从内存中进行选择,这使它不同于普通的指针网络(Vinyals et al.,2015)。内存增强指针网络背后的动机是,普通的指针网络很容易根据作者的观察结果选择相同的列。
NL编码器。设x=[(x1,τ1),···,(xL,τL)]表示一个问题的非重叠跨度序列,其中xi是第i个跨度,τi是在模式链接中分配的span xi的类型。NL编码器以x作为输入,并将x编码为一系列隐藏状态Hx。xi中的每个单词都被转换为其嵌入向量,其类型τi也被转换为一个嵌入向量。然后,NL编码器将类型和单词嵌入的平均值作为嵌入的跨度e i x。最后,NL编码器在所有的跨度嵌入上运行一个双向的LSTM(霍克雷特和施米德胡伯,1997)。将前向和后向LSTM的输出隐藏状态连接起来构造Hx。
模式编码器。s=(c,t)表示一个数据库模式,其中c={(c1,φi),···,(cn,φn)}是作者在模式链接中分配的不同列及其类型的集合,而t={t1,···,tm}是表的集合。模式编码器以s作为列Ec和表Et的输入和输出表示。作者以下面的列表示形式为例。表的表示的构造遵循相同的方式,除了作者没有为模式链接中的表分配类型。
具体地说,ci中的每个单词首先被转换为其嵌入向量,其类型φi也被转换为一个嵌入向量 ϕi。然后,模式编码器取单词嵌入的平均值作为列的初始表示形式 eˆic。模式编码器进一步对跨度嵌入进行关注,并获得一个上下文向量c i c。最后,模式编码器将初始嵌入、上下文向量和嵌入类型的和作为列表示e i c。列 ci 表示的计算方法如下。
解码器解码器的目标是合成SemQL查询。给定SemQL的树状结构,作者使用一个基于语法的解码器(Yin和Neubig,2017,2018),它利用LSTM通过动作的顺序应用来建模SemQL查询的生成过程。在形式上,SemQL查询y的生成过程可以形式化如下。
其中ai是在时间步i时所采取的动作,
解码器与三种类型的操作交互以生成SemQL查询,包括应 用程序规则、选择列和可选择查询。APPLYRULE ®将生产规则r应用于SemQL查询的当前派生树。选择列©和可选择(t)分别从模式中选择列c和表t。在这里,作者详细说明了操作选择列和可选择列。有兴趣的读者可以参考Yin和Neubig(2017)来了解行动应用规则的细节。
作者设计了一个内存增强的指针网络来实现动作选择列。内存用于记录所选的列,这类似于Liang等人(2017)中使用的内存机制。当解码器要选择一个列时,它首先决定是否从内存中进行选择,然后根据该决定从内存或模式中选择一个列。一旦选定列,将从模式中删除并被记录在记忆中。选择列c的概率计算如下。
其中S表示从模式中选择,MEM表示从内存中选择,vi表示通过对Hx执行注意而获得的上下文向量,Ec m表示内存中列的嵌入,Ec s表示从未被选择的列的嵌入。wm是可训练的参数。
当涉及到可选择性时,解码器通过一个指针网络从模式中选择一个表 t :
如图4所示,解码器首先预测一个列,然后预测它所属的表。为此,作者可以利用列和表之间的关系来删除不相关的表。
粗到细。作者进一步采用了一个从粗到细的框架(Solar-Lezama,2008;Bornholt等人,2016;Dong和拉帕塔,2018),将SemQL查询的解码过程分解为两个阶段。在第一阶段,骨架解码器输出SemQL查询的骨架。然后,一个细节解码器通过选择列和表来填充骨架中缺失的细节。补充材料提供了对SemQL查询的骨架和从粗到细的框架的详细描述。
在本节中,作者通过将IRNet与最先进的方法进行比较,并在IRNet中的几个设计选择来评估它们的贡献。
数据集。作者在Spider(Yu et al.,2018c)上进行实验,这是一个大规模的、人注释的和跨域的文本到sql基准。继Yu等人(2018b)之后,作者使用该数据库被分割以进行评估,其中206个数据库被分为146个培训、20个开发和40个测试。有8625、1034、2147个问题-sql查询对用于培训、开发和测试。就像任何竞争基准一样,Spider的测试集是不公开的,作者的模型被提交给数据所有者进行测试。作者使用Yu等人(2018c)提出的SQL精确匹配和组件匹配来评估IRNet和其他方法。
基线。作者还评估序列到序列模型(Sutskever等,2014)增强神经注意机制(Bahdanau等,2014)和复制机制(顾等,2016),SQLNet(徐等,2017),TypeSQL(余等,2018)和SyntaxSQLNet(余等,2018b)这是最先进的方法。
实现。作者使用PyTorch实现了IRNet和基线方法(Paszke等人,2017)。单词嵌入、类型嵌入和隐藏向量的维数被设置为300。Word嵌入用Glove初始化(penn Word等人,2014),并在NL编码器和模式编码器之间共享。它们在训练期间是固定的。动作嵌入和节点类型嵌入的维数分别设置为128和64。dropout是0.3。作者使用Adam(Kingma和Ba,2014)和默认的超参数进行优化。批处理大小被设置为64。
Bert。语言模型预训练已被证明对学习通用语言表示是有效的。为了进一步研究作者的方法的有效性,受SQLova(Hwang等人,2019)的启发,作者利用BERT(Devlin等人,2018)对问题、数据库模式和模式链接结果进行编码。解码器与IRNet中保持相同。具体来说,问题中的跨序列与模式中所有不同的列名连接在一起。每个列的名称都用一个特殊的标记来分隔。BERT将该连接作为输入。问题中跨度的表示作为其单词和类型的平均隐藏状态。为了构造一列的表示,作者首先对其单词的隐藏状态运行一个双向LSTM(BI-LSTM)。然后,作者将它的类型嵌入和BI-LSTM的最终隐藏状态的和作为列表示。表表示法的构造也遵循同样的方法。补充材料提供了一个图方法来说明编码器的体系结构。为了建立基线,作者还用BERT增强了SyntaxSQLNet。请注意,由于资源的限制,作者只使用BERT的基本版本。作者不进行任何数据扩充以进行公平的比较。作者所有的代码都是公开提供的(
https://github.com/zhanzecheng/IRNet)。
作者提出了一种用于复杂和跨域文本到sql的神经方法SemQL,旨在解决词汇问题和与模式链接和中间表示的不匹配问题。在具有挑战性的Spider基准测试上的实验结果证明了IRNet的有效性。