GRAPPA: Grammar-Augmented Pre-Training for Table Semantic Parsing
ICLR 2021
https://openreview.net/forum?id=kyaIeYj4zZ or http://arxiv.org/abs/2009.13845v1
Abstract
提出了一种有效的表语义分析(table semantic parsing)预训练方法——GRAPPA,它在文本数据和表数据的联合表示中学习组合归纳偏见。
通过同步上下文无关语法(SCFG)在高质量的表上构造合成的 question-SQL pairs。在合成数据上对GRAPPA进行预训练,将表语义分析中常见的重要结构特性注入预训练的语言模型中。为规范预训练过程,对几个现有的 table-and-language datasets 进行掩码语言建模(MLM)。
当与 base 语义解析器结合时,GRAPPA在四种流行的全监督和弱监督表语义解析任务上获得了 state-of-the-art 结果。
预训练模型:https://huggingface.co/Salesforce/grappa_large_jnt
1 Introduction
由于这些任务需要泛化到新的数据库/表和更复杂的程序,当前的预先训练的语言模型不足以完成的:
- 使用非结构化文本数据预训练的语言模型,在直接应用于表语义解析时,将面临显著的领域转移;
- 传统的预训练目标没有考虑表语义解析中数据(例如,question和SQL)的潜在组合性。
因此,试图从结构化的表格数据和非结构化的自然语言句子中共同学习上下文表示,目标是面向表格语义解析。
GRAPPA 主要有两个部分:
- 数据合成:
导出了一个同步上下文自由语法(SCFG),用于将自然语言从现有的 text-to-SQL 数据集(涵盖最常用的question-SQL patterns)映射到SQL查询。如图1,通过抽象tables
fields
values
SQL operations
来创建一个question-SQL模板。通过在随机选择的表上执行这个模板,可以创建大量合成的 question-SQL pairs 。 - 预训练:
使用一个 text-schema linking 目标对这些合成的 question-SQL pairs 及其对应的表进行训练,该目标预测 column 在 SQL 中的语法角色。以此来激励模型识别 table schema components(可以作为逻辑形式的成分)。为了防止对合成数据的过拟合,考虑几个大规模、高质量的表和语言数据集上的掩码语言建模(MLM)损失,并在
保留原始自然语言表示
和通过合成数据注入合成归纳偏差
之间进行平衡。
使用来自现有表和语言数据集的475k合成示例和391.5k示例对GRAPPA进行预训练。
2 METHODOLOGY
2.1 Motivation
语义解析数据是组合性(compositional):自然语言表述通常与一些形式表示(formal representations )相关,如逻辑形式和SQL查询。因此,扩充的例子可以用来教导模型在给定的训练例子之外进行归纳。
本论文不是直接在扩充数据上训练语义分析器,而是首次在预训练中使用合成例子,以便向LMs注入合成归纳偏差,并表明如果仔细解决过拟合问题(在预训练期间平衡真实和合成示例),它实际上是有效的。
很多工作表明:在跨域语义解析任务上,数据扩增并不是总能带来显著性能提升。
2.2 数据合成 with SCFG
- 语法归纳:
给定SPIDER中的一组(x,y)对,其中x和y分别是话语和SQL查询。- 首先为表名、列名、单元格值、操作等定义一组非终结符号。在SQL查询中用它们的非终端类型替换实体/短语,生成一个SQL产生式规则β。
- 然后用相似的SQL产生式规则β对(x,y)对进行分组。通过程序模板对Spider训练实例进行自动分组和统计,选择了大约90个最常用的程序模板β。
- 对于语法中的每个程序模板,随机选择大约4个相应的自然语言问题,用它们相应的非终端类型手动替换实体/短语,以创建自然语言模板α,
- 最后将它们对齐以生成每个生成规则 ROOT → <α,β>。
- 数据扩增:
有了 <α,β> 对,在给定新表或数据库的情况下同时生成伪自然问题和相应的SQL查询。首先采样一个生成规则,并用相应的一个终端替换它的非终端。
2.3 Table Related Utterances
GRAPPA还在human annotated questions over tables
上预训练。
只使用表和上下文作为预训练资源,并丢弃所有其他人工标签,如答案和SQL查询。
2.4 预训练
将 text-to-SQL 看作对每一列的 multi-class classification 任务,可以自然地与MLM目标相结合,以预训练用于语义解析的BERT。
GRAPPA 由 R o B E R T a L A R G E RoBERTa_{LARGE} RoBERTaLARGE 初始化,然后使用两个目标函数进行语言模型预训练:
- 掩蔽语言建模(MLM):希望在自然语言和表格标题之间有一个自我关注机制。mask概率为15%。
- SQL语义预测(SSP):
添加一个辅助任务来训练列表示:给定一个自然语言语句和表标题,任务是预测一个列是否出现在SQL查询中以及触发什么操作。将所有的SQL序列标签转换为各列的操作分类标签(operation classification label
)。
如图1中,“locations”列的operation classification label
是"SELECT AND GROUP BY HAVING"。在本实验中,总共有254个潜在的 operation class。
对于索引为
i
\mathbf{i}
i 的列或表,使用它前面的特殊标记 </s>
的编码
x
i
\mathbf{x}_{\mathbf{i}}
xi 作为它的表示,来预测它的相应操作。
对
x
i
\mathbf{x}_{\mathbf{i}}
xi 应用两层前馈网络,然后是GELU激活层和归一化层,每个列
y
i
\mathbf{y}_{\mathbf{i}}
yi 的最终矢量表示:
h
=
LayerNorm
(
GELU
(
W
1
⋅
x
i
)
)
y
i
=
LayerNorm
(
GELU
(
W
2
⋅
h
)
)
\begin{array}{l} \mathbf{h}=\text { LayerNorm }\left(\operatorname{GELU}\left(W_{1} \cdot \mathbf{x}_{\mathbf{i}}\right)\right) \\ \mathbf{y}_{\mathbf{i}}=\text { LayerNorm }\left(\operatorname{GELU}\left(W_{2} \cdot \mathbf{h}\right)\right) \end{array}
h= LayerNorm (GELU(W1⋅xi))yi= LayerNorm (GELU(W2⋅h))将391k个自然语言语句和475k个合成例子混合在一起作为最终的预训练数据。在预训练期间随机抽样,如果所选的例子是自然语言问题
,则计算 MLM loss,若是合成例子
则计算 SSP loss。
3 EXPERIMENTS
两种不同的实验设置,fully supervised
和 weakly supervised
。
4 EXPERIMENTAL RESULTS
5 ANALYSIS
- 预训练目标:
对合成数据的预训练应该适当地正规化(一起使用SSP+MLM),以便在保持原始BERT编码能力(MLM)和注入成分归纳偏差(SSP)之间取得平衡,否则,改进是不稳健和有限的(仅使用SSP或MLM)。 - 泛化:
虽然SCFG是基于SPIDER设计的,但也能提高其他数据集的性能。从更广泛的数据集(如WIKITABLEQUESTIONS)中整合规则将进一步提高性能。 - 预训练数据:
GRAPA(MLM+SSP)始终优于其他设置,表明在 human annotated data 上使用MLM是重要的。 - Pre-training vs. training data augmentation:
直接在模型上增加合成数据不会提高甚至降低性能(对合成数据的过拟合)。相比之下,我们的预训练方法可以有效地利用大量的合成数据,提高下游任务的性能,且收敛更快。
6 RELATED WORK
7 CONCLUSION AND FUTURE WORK
可继续研究的地方:
- 当前的工作依赖于 hand-crafted grammar ,会产生不自然的的 questions。
- 改变预训练示例的数量来研究两个目标(MLM 和 SSP)的相对影响。
- 合成数据:利用更具组合性(具有更大的逻辑形式覆盖范围)的语法。