【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation

文章目录

  • 【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation
    • 1. 来源
    • 2. 介绍
    • 3. 模型
      • 3.1 中间表示
      • 3.2 模式链接
      • 3.3 神经模型
    • 4. 实验
      • 4.1 实验设置
      • 4.2 结果
    • 5. 总结

1. 来源

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第1张图片

  • 论文地址:https://aclanthology.org/P19-1444/
  • code:https://github.com/microsoft/IRNet

2. 介绍

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第2张图片

作者提出了一种称为IRNet的神经方法的复杂和跨域文本到sql。IRNet旨在解决两个挑战:

  • 用自然语言(NL)表达的意图与SQL中的实现细节之间的不匹配;
  • 预测大量域外词造成的列的挑战。

IRNet不是端到端合成一个SQL查询,而是将合成过程分解为三个阶段。

  • 在第一阶段中,IRNet对一个问题和一个数据库模式执行一个模式链接。
  • 然后,IRNet采用一个基于语法的神经模型来合成一个SemQL查询,这是作者设计的一个连接NL和SQL的中间表示。
  • 最后,IRNet从合成的SemQL查询中确定性地推断出SQL查询。

在具有挑战性的文本到sql基准Spider上,IRNet实现了46.7%的准确率,比以前的方法获得了19.5%的绝对改进。在撰写本文时,IRNet在 Spider 排行榜上排名第一。

3. 模型

在本节中,将详细介绍IRNet。作者首先描述了如何解决不匹配问题和词汇问题(使用中间表示和模式链接)。然后,作者给出了合成SemQL查询的神经模型。

3.1 中间表示

为了消除这种不匹配,作者设计了一种特定于领域的语言,称为SemQL,它作为NL和SQL之间的中间表示。图2 显示了SemQL的上下文无关语法。图3 显示了一个说明性的SemQL查询。作者将在下面详细介绍SemQL的设计。

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第3张图片 【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第4张图片

受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查询在列“名称”及其表“朋友”中声明。
  • 表的声明有助于区分模式中重复的列名。
  • 作者还为特殊列 “*” 声明了一个表,因为作者观察到 “*” 通常与问题中提到的表对齐。
  • 考虑到图3中的示例,列 “*” 在本质上与表 “朋友”一致,这在问题中明确提到了。
  • 为 “*” 声明一个表还有助于在下一个推断阶段推断出FROM子句。

当涉及从SemQL查询推断SQL查询时,作者基于数据库模式的定义是精确和完整的假设来执行推断。具体来说,如果列是另一个表的外键,在模式中应该声明一个外键约束。这种假设通常认为它是数据库设计中的最佳实践。

  • 在Spider 基准的训练集中,超过95%的例子都持有这个假设。这个假设构成了推论的基础。
    • 以SQL查询中的FROM子句的推理为例。作者首先确定连接模式中连接SemQL查询中所有声明的表的最短路径(数据库模式可以表述为无向图,其中顶点是表,边是表之间的外键关系)。
    • 连接路径中的所有表最终会生成FROM子句。补充材料提供了推理的详细过程和更多的SemQL查询的示例。

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第5张图片

3.2 模式链接

IRNet中的模式链接的目标是识别问题中提到的列和表,并根据问题中提到的列为这些列分配不同的类型。模式链接是在 text-sql 上下文中实体链接的实例化,其中实体引用数据库中的列、表和单元格值。作者使用一种简单而有效的基于弦匹配的方法来实现链接。在下面,作者将说明IRNet如何基于数据库中的单元格值不可用的假设来详细执行模式链接。

总的来说,作者定义了在问题中可能提到的三种类型的实体,即表、列和值,

  • 值代表数据库中的单元格值。
    • 为了识别实体,作者首先在一个问题中列举所有长度为1-6的n克。
    • 然后,作者按长度的降序来列举它们。
    • 如果一个n-gram与列名完全匹配或是列名的子集,作者将这个n-gram识别为列。
  • 对表的识别也遵循同样的方法。
    • 如果n-g可以同时识别为列和表,作者对列进行优先级排序。
    • 如果一个n-gram以单个引号开始和结束,作者承认它为值。
    • 一旦识别出一个n克,作者将删除与它重叠的其他n克。
    • 为此,作者可以识别一个问题中提到的所有实体,并通过将那些已识别的n克和剩下的1克连接起来,得到这个问题的一个不重叠的n克序列。作者将序列中的每个n-克称为一个跨度,并分配每个跨度根据其实体来跨越一个类型。

例如,如果一个跨度被识别为列,作者将为其分配一个类型列。图4描述了一个问题的模式链接结果。

对于那些识别为列的,如果它们与模式中的列名完全匹配,作者为这些列分配类型精确匹配,否则为类型部分匹配。为了将单元格值与模式中相应的列连接起来,作者首先在ConceceptNet(Speer和Havasi,2012)中查询值跨度,这是一个开放的、大规模的知识图,并在模式上搜索ConceceptNet返回的结果。作者只考虑ConceceptNet的两类查询结果,即“是一种”和“相关术语”,因为作者观察到单元格值所属的列通常出现在这两个类别中。如果在模式中存在一个精确或部分匹配列名的结果,则作者为该列分配一个类型值精确匹配或值部分匹配。

3.3 神经模型

作者提出了合成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 表示的计算方法如下。
【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第6张图片
解码器解码器的目标是合成SemQL查询。给定SemQL的树状结构,作者使用一个基于语法的解码器(Yin和Neubig,2017,2018),它利用LSTM通过动作的顺序应用来建模SemQL查询的生成过程。在形式上,SemQL查询y的生成过程可以形式化如下。
【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第7张图片
其中ai是在时间步i时所采取的动作,

解码器与三种类型的操作交互以生成SemQL查询,包括应 用程序规则、选择列和可选择查询。APPLYRULE ®将生产规则r应用于SemQL查询的当前派生树。选择列©和可选择(t)分别从模式中选择列c和表t。在这里,作者详细说明了操作选择列和可选择列。有兴趣的读者可以参考Yin和Neubig(2017)来了解行动应用规则的细节。

作者设计了一个内存增强的指针网络来实现动作选择列。内存用于记录所选的列,这类似于Liang等人(2017)中使用的内存机制。当解码器要选择一个列时,它首先决定是否从内存中进行选择,然后根据该决定从内存或模式中选择一个列。一旦选定列,将从模式中删除并被记录在记忆中。选择列c的概率计算如下。
【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第8张图片
其中S表示从模式中选择,MEM表示从内存中选择,vi表示通过对Hx执行注意而获得的上下文向量,Ec m表示内存中列的嵌入,Ec s表示从未被选择的列的嵌入。wm是可训练的参数。

当涉及到可选择性时,解码器通过一个指针网络从模式中选择一个表 t :

在这里插入图片描述
如图4所示,解码器首先预测一个列,然后预测它所属的表。为此,作者可以利用列和表之间的关系来删除不相关的表。

粗到细。作者进一步采用了一个从粗到细的框架(Solar-Lezama,2008;Bornholt等人,2016;Dong和拉帕塔,2018),将SemQL查询的解码过程分解为两个阶段。在第一阶段,骨架解码器输出SemQL查询的骨架。然后,一个细节解码器通过选择列和表来填充骨架中缺失的细节。补充材料提供了对SemQL查询的骨架和从粗到细的框架的详细描述。

4. 实验

在本节中,作者通过将IRNet与最先进的方法进行比较,并在IRNet中的几个设计选择来评估它们的贡献。

4.1 实验设置

数据集。作者在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)。

4.2 结果

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第9张图片
【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第10张图片
【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第11张图片

【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第12张图片
【论文阅读_NL2SQL】Towards Complex Text-to-SQL in Cross-Domain Database with Intermediate Representation_第13张图片

5. 总结

作者提出了一种用于复杂和跨域文本到sql的神经方法SemQL,旨在解决词汇问题和与模式链接和中间表示的不匹配问题。在具有挑战性的Spider基准测试上的实验结果证明了IRNet的有效性。

你可能感兴趣的:(NL2SQL,论文阅读,方法介绍,数据库,论文阅读,sql)