Text-to-SQL学习整理(二十)STRUG模型

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

前言

本文为我之前在CSDN平台上的一篇博客记录。原链接为:blog.csdn.net/u011426236/…

导语

导语

本文和之前的GRAPPA框架类似,都是使用数据增强的方式来提升Text-to-SQL任务的性能。相比于GRAPPA的人工模板合成数据,STRUG使用了Table-to-Text的大型人工标注数据集ToTTo的数据来提升schema linking的表现。本文主要贡献有两点:

  1. 借助Table-to-Text数据集ToTTo,提出了一种新的预训练框架STRUG;
  2. 整理了一个更难的数据集Spider-Realistic来检验模型在真实世界的泛化能力;

对于预训练,其目标函数包括三部分:

  • 列对齐:判断哪些column在NL语句中被提到(二分类)
  • 值对齐:判断哪些数据库中的value在NL语句中被提到(二分类)
  • 列-值映射:判断被提到的值分别属于哪一列(多分类)

同时,为了使预训练更加有效,采用两种数据增强的方法:

  • 进行负采样,加入一些无关表、列作为干扰项
  • 随机对匹配到的短语进行同列值替换

并且,STRUG的训练时间更短,训练代价更小,可以与GRAPPA等方法互补。

启发:Text-to-SQL标注数据较难获得,但可以通过大量的Table-text平行数据增强schema linking的能力,进而提升Text-to-SQL表现

摘要

学习捕捉Text和Table之间的对齐对于Text-to-SQL任务至关重要。模型需要正确地识别对column和value的自然语言引用,并将它们对齐到给定的数据库schema中。本文中,我们提出了一种Text-to-SQL任务中的新颖的弱监督型基于结构的预训练框架(STRUG),该框架可以基于平行的text-table语料库来有效地学习text-table对齐。本文提出了三个新颖的预测任务:column grounding, value grounding and columnvalue mapping,并利用它们来训练一个text-table编码器。此外,为了在更真实的text-table对齐设置下评估不同的方法,我们基于Spider的验证集创建了一个新的评估数据集Spider-Realistic,其中显式地删除了列名,并采用8个现有的Text-to-SQL数据集进行跨数据库评估。在所有的设置下,STRUG都给BERT-Large带来了显著的提升。与现有的预训练方法如GRAPPA相比,STRUG在Spider上达到了类似的表现,并且在更加真实的数据集中超过了所有的baseline。这篇论文中的所有代码和数据可以从这里获得:aka.ms/strug

1 简介

语义解析(Semantic Parsing)是将人类的自然语言(NL)映射到机器可以理解的表示,如λ演算、抽象语义表示 (Abstract Meaning Representation)或者结构查询语言(比如SQL语言)。在本文中,我们主要聚焦于将一个自然语言问句翻译成可执行的SQL语句的任务(Text-to-SQL)。这是建立数据库的自然语言接口的基础,将有助于非专业人士方便的查询数据库。

Text-to-SQL任务中一个重要的挑战就是Text-Table的对齐,也即如何将自然语句中关于schema中的table/value提及正确的映射到对应的schema中。如图1所示,模型需要首先辨别出column的提及:total credits, department和值的提及:History,并且可以将它们正确地对齐到所给的schema中。这项任务的挑战主要有以下三点:

  1. 首先,模型需要将用户语句和数据库schema联合理解,因为通常用户会使用与原始column名称不同的各种的表达方式来提到某一个column。
  2. 其次,模型需要能够泛化到新的数据库模式和参考语言,这在训练中是看不到的。
  3. 最后,在无法访问column中单元格值的情况下,模型仍然需要识别潜在的提及值,并将它们链接到正确的列,而无需在数据库中进行彻底的搜索和匹配。

扫描二维码关注公众号,回复: 14342611 查看本文章

另一方面,text-table的对齐在平行的text-table语料库中自然的存在,比如带有上下文的web表格、table-to-text生成任务的数据集、基于表格的问答数据集等。这些数据集收集自网页、文档中,并且相比于Text-to-SQL的数据集构建过程,这些数据集通常需要更少的人力参与。图1的下半部分给出了这样一个对齐数据集的示例。有三个值的提及11417、Pune Junction和Nagpur Jnction分别可以被对齐到train number、departure station和arrival station这几个column。通过利用表内容或使用一些人工注释,可以很容易地获得这种对齐信息。在本文工作中,我们的目标是整合平行语料中Text-Table对齐的知识,并通过预训练来使用它帮助下游的Text-to-SQL任务。

在这里插入图片描述

我们提出了一种基于结构的弱监督的Text-to-SQL的预训练框架(STRUG)。我们设计了一组预测任务,并利用包含NL句子和表格数据的平行语料库对其进行优化,以鼓励编码表示捕获到表格对齐任务所需的信息。具体来说,我们设计了三个任务来堆积文本和表格:

  • column grounding(列对齐)
  • value grounding(值对齐)
  • column-value mapping(列-值映射,如图2所示)

我们重用现有大型Table-to-Text生成数据集ToTTo来预训练我们的模型,同时通过弱监督方式借助其生成标签信息。我们的实验有以下两种设定:

  1. 人工标注的设定。在这种设定下,我们使用ToTTo的revised description(修改的描述)和单元格标注
  2. 自动标注的设定。在这种设定下,我们使用原始的语句并且通过与表格内容进行字符串匹配的方式来推测单元格的所属关系

正如Suhr et al. (2020)所指出,现有的Text-to-SQL benchmark比如Spider通过在NL语句中显式的具体的column的名字而使得这种推断难度大大降低。将此与更实际的设置进行对比,在更实际的设置中,用户可以使用各种表达式引用一个column。Suhr et al. (2020)提出了一个新的跨数据库设定,即使用Spider做训练,用另外的8个单领域Text-to-SQL数据集作为评估。除了采用他们的设定,我们从原始的Spider验证集中,通过对NL语句中的column名字的显式提及进行移除,创建了一个新的评价数据叫做Spider-Realistic。

我们从ToTTo中使用120k个text-table对来预训练STRUG。实验显示,我们的预训练结构对齐目标是非常有效的,通常只需要不到4个小时,大概5个epoch就可以收敛。与之前的预训练方法相比,这将大幅度降低预训练的代价。我们采取与BERT相同的模型结构,在预训练层之上接一个简单的分类层。应用到下游任务时,STRUG可以被用作是一个text-table编码器,并且可以很容易的集成到现有的SOTA模型上。我们进行了拓展实验,并得到如下结果:

  1. 通过与目前的SOTA模型RAT-SQL相结合,使用STRUG作为encoder比直接使用预训练的BERT_{large}(这个是RAT-SQL的默认编码器)效果显著要好。并且和其他的text-table预训练模型,比如GRAPPA相比,取得了差不多的性能表现。
  2. 在更加真实的评估设定下,包括Spider-Realistic和Suhr et al. (2020)数据集上,我们的方法比所有的baseline方法都要好。这证明了我们的训练前框架在解决text-table对齐问题上的优越性,以及它在实践中的实用性。
  3. STRUG同样也帮助减少使用很大数量的监督训练数据的代价。我们通过限制训练数据集的大小在WIkiSQL benchmark上进行了实验,结果表明,我们的预训练方法可以大大提高模型的性能,并持续优于现有的预训练方法。

2 相关工作

跨数据库的Text-to-SQL

在过去的几年中,Text-to-SQL任务已经取得了飞速的发展。在拥有足够的领域内训练数据下,现有模型,在但领域数据集如ATIS和GeoQuery中,其精确匹配精度已达到80%以上。然而,使用SQL查询标注NL问题的成本很高,因此为所有可能的数据库收集训练示例的成本过高。需要一个跨领域和数据库的通用模型。基于此,Yu等人(2018b)提出了Spider,这是一个跨数据库Text-to-SQL的基准测试,可以使用不同的数据库对系统进行训练和评估。最近,Suhr等人(2020)对跨数据库Text-to-SQL的挑战进行了全面分析,并提出在评估中包括单域数据集。他们的研究揭示了当前Text-to-SQL模型的局限性,并证明了对能够更好地处理泛化挑战的模型的需求。

Text-Table数据的预训练

受预训练语言模型成功的启发,最近的一些工作试图将类似的预训练目标应用于文本表数据。TaBERT (Yin et al., 2020)和TAPAS (Herzig et al., 2020)通过利用大量的网络表格及其文本上下文共同学习文本表表示。他们将表格压平,并使用特殊的嵌入来为结构信息建模。然后使用掩蔽语言模型(MLM)目标来预测文本表数据中的mask token。MLM擅长于对标记的上下文语义表示进行建模,但在捕获一对序列(例如,text-table)之间的对齐方面很弱。最近,GRAPPA (Yu et al., 2020)探索了一个不同的预训练方向,该方向与现有的语义解析数据增强工作有一些相似之处。GRAPPA首先使用从现有的Text-to-SQL数据集生成的模板(一种同步上下文无关语法)来构造合成的question-SQL对,然后使用一个SQL语义预测目标来从合成数据中学习合成归纳偏差。但是,由于合成数据是使用模板生成的,并且列名和值直接填写在问题中,因此它与现有的Text-to-SQL数据集存在相同的问题,从而减轻了text-table对齐的挑战。而STRUG则是通过基于结构的预训练目标,直接从平行文本表语料库中学习text-table对齐知识。我们也注意到,现有的预训练方法和STRUG在未来可以相互补充和结合。

Text-to-SQL中的结构对齐

结构对齐(Structure Grounding)已被证明对Text-to-SQL至关重要,其中模型需要正确识别NL语句中提到的列和值,并将它们链接到给定的数据库模式。大多数现存的Text-to-SQL系统都特别设计了结构对齐的模块,也被同样称为模式链接(schema linking)。例如,Guo等人(2019);Yu等人(2018a)使用简单的启发式方法探索模式链接,如字符串匹配,并将链接结果作为他们系统的直接提示。但是,这种启发式方法在实际场景中可能不能很好地推广,在实际场景中,有各种各样的方式来引用一个列,而这个列通常与原始的列名不同。最近,Shi等人(2020)和Lei等人(2020)又向前迈进了一步,用细粒度的对齐标签手动标注WikiTableQuestions (Pasupat和Liang, 2015)和Spider,用于监督训练(以及Text-to-SQL的目标),这带来了显著的改进。这些模型的主要缺点是,它们只能从一个相对较小的训练语料库中学习对齐知识,不能很好地跨领域推广。此外,手动获取SQL注释和细粒度对齐标签的代价都很高。与此相反,本文的目标是重新利用现有的平行text-table语料库进行预训练模型的结构对齐学习,以低成本或零成本大规模地生成对齐标签。

3 结构对齐的预训练(Structure-Grounded Pretraining)

3.1 动机

跨数据库Text-to-SQL的关键泛化挑战之一是Text-Table对齐,即,模型需要理解NL语句和在训练中看不到的数据库模式,包括value提及和新的column,并正确映射它们。在自然语言处理领域,类似的泛化问题已经研究了很长时间。最近,预训练模型通过从大型文本语料库中学习上下文化的词汇表示,在应对挑战方面取得了很大的成功。受此启发,本研究旨在开发一种可直接从大型并行文本表语料库中学习文本表对齐知识的预训练方法。

与之前的text-table式的预培训工作不同(Herzig等人,2020年;Yin等人,2020),优化无监督的目标,如在预训练时使用MLM任务,我们仔细设计了三个结构对齐任务:列对齐、值对齐和列-值映射。这些任务与Text-to-SQL相关,可以在预训练期间直接捕获text-table对齐。从而将学习到的对齐知识有效地传递到下游任务中,提高最终表现。

在这里插入图片描述

3.2 预训练的目标

我们使用与BERT相同的模型体系结构,并在上面为三个基于结构的任务添加简单的分类层。对于下游任务,我们的模型可以作为text-table编码器轻松地集成到现有的模型中。继之前的工作(Hwang et al., 2019;Wang et al., 2020;Guo等人,2019),我们通过连接NL语句和column标题,将输入线性化,使用 token作为分隔符。

问题的形式化定义如下。给定一句NL语句 { x i } \{x_i\} 和数据库表及它们的所有column标题组成的列表 { c j } \{c_j\} ,我们首先通过BERT编码器的最后一层输出获得NL中每个token的上下文表示 x i x_i c j c_j 。这里每个column标题都可能包含多个token: c j , 0 , , c j , c j c_{j, 0}, \ldots, c_{j,\left|c_{j}\right|} 。我们通过column pooling的方法来获取每个column的向量表示。具体来说,我们将标题的第一个和最后一个token的表示做一个平均,即: c j = ( c j , 0 + c j , c j ) / 2 \mathbf{c}_{j}=\left(\mathbf{c}_{j, 0}+\mathbf{c}_{j,\left|c_{j}\right|}\right) / 2 { x i } \{x_i\} { c j } \{c_j\} 接下来被用于计算loss。模型的整体架构如图2所示。

列对齐

Text-to-SQL中一个重要的任务是哪些column在NL语句中被提及并应用到了后续的SQL生成中。通过一个平行的text-table语料库,这类似于选择关联的NL句子中提到的列。此任务需要一个模型仅根据列的标题理解列的语义含义,并根据上下文化的表示推断列与NL句子的关系。我们把它定义为一个二分类任务。对于每一个column c j c_j ,我们使用一层前馈神经网络 f ( ) f(\cdot) 来获取column c j c_j 是否在NL语句中出现的预测结果 p j c = f ( c j ) p_j^c=f(c_j) 。列对齐任务的loss函数 L c L_c 使用BCE loss。注意,此任务要求模型在不访问列的任何值的情况下识别列的含义。因此,它适用于典型的Text-to-SQL的设定,其中模型只访问数据库的schema。

值对齐

对于像WHERE和HAVING这样的子句,要生成可执行SQL查询,模型还需要从NL语句中提取要与对齐列进行比较的值。这可以转换为使用平行text-table语料库查找NL句子中提到的单元格值的任务。由于表的内容不可用,因此模型必须仅根据NL话语和表的schema推断可能的value提及。与列对齐任务类似,我们也将其视为一个分类任务。对于每一个token x i x_i ,我们预测其是一个值的预测结果为 p i v = f ( x i ) p_i^v=f(x_i) .值对齐的loss函数 L v L_v 也是一个BCE loss。

列-值映射

column-value的匹配在value token判断的基础上找出这些被判定为value tok的tok属于哪一个column。 由于在SQL查询中可能会使用多个列和值,所以Text-to-SQL模型还需要正确地映射对齐的列和值。这是用来进一步加强模型的能力,通过学习对齐列和值来捕获两个输入序列之间的相关性。我们将其表示为NL句子中的标记与列之间的匹配任务。对于每一个对齐的token x i x_i ,我们将其与每一个column c j c_j 拼接并且计算它们匹配的概率 p i , j c v = f ( [ x i , c j ] ) p_{i, j}^{c v}=f\left(\left[\mathbf{x}_{i}, \mathbf{c}_{j}\right]\right) 。这里的[]为拼接操作。之后对每一个预测的token经过一个softmax层后得到 p i c v = { p i , j c v } j = 1 c p_{i}^{c v}=\left\{p_{i, j}^{c v}\right\}_{j=1}^{|c|} ,然后最后的列-值映射的loss使用CrossEntropy计算。 L c v = C r o s s E n t r o p y ( s o f t m a x ( p i c v ) , y i c v ) L_{cv}=CrossEntropy(softmax(p_i^{cv}),y_i^{cv}) 其中 y i c v { 0 , 1 } c y_i^{cv}\in\{0,1\}^{|c|} 为ground truth标签。

最终的预训练loss为三个loss的总和。我们对每一项进行了不同权重的实验,但结果并没有明显改善。因此,我们只报告平均加权loss的表现。

在这里插入图片描述

3.3 通过弱监督获取预训练数据

基于一个简单的直觉:给定一个表格的列,如果它其中任何一个值可以匹配到question中的某个短语,那么就认为这个列在句子中被提到,并且值被对齐。我们从一个平行的text-table语料库中获取ground truth标签 y j c , y i v , y i c v y_j^c,y_i^v,y_i^{cv} 。为了确保预训练语料库的高质量text-table对齐信息,不像之前的工作(Herzig et al., 2020; Yin et al.,2020),它们使用网络表格和周围的文本。这里,我们利用现有的大规模表到文本生成数据集ToTTo。ToTTo包含120,761个NL描述和相应的网络表,使用启发式从维基百科自动收集。此外,它提供单元格级注释,突出显示描述中提到的单元格和删除了不相关或不明确短语的NL描述修订版。

在这里插入图片描述

我们在两种预训练设定下进行实验,有或没有人类的帮助(这里即使用不同的ToTTo的标注信息)。在人工辅助设定中,我们使用单元格注释以及修改后的描述来推断ground truth标签。更具体地说,我们首先将至少包含一个高亮显示单元格的所有列 c j c_j 标记为正( y j c = 1 y_j^c = 1 )。然后,我们遍历突出显示的单元格的所有值,并通过精确的字符串匹配将它们与NL描述匹配,以提取提及值。如果一个短语与突出显示的单元格相匹配,我们选择该短语中的所有token x i x_i ,并将它们与相应的列 c j ( y i v = 1 , y i , j c v = 1 ) c_{j}\left(y_{i}^{v}=1, y_{i, j}^{c v}=1\right) 对齐。在自动设定中,我们只使用表和原始句子,并使用精确的字符串匹配将每个单元格与NL句子进行比较,从而获得单元格注释。注意,在这两种设置中,单元格值仅用于为预训练目标做监督,而不是作为预训练模型的输入。

为了使预训练更有效,并获得更好的泛化性能,我们还引入了两种数据增强技术。

  1. 首先,由于原始的并行语料库对于每个训练示例只包含一个表,所以我们随机抽取 K n e g K_{neg} 个表作为负样本,并将其列名附加到输入序列中。这模拟了一个具有多个表和可能有数百列的数据库,这在Text-to-SQL中很常见。
  2. 其次,我们将NL句子中匹配的短语随机替换为来自同一列的单元格值(标签保持相同)。通过这种方法,我们可以在预训练时更好地利用表格的内容,并通过暴露更多的单元格值来提高模型的泛化能力。

4 创建一个更现实的评估集

作为首批研究跨数据库Text-to-SQL的数据集之一,Spider已经被广泛用于评估模型泛化到不可见的程序和数据库的能力。然而,正如Suhr等人(2020)指出的那样,Spider通过使用与它们的配对SQL查询紧密匹配的语句来简化任务,例如在问题中明确提到列名,而实际上NL对列的引用通常与原始列名不同。为了缓解这个问题,Suhr et al.(2020)提出使用Spider等跨域数据集训练模型,并添加另外8个单域数据集,如ATIS (Hemphill et al., 1990;Dahl等人,1994)和GeoQuery (Zelle和Mooney, 1996)进行评价。

然而,有些数据集与Spider有很大的不同,它们引入了许多新颖的查询结构和数据集约定从表1可以看出,他们的模型(Suhr et al., 2020)在一些数据集上表现非常差。基于此,我们提出了一个基于Spider的具有现实意义和挑战性的评估集。我们首先从Spider开发集中选择一个复杂的子集,其中有与值相比较的列或在ORDER BY之类的子句中使用的列。然后,我们自己手动修改子集中的NL问题,以删除或改写显式提到的列名(SELECT子句中的列除外),同时保持SQL查询不变。一些例子如表2所示。这样,我们不会引入额外的挑战,比如适应新的查询结构,但可以公平地评估模型对齐文本和表的能力。为了更全面的比较,我们还将报告原始Suhr et al.(2020)数据集的结果。 在这里插入图片描述

5 实验

5.1 测试基准和基础模型

Spider 和Spider-realistic 测试集

Spider (Yu et al., 2018b)是一个复杂的跨数据库Text-to-SQL数据集。它包含基于200个数据库的10k个复杂的问题查询对,其中多个表通过外键连接。此外,我们创建了一个新的现实评估集Spider-Realistic,如第4节所述。我们还纳入了Suhr等人(2020)的原始数据集,以便进行更全面的比较。对于基础模型,我们使用RAT-SQL (Wang et al., 2020),根据提交时间的官方排行榜,这是最先进的模型。为了生成可执行SQL查询,我们修改RAT-SQL中的指针生成器,使其能够从问题中复制值。我们在Spider开发集和现实评估集上使用相同的训练模型进行评估。Yu等人(2018b)包括一些单领域Text-to-SQL的数据集,比如GeoQuery,作为Spider的额外训练数据。在Suhr等人(2020)的指导下,我们只使用原始的Spider数据来训练模型,并丢弃了Yu等人(2018b)等之前的一些作品使用的额外训练数据。我们使用精准匹配(EM)和执行准确率(EX)作为评价指标。在Suhr et al.(2020)的数据集上,我们使用作者发布的官方评估脚本,并报告执行准确性。

WikiSQL

WikiSQL (Zhong et al., 2017)是一个大规模的Text-to-SQL数据集,由超过80k个问题-查询对组成,这些问题-查询对建立在超过30k个维基百科表上。尽管现有模型在该数据集上已经达到了上限性能(Hwang等人,2019年;Yavuz等人,2018),主要因为SQL查询的简单性和可供训练的数据量大,之前的工作也使用该数据集来演示在有限的训练数据下模型的泛化能力(Yu等人,2020;姚等人,2020)。对于基本模型,我们使用SQLova (Hwang et al., 2019),没有执行引导解码。根据官方的排行榜,我们报告LM准确率和EX准确率。

5.2 训练细节

对于所有的实验,我们使用来自Huggingface的BERT实现和来自谷歌5的预先训练的BERT-LARGE模型。对于预训练,我们使用Adam优化器,初始学习率为2e-5,batch大小为48。在这两种情况下,我们都使用 K n e g K_{neg} 并对我们的模型进行5个epoch的预训练。我们使用4个V100的gpu进行预训练,不超过4个小时。

对于Spider和Spider-Realistic的评估集,我们使用RAT-SQL的正式实现,并修改它以生成可执行的SQL查询。我们按照原始设置,对学习率(3e-4, 7.44e-4)和warmup step (5k, 10k)进行超参数搜索。我们使用同样的多项式学习速率调度器,warm up和训练40000个step,batch size大小为24。预训练的编码器(例如BERT)的学习速率是3e-6,并且在warm up时被冻结。

对于WikiSQL,我们使用官方的SQLova实现。我们使用默认设置,主模型的学习速率为1e-3,预训练的编码器的学习速率为1e-5。我们为多达50个epoch的训练,并使用验证集选择最佳的模型。

在这里插入图片描述

5.3 主要结果

Spider

我们首先在表4中显示了Spider验证集的结果。原始的Spider设置假设在训练和验证阶段,只有目标数据库的schema信息是已知的,因为出于隐私考虑,系统可能无法访问数据库的内容。最近,一些工作试图使用数据库内容来帮助理解列,并与NL语句链接。这里我们显示了这两个设置的结果。在第一个只知道schema信息的设置中,我们在RAT-SQL中禁用了基于值的链接模块。从表4中我们可以看到,用STRUG替换BERT-LARGE不断地提高了两种设置下的模型性能。在内容可用的设置下,使用STRUG可以获得与GRAPPA类似的性能,并优于所有其他模型。GRAPPA使用合成数据和更大的可文本语料库进行预训练。但它主要从合成数据中学习归纳偏差,而我们的模型侧重于从并行文本表数据中学习文本表关联知识。在Spider开发集的错误分析中,我们注意到我们的最佳模型8纠正了GRAPPA所做的270个错误预测中的76个,而GRAPPA纠正了我们模型所做的274个错误预测中的80个。这表明这两种预训练技术是互补的,我们希望将它们结合起来可以进一步提高性能。有关不同难度等级及组成部分的成绩,请参阅附录B.1。

在这里插入图片描述

更加真实的验证集

Spider-Realistic验证集的结果如表3所示。首先,我们注意到所有模型在Spider-Realistic上的性能都显著下降,这表明在没有明确提示的情况下推断列是一项具有挑战性的任务,还有很大的改进空间。其次,在所有Spider-Realistic的评估集上,使用STRUG比BERT-LARGE都能带来持续的改进。在Spider-Realistic中,使用STRUG的表现也比GRAPPA好2.9%。在最初的Suhr et al.(2020)设置下,将RAT-SQL与STRUG相结合在所有数据集上都显著优于Suhr et al.(2020),尽管我们没有像他们那样将WikiSQL作为额外的训练数据。第三,对比表4和表3的结果,在更现实的评价集上,使用STRUG比BERT-LARGE有更大的改进。如表1所示,原始的Spider数据集具有较高的列提及率,因此模型可以在不真正理解话语和数据库模式的情况下使用精确匹配的列接地。越真实的评估集越能更好地模拟真实世界的场景,并且包含的这种明确的线索少得多,这使得STRUG学到的文本表对齐知识更有价值。关于Spider-Realistic的案例研究,请参阅第5.4节。

WikiSQL

在这里插入图片描述

表5总结了WikiSQL的结果。在使用完整的训练语料库时,我们注意到使用STRUG可以达到与BERT-LARGE相似的性能。这可能是因为WikiSQL的训练数据量大,而且SQL结构简单。为了更好地证明在训练前学习到的知识能够有效地转移到Text-to-SQL任务中,减少对有监督训练数据的需要,我们还使用随机抽样的训练实例进行了实验。 在这里插入图片描述 在这里插入图片描述

从图4中我们可以看出,在只有1%的训练数据(大约500个样本)的情况下,使用STRUG模型的准确率可以达到0.70以上,大大超过了BERT-LARGE和TaBERT。STRUG对BERT-LARGE进行了改进,直到我们使用了一半的训练数据,其中所有模型的性能几乎与使用完整的训练数据相同。我们还在图5中显示了使用5%的训练数据的训练进度。可见,STRUG也有助于加快训练进度。要了解更多关于子任务的细分结果,请参见附录B.2

人工辅助和自动设定的比较

在所有基准测试中,我们注意到使用自动设置进行预训练的STRUG的实际执行与使用单元格注释的设置类似。这表明了我们的启发式单元格标注的有效性,以及用更多未标注的并行文本表数据预训练STRUG的潜力。

5.4 案例研究

我们比较了RAT-SQL w BERT-Large和w. STRUG(自动)。一些例子如表6所示。在Spider-Realistic的第一个例子中,我们可以看到模型w. BERT-LARGE未能将锦标赛与tourney_name列对齐,这是因为字符串不匹配。在来自IMDB的第二个示例中,尽管模型正确地将James Bond识别为值引用,但它未能将其定位到正确的列,即movie_title。这支持了我们的假设,即使用STRUG有助于提高模型的结构对齐能力。

在这里插入图片描述

6 总结

在本文中,我们提出了一种新颖而有效的基于结构的Text-to-SQL的预训练技术。我们的预训练方法利用了一组使用平行可文本语料库的新颖预测任务,以帮助解决Text-to-SQL中的文本表对齐挑战。我们设计了两种设定来获得预训练的标签,而不需要复杂的SQL查询注释:使用人类标记的单元格值关联,或利用表内容。在这两种情况下,STRUG在所有的评估集上都显著优于BERT-LARGE。与此同时,尽管STRUG惊人地有效(仅使用120k对文本表进行预训练),并且在Spider上的表现与TaBERT(使用26m个表及其英语上下文)和GRAPPA(使用475k个合成示例和391.5k个来自现有文本表数据集的示例)等模型相当,我们认为,它是对这些现有的文本表训练前方法的补充。未来,我们计划进一步扩大训练前语料库的规模,并探讨如何将MLM数据和合成数据结合起来。

道德考虑(Ethical Considerations)

数据集

在这项工作中,我们将现有的表格到文本生成数据集ToTTo重新用于我们的预训练。我们通过弱监督为我们的三个预训练任务获取标签,它只使用原始的句子表对,或单元格注释和修改的描述,这些已经包含在ToTTo数据集。因此,不需要额外的人力来收集我们的预训练语料库。我们还为基于Spider开发集的Text-to-SQL创建了一个更现实的评估数据集。特别是,我们首先从Spider开发集中选择一个复杂的子集,然后手动修改NL问题,以删除显式地提到列名。该过程的详细描述可以在第4节中找到。第一作者亲自手工修改了所有的问题,总共有508个例题。

应用

我们关注的是Text-to-SQL的任务,这是为数据库构建自然语言接口的基本任务。这样的接口可以使非专业用户毫不费力地查询数据库。特别地,这里我们将重点放在提高Text-to-SQL模型的结构基础能力上,这在现实世界的用例中是至关重要的。我们使用广泛使用的Spider基准测试和几个更真实的数据集来评估我们的模型。实验结果表明,我们的方法比现有的baseline有显著的改进,特别是在更真实的设置。

计算成本

我们使用4个V100 GPU进行预训练,使用1个V100 GPU在Spider和WikiSQL上微调Text-to-SQL的模型。我们的方法的一个优点是它的效率。在实验中,我们只对模型进行了5个epoch的预训练,在4小时内完成。相比之下,最大的TaBERT模型(Yin et al., 2020)在128 Tesla V100 gpu上使用混合精度训练,需要6天时间来训练10个epoch。

猜你喜欢

转载自juejin.im/post/7104266412331368461