【论文阅读】SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising

【论文阅读】SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising

1. 来源

在这里插入图片描述

2. 介绍

在 WikiSQL 数据集的测试中,大多数方法都使用预定义的草图槽来解决文本到sql的挑战,并构建复杂的子任务来填充这些槽。

  • 这些方法虽然取得了很好的结果,但其模型结构过于复杂。

在本文中,作者提出了一种简单而有效的方法,使自回归的序列到序列模型能够实现稳健的 文本到sql 生成。

  • 作者没有将 文本到sql 的任务定义为槽填充,而是建议使用Schema aware Denoising(模式感知去噪,SeaD)训练序列到序列模型。
  • 该模型由两个去噪目标组成,训练模型恢复输入或从两种新的侵蚀和洗牌噪声预测输出。这些建模无关的去噪目标在序列到序列生成过程中作为结构数据建模的辅助任务。
  • 此外,作者提出了一种子句敏感的执行引导(EG)解码策略,以克服生成模型中EG解码的局限性。
  • 实验表明,该方法在模式链接和语法正确性方面都提高了序列到序列模型的性能,并建立了新的WikiSQL基准技术。作者的工作表明,序列到序列模型解决 文本到sql 的能力可能被低估了,可以通过专门的去噪任务来增强。

3. 模型

在这里插入图片描述

3.0 问题定义

给定自然语言问题 Q Q Q 和数据库模式 S S S,作者的目标是获得相应的SQL查询 $ Y$。这里的自然问题 Q = { q 1 , . . . , q ∣ Q ∣ } Q = \{q_1, ... ,q_{|Q|}\} Q={ q1,...,qQ} 表示一个单词序列,模式 S = { c 1 , . . . , c ∣ S ∣ } S = \{\mathbf c_{1}, ..., \mathbf c_{|S|}\} S={ c1,...,cS}由一组列组成,其中每一列 c i = { c 1 , . . . , c ∣ c i ∣ } \mathbf c_i = \{c_1, ..., c_{|c_i|}\} ci={ c1,...,cci}是一个单词序列。 Y = y 1 , . . . , y ∣ Y ∣ Y = y_1, ..., y_{|Y|} Y=y1,...,yY 表示标记级的原始SQL序列。作者采用直接自回归生成来处理这个任务,即逐个标记预测SQL序列标记。作者选择 Transformer 作为作者的基础架构,这是一个广泛采用的seq2序列翻译和生成任务。在本节中,作者首先介绍将文本到sql转换为典型的seq2seq任务的示例公式,然后简要介绍带有指针生成器的变压器架构。然后描述了所提出的模式感知去噪方法和子句敏感的EG解码策略。

3.1 采样公式

给定训练样本 { X i , Y i } \{X_i, Y_i\} { Xi,Yi} i = 1 , . . . , N i = 1, ..., N i=1,...,N), X = { Q , S } X = \{Q, S\} X={ Q,S},其中 Q Q Q 表示 NL 序列, S S S 表示模式集, Y Y Y 是SQL序列。样品公式是一个函数:
在这里插入图片描述
它将异构数据转换为成对的令牌序列。它是通过填充模板来执行的,该模板可以用来指导seq2seq模型生成符合不同上下文的不同类型的标记。对于模式公式,每个列名都以一个单独的特殊标记 <coli> 作为前缀,其中i表示模式集中的第h列。每个列的列类型也被附加到名称序列中,以形成模式列 <coli> col name: col type。模式中的所有列都被制定并连接在一起,以组成模式的输入序列。模式序列与NL序列进一步连接以进行模型输入。作者通过周围的NL序列带括号字符 [] 中提到的模式名称,明确地引入了对NL序列的模式提及对齐,以改进模式链接的学习。

对于SQL序列,作者使用原始SQL查询初始化它,并对其进行一些修改:

  • 用 “`” 标记包围SQL查询中的实体和值,如果存在,则删除其他环境;
  • 在模式中使用相应的单独标记替换 col 实体;
  • 在标点符号和单词之间插入空格。

所制定的 SQL 序列如图1所示。格式化过程改进了源序列和目标序列的标记化序列之间的一致性,并有助于模式实体的标识和链接。

3.2 带指针的 Transformer

根据之前关于 seq2seq 语义解析的工作,作者使用 Transformer 作为作者模型的主干。普通的 Transformer 生成带有前馈层的令牌,该层计算目标词汇表上的非标准化分数。然而,在从文本到sql的任务中,大多数提到的模式和值都可以从输入序列中提取出来。因此,作者在架构中采用了混合指针生成器网络(Jia和Liang,2016)来从目标词汇表 V V V 中生成标记或从输入上下文中复制标记。

在推理过程中,输入序列 X X X 首先被编码为一个隐藏状态 H e n c H_{enc} Henc 序列。然后,解码器根据先前生成的序列和编码的输出生成步骤 t t t 的隐藏状态 h d e c h_{dec} hdec V V V 的未归一化分数 s c o r e s v = { s 1 , . . . , s ∣ V ∣ } score s_v =\{s_1,..., s_{|V|}\} scoresv={ s1,...,sV} 可以通过前馈层获得。KaTeX parse error: Expected 'EOF', got '}' at position 18: …= \{V_q,V_c,V_s}̲ 是目标词汇表,其中 V q V_q Vq 表示语料库标记词汇表, V c V_c Vc 表示列标记集, V s V_s Vs 表示可用的SQL关键字,如 SELECT、MAX、MIN 等。解码器输出 h d e c h_{dec} hdec 也用于计算输入序列令牌上的非标准化注意分数 s c o r e s = { i 1 , . . . , i ∣ X ∣ } score_s = \{i_1,...,i_{|X|}\} scores={ i1...iX},其中 |X| 是序列长度。

作者连接 s c o r e s v scores_v scoresv s c o r e s score_s scores 得到混合分数 s c o r e h y b r i d = { s 1 , . . . , s ∣ V ∣ , i 1 , . . . , i ∣ X ∣ } score_{hybrid} =\{s_1,...,s_{|V|},i_1,...,i_{|X|}\} scorehybrid={ s1...sVi1...iX},第一个|V|元素代表目标词汇 V 和剩下的 |X| 指针标记指对应的输入令牌。最终的概率分布由 P=softmax( s c o r e h y b r i d score_{hybrid} scorehybrid) 计算,以确定生成过程中的下一个标记。

3.3 模式感知去噪( Schema-aware Denoising)

在这里插入图片描述

类似于掩蔽语言建模和其他去噪任务,作者提出了两个模式感知目标,侵蚀和混淆,即训练模型要么从噪声输入重构原始序列,要么预测损坏的输出。去噪过程如图2所示。

3.3.1 侵蚀(Erosion)

给定输入样本 {Q,S,Y },侵蚀用三个噪声操作的串行组合破坏了模式序列S:

  • 排列。在模式制定过程中对模式列的连接序列进行排列重新排序。
  • 去除。对于每一列,以删除概率提示删除它。
  • 增加。附加概率 p a d d p_{add} padd,从训练数据库中存在的另一个模式中提取列,并将其插入当前模式集中。

在上述所有操作中,分离特殊令牌的顺序保持不变,因此 SQL 查询中相应的匿名实体应该随着模式序列中的侵蚀操作一起更新。特别是,如果 SQL 查询中提到的列实体在侵蚀期间被删除,作者将用屏蔽标记 <unk> 替换 SQL 中相应的列标记,以处理模式信息的缺失。通过对模式和 SQL 序列进行这种联合修改,模型需要识别与 NL 问题真正相关的模式实体,并学会在模式信息不足以组成目标 SQL 时学会提出未知异常。

3.3.2 混淆( Shuffle)

给定输入序列 X ′ = { Q , S } X' = \{Q, S\} X={ Q,S},其中 Q = { Q , Y } Q = \{Q, Y\} Q={ Q,Y},当模式序列 S 固定时,洗牌噪声对源查询中提到的实体序列进行重新排序。去噪目标训练模型,以正确的顺序重建查询序列Q。恢复被打乱的实体顺序的目标是训练模型来捕获不同实体之间的内部关系,从而有助于模式的链接性能。同样值得注意的是,作为一个自我监督的目标,Q和Y都参与在这个去噪任务中,并分别进行训练。虽然作者依赖于SQL查询来识别NL查询中的值实体,但只使用列实体的顺序变换就足以获得很好的性能。由于不需要并行数据,SQL和NL的单语数据语料库可以帮助重新排序任务,这将是这项工作的进一步方向之一。

3.3.3 训练过程

受之前关于去噪自我训练的工作的启发,作者建议训练具有模式感知的去噪目标和主要的 seq2seq 任务。在训练过程中,对于每个训练样本,作者在将其输入模型之前对其应用一个噪声管道。将不同类型的噪声分别应用于样品上。通过对激活概率的控制,它们可以在总体目标中共享相同的权重。这种连续的噪声管道在训练过程中产生随机损坏的样本。它可以防止模型的快速过拟合,并可以产生更好的泛化结果。在实践中,这种简单的组合噪声策略比基于模型的课程方法效果更好。整个过程总结在算法1中。
在这里插入图片描述

3.4 子句敏感的 EG 解码

在文本到SQL任务的推理过程中,预测的SQL可能包含与不适当的模式链接或语法相关的错误。

  • EG解码被提出通过一个环中执行器迭代来修正这些错误。它是通过将候选列表中的SQL查询按顺序输入到执行器中,并丢弃那些无法执行或返回空结果的查询来执行的。
    • 这种解码策略虽然有效,但表明候选列表中的主要分歧集中在图式链接或语法上。直接对波束搜索生成的候选对象执行EG会导致微不足道的改进,因为候选对象由冗余的变化组成,侧重于选择或模式命名等。

这个问题可以通过将大多数预测标记的波束子长度设置为1,并释放那些与模式链接相关的标记(例如,其中)来解决。作者还注意到,在某些情况下,将错误的模式链接与SELECT子句中的一些聚合结合在一起,它们会返回一些简单的结果,如0,从而抑制EG过滤器。

为了缓解这一问题,作者建议在 EG 的选择过程中放弃聚合操作符,以最大限度地提高其有效性。请注意,在这种策略中,包含子句的条件应该放在一起,以确保地面真实SQL结果的有效性。

4. 实验

为了证明该方法的有效性,作者在 WikiSQL 基准测试上对所提模型进行了评价,并与其他最先进的方法进行了比较。

4.1 数据集

WikiSQL作为最大的人类注释数据集,分别由56355、8421 和 15878 对NL-SQL组成,用于训练、验证和推理。所有的真实的SQL查询都保证至少有一个查询结果。每个SQL包含最多包含一个聚合运算符的SELECT子句和最多包含4个条件的其中子句。每个SQL都与数据库中的一个模式相关联。

4.2 实现

作者使用AllenNLP(Gardner等人)和Pytorch(Paszke等人)来实现作者的方法。对于模型体系结构,作者使用12层的 Transformer。每个编码器和解码器中的层的隐藏大小为1024。作者用 Huggingface社区 提供的 bart-large 预训练模型初始化模型权重,并对20个epoch的训练数据集进行微调。训练期间的批处理大小设置为8,梯度积累步长为2。作者选择Adam(Kingma和Ba)作为优化器,并将学习率设置为7e−5,热身步长比为1%。作者在 [1e-4、7e-5、1e-5、5e-6、5e-7] 中寻找作者的模型的最佳学习率。调节时的重量衰减设置为0.01。作者设置了激活概率Pswap = 0.5和Pshuf f le = 0.3,使自我监督和seq2seq目标在训练过程中共享相同的权重。在侵蚀中去除柱的要求设置为0.1。对于验证集上的蓝色度量(Papineni等人),早期停止耐心被设置为5。整个训练过程在一个具有8个NVIDIA V100gpu的 Ubuntu 服务器上花费了大约3个小时。

4.3 基线方法

作者将所提出的方法与以下模型进行比较: (1) SQLNet(Xu等人,2017)是一种基于草图的方法;(2)SQLova(HWwang等人,2019)是一种基于草图的方法,利用预先训练的语言模型进行表示;(3) X-SQL(He等人,2019a)通过上下文嵌入增强结构模式表示;(4)HydyraNet(Lyu等人,2020)将模式链接转换为列匹配和排序;(5) IESQL(Ma et al.,2020)将文本到SQL视为序列标记任务;(6)桥(Lin等。是一种用于建模自然语言问题和相关模式之间的依赖关系的顺序体系结构;(7) SDSQL(Hui et al.,2021)是一个具有显式模式依赖引导模块的多任务模型。

4.4 实验结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 总结

在本文中,作者提出了用新的模式感知去噪目标来训练模型,以提高文本到sql任务的seq2序列生成性能。这些目标分别应用于它们各自的激活概率,这在训练过程中是固定的。为今后的工作,将考虑建立噪声重加权模型。结合所提出的网格敏感的EG解码策略,作者的模型在 WikiSQL 基准测试上取得了最先进的水平。SeaD的成功突出了利用任务导向的去噪目标来增强seq2seq模型的潜力。

猜你喜欢

转载自blog.csdn.net/qq_51392112/article/details/130947172
今日推荐