论文笔记:HIE-SQL: History Information Enhanced Network for Context-Dependent Text-to-SQL Semantic Parsing
目录
导语
论文的核心亮点如下:
- 提出了SQLBERT用于编码双模态的NL语句和SQL表示
- 提出将预测时的schema linking时加入上一句预测的SQL语句,称为History Information Enhanced(HIE)
- 使用R-Drop提升了一些性能
- 会议:ACL 2022 Findings
- 地址:https://openreview.net/pdf?id=fX8TXF-LD21
摘要
近年来,上下文相关(Context Dependent)的Text-to-SQL语义解析在交互过程中将自然语言转换为SQL,引起了人们的广泛关注。以前的工作利用了来自交互历史语句或之前预测的SQL查询的上下文依赖信息,但由于自然语言和逻辑形式SQL之间的不匹配,无法同时利用这两种信息。在这项工作中,我们提出了一个历史信息增强的Text-to-SQL模型(HIE-SQL),以利用来自历史语句和最后一次预测SQL查询的上下文依赖信息。针对这种不匹配,我们将自然语言和SQL作为两种模态,提出了一个双模态预训练模型来弥补它们之间的差距。此外,我们还设计了一个模式链接图来增强语句和SQL查询与数据库模式的连接。我们展示了历史信息增强方法显著提高了HIE-SQL的性能,它在写入时在两个上下文相关的Text-to-SQL基准测试SparC和CoSQL数据集上实现了最新的结果。
1 简介
对话形式的数据库查询是Text-to-SQL语义解析的一个新的研究热点,并使我们在工业应用中受益。以前的大多数工作都集中在上下文无关的Text-to-SQL任务上,并提出了许多具有竞争力的模型。一些模型在上下文相关的任务上通过简单地将交互历史信息添加到输入的最后获得了令人惊讶的表现。尤其是PICARD (Scholak等人,2021年)在Spider和CoSQL两种测试中都实现了最先进的性能。然而,任何事物都有两面性。这意味着在上下文相关的Text-to-SQL语义解析中对上下文信息的探索还不够。
与上下文无关的text-toSQL语义分析相比,上下文相关的text-toSQL语义分析更具挑战性,因为话语中的各种依赖类型使模型容易出现解析错误。R2SQL认为,两个相邻的话语之间的不同上下文依赖关系需要模型谨慎地在话语和数据库模式之间建立动态连接。然而,语境信息并不仅仅来自上一句话语。如图1所示,对于 S 3 S_3 S3的预测,其依赖于用户话语(即Question)中的"the name of the teachers and the courses"。对于长距离依赖,一个可行的建议是从先前预测的SQL查询中继承上下文信息。但是,由于自然语言和逻辑形式的SQL之间的不匹配,利用先前预测的查询并不是一件容易的事情。正如Liu等人(2020)得出的结论,对上一个预测的SQL查询和话语进行粗略编码是不可能的,而在对13种现有上下文建模方法的评估中,将交互历史话语和当前话语连接起来似乎具有惊人的竞争性。
在本文中,我们提出了一个历史信息增强网络,以充分利用历史交互语句和以前的预测SQL查询。我们首先将逻辑形式的SQL查询作为使用自然语言的另一种形式。我们提出了SQLBERT,这是一个用于SQL和自然语言的双模预训练模型,它能够捕获语义连接并弥合SQL和自然语言之间的差距。它生成通用表示,并支持上下文相关的Text-to-SQL语义解析。
此外,我们提出了一个历史信息增强的模式链接图来表示当前话语、交互历史话语、最后一次预测查询和相应的数据库模式之间的关系。考虑到在互动中来回转换话题是很奇怪的,我们假设长期依赖是连续的。例如, S 3 S_3 S3依赖于 U 1 U_1 U1意味着在图1中 S 2 S_2 S2也依赖于 U 1 U_1 U1。在这种情况下,我们可以利用上次预测查询的长期依赖性。因此,与之前仅包含语句和数据库模式的模式链接图不同,上一个预测查询参与了我们的图。此外,我们在图式连接图中区分了当前话语和互动历史话语。我们使用相对自我注意机制对图式链接关系进行编码。
在我们的实验中,提出的SQLBERT方法和历史信息增强的模式链接大大提高了我们的模型的性能。在撰写本文时,我们的模型在两个大型跨域上下文相关的text-to-SQL排行榜上都排名第一,SparC和CoSQL。具体来说,我们的模型在SparC上的问题匹配准确率为64:6%,交互匹配准确率为42:9%,在CoSQL上的问题匹配准确率为53:9%,交互匹配准确率为24:6%。
2 相关工作
Text-to-SQL的语义解析是一个从自然语言到逻辑语言的语义解析研究过程。近年来,与上下文无关的Text-to-SQL语义分析得到了广泛的研究。Spider是一个著名的数据集,用于复杂的、跨域上下文独立的Text-to-SQL任务。一些工作应用图神经网络对数据库模式进行编码。Xu等人(2021)成功地将深度转换器应用于上下文无关的text-to-SQL任务。Yu等人(2018a)使用基于树的解码器来匹配SQL语法。Rubin和Berant(2021)采用自底向上的方法改进了基于树的解码器。Scholak等人(2021)通过精心设计的限制规则改进基于序列的解码器。Guo等人(2019)和Gan等人(2021)提出了SQL中间表示,以弥合自然语言和SQL之间的差距。Lei等人(2020)研究了模式链接在文本到sql语义解析中的作用。Wang等人(2020)提出了一个统一的框架来捕捉模式链接。Lin等人(2020)将模式链接表示为一个标记序列。Cao等人(2021)通过利用模式链接图及其对应的线图进一步集成非局部和局部特征。此外,许多以前的工作的重点是训练预模型的上下文无关的Text-to-SQL语义解析。
随着上下文相关的Text-to-SQL语义分析越来越受到重视,现有的研究工作主要集中在上下文相关的Text-to-SQL语义分析上。SparC和CoSQL数据集是专门为该任务提出的。EditSQL和IST-SQL专注于利用上一个预测查询的优势来预测当前查询。EditSQL试图从上一个预测查询中复制重叠标记,而IST-SQL提出了一种交互状态跟踪方法来对来自最后一个预测查询的信息进行编码。IGSQL和R2SQL通过上下文感知的动态图利用了当前话语、交互历史话语和数据库模式之间的上下文信息。值得注意的是,R2SQL通过将模式图与交互话语中的标记连接起来来模拟信息。Yu等人(2021b)创造性地提出了一个上下文感知的预训练语言模型。然而,对于上下文相关的Text-toSQL任务,充分利用交互历史语句和预测查询的问题仍然存在。
3 HIE-SQL
首先,我们正式定义多轮对话Text-to-SQL的语义解析问题。在本节的其余部分,我们将详细介绍历史信息增强的Text-to-SQL模型(HIE-SQL)的体系结构。
3.1 预备知识
任务定义 给出用户当前的Question语句 u τ u_{\tau} uτ、交互历史 h = [ u 1 , u 2 , ⋯ , u τ − 1 ] h=[u_1, u_2, \cdots, u_{{\tau}-1}] h=[u1,u2,⋯,uτ−1]和数据库schema D = < T , C > D=<T,C> D=<T,C>,我们的任务目标是生成当前轮次对应的SQL语句 s τ s_{\tau} sτ
模型架构 图2展示了HIE-SQL的Encoder-decoder框架,我们将介绍以下四个模块:
- Multimodal Encoder,以多模态方式编码SQL查询和自然语言上下文
- SQLBERT,一个用于SQL和自然语言的双模态预训练编码器
- HIE-Layers,编码了语言模型输出的所有元素之间预定义的模式链接关系
- Decoder,生成SQL查询作为抽象语法树。
3.2 Multimodal Encoder
由于SQL和自然语言之间存在巨大的语法结构差异,使用单一语言模型同时对两种语言进行编码增加了训练模型的难度和成本。受Tsimpoukelli等人为了解决多模态问题的启发,我们构建了一个额外的预训练编码器,名为SQLBERT(我们将在下一节详细介绍它),以预编码SQL查询。然后,我们学习一个参数
W
∈
R
N
×
M
W\in R^{N\times M}
W∈RN×M来将N维的SQL语句的embedding映射到语言模型的M维的token嵌入空间:
其中,
f
(
⋅
)
f(\cdot)
f(⋅)是SQLBERT最后一层的隐层状态。
我们按
x
=
(
[
C
L
S
]
,
U
,
[
C
L
S
]
,
S
,
[
S
E
P
]
,
T
,
[
S
E
P
]
,
C
)
x=([\mathrm{CLS}],{U},[\mathrm{CLS}],S,[\mathrm{SEP}],T,[\mathrm{SEP}],C)
x=([CLS],U,[CLS],S,[SEP],T,[SEP],C)的格式输入给HIE-SQL。
通过语言模型的嵌入层,将x中所有特殊的分隔符标记和语言词标记转换为词嵌入。收集自然语言和SQL的嵌入,我们将它们放到语言模型中的self-attention块中。在训练阶段,我们直接将上一轮的gold SQL查询作为输入SQL查询,在第一轮时将S设为空。在推理阶段,我们在最后一轮采用了由HIE-SQL生成的SQL查询。
3.3 SQLBERT
如上所述,我们将SQL查询视为另一种模式,它可以提供上一轮SQL查询的信息作为模型的参考。因此,我们需要一个编码器来提取SQL查询的表示。
模型架构 考虑到多模态预训练模型的成功,例如语言-图像的ViLBERT和自然语言和编程语言的CodeBERT,我们提出了一个用于自然语言和SQL的双模态预训练模型SQLBERT。我们使用与RoBERTa相同的模型架构开发SQLBERT。参数总数为125M。
输入格式 如图3所示的训练方法,我们设置了与CodeBERT相同的输入。为了减少训练的难度,解决自然语言和模式之间的不一致,我们在SQL查询和问题的连接中附加了与问题相关的数据库模式。我们将整个输入序列表示为
x
=
(
[
C
L
S
]
,
s
1
,
s
2
,
.
.
.
s
n
,
[
S
E
P
]
,
q
1
,
q
2
,
.
.
.
q
m
,
[
S
E
P
]
,
t
1
:
c
11
,
c
12
,
…
,
[
S
E
P
]
,
t
2
:
c
21
,
…
,
[
S
E
P
]
,
…
)
x=(\left[\mathrm{CLS}\right],s_{1},s_{2},...s_{n},\left[S\mathrm{EP}\right],q_{1},q_{2},...q_{m},\left[S\mathrm{EP}\right], t_{1}\ :\ c_{11},c_{12},\ldots,\ [\,S\mathrm{EP}\,]\;,t_{2}\ :\ c_{21},\ldots,\,[\,\mathrm{SEP}\,]\;,\ldots)
x=([CLS],s1,s2,...sn,[SEP],q1,q2,...qm,[SEP],t1 : c11,c12,…, [SEP],t2 : c21,…,[SEP],…)
其中s、q、t和c分别是SQL查询、问题、表和列的token表示。
训练目标 SQLBERT的主要训练目标是遮罩语言建模(MLM)。值得注意的是,我们只mask SQL查询的标记,因为我们只需要SQLBERT来在下游任务中对SQL查询进行编码。具体来说,我们利用了一个特殊的目标引用span mask(Sun et al., 2019),在SQL子句中采样除保留词(如SELECT、FROM、WHERE)外的15%独立span,旨在避免泄漏答案,帮助SQLBERT更好地学习SQL的信息结构。在训练阶段,我们采用动态mask策略,随机打乱原模式中表和列的顺序。我们将span mask预测损失描述为
θ代表模型参数,
s
k
m
a
s
k
s_k^{mask}
skmask是SQL中被mask掉的span,
s
/
m
a
s
k
s^{/mask}
s/mask是未掩码部分。
训练数据 与SCoRe使用多种开源的text-to-SQL数据集(WIKITABLES、WikiSQL、Spider、SparC和CoSQL)和数据合成方法来获得大量的预训练数据不同,我们只使用包括Spider、SparC和CoSQL在内的数据集来训练SQLBERT。对于每个示例,我们只使用其问题、SQL查询和相应的数据库模式。至于SparC和CoSQL,这是一个上下文依赖的版本,我们只是将当前话语与历史话语连接起来,构建问题输入。训练数据集的大小为34175。
3.4 HIE层
Schema-Linking Graph 为了显式的编码复杂的数据库schema之间的关系。我们将其转换为一个有向图
G
=
⟨
V
,
E
⟩
{\mathcal{G}}\ =\ \langle\mathcal{V},\mathcal{E}\rangle
G = ⟨V,E⟩,其中
V
=
C
∪
T
{\mathcal{V}}=C\cup T
V=C∪T,
E
⟩
\mathcal{E}\rangle
E⟩表示节点之间的预先连边关系,如主键-外键关系。此外,我们还考虑了在当前语句、交互历史语句和上一次预测SQL查询的上下文中与模式的不可见链接。具体来说,我们定义了上下文相关的模式链接图
G
c
=
⟨
ν
c
,
ξ
c
⟩
{G}_{c}=\langle\nu_{c},\xi_{c}\rangle\,
Gc=⟨νc,ξc⟩其中,
V
c
=
C
∪
T
∪
U
∪
H
∪
S
{\mathcal V}_{c}=C\cup T\cup U\cup H\cup S
Vc=C∪T∪U∪H∪S,
E
c
=
E
∪
E
U
↔
D
∪
E
H
↔
D
∪
E
S
↔
D
{\mathcal{E}}_{c}={\mathcal{E}}\cup{\mathcal{E}}_{U\leftrightarrow D}\cup{\mathcal{E}}_{H\leftrightarrow D}\cup{\mathcal{E}}_{S\leftrightarrow D}
Ec=E∪EU↔D∪EH↔D∪ES↔D。表1列出了其他的关联边。在图4中,我们展示了提议的模式链接图的一个示例。
Graph Encoding RAT-SQL展示了一种有效的编码token-level的图关系的方式。在计算Attention时,添加relation到其中,即
HIE-Layers由8个Transformer层组成,其自我注意模块如上所述。特别地,我们对上面定义的每种类型的边初始化一个学习的嵌入。对于每个输入样本,我们建立一个关系矩阵
R
⊆
(
L
×
L
)
\textstyle{R}\,\subseteq\,(L\times L)
R⊆(L×L),其中L是输入标记的长度。R(i;j)表示第i个和第j个输入标记之间的关系类型。在计算相对注意时,我们设
r
i
j
K
=
r
i
j
V
=
R
e
(
i
,
j
)
r_{i j}^{K}=r_{i j}^{V}=R_{e}^{(i,j)}
rijK=rijV=Re(i,j),其中
R
e
(
i
,
j
)
R_{e}^{(i,j)}
Re(i,j)是
R
(
i
,
j
)
R^{(i,j)}
R(i,j)的对应嵌入。
3.5 Decoder
为了构建HIE-SQL的解码器,我们应用了Wang等人提出的方法,通过使用LSTM输出解码器动作序列,以深度优先遍历顺序生成SQL作为抽象语法树。
3.6 Regularization Strategy
我们引入了R-Drop,一种简单的正则化策略,以防止模型的过拟合。具体来说,我们将每个输入数据
x
i
x_i
xi输入到我们的模型中,遍历两次,损失函数如下:
其中KaTeX parse error: Undefined control sequence: \cal at position 8: -l o g{\̲c̲a̲l̲ ̲P}_{1}(y_{i}|x_…、KaTeX parse error: Undefined control sequence: \cal at position 8: -l o g{\̲c̲a̲l̲ ̲P}_{2}(y_{i}|x_…为输入 x i x_i xi在所有解码器步骤的两个输出分布, L N L L i {{L}}_{N L L}^{i} LNLLi为解码器动作的负对数似然学习目标, L K L i {{L}}_{KL}^{i} LKLi为这两个输出分布之间的双向Kullback-Leibler (KL)散度。
4 实验
4.1 实验设置
模型的权重由GRAPPA初始化。在SParC和CoSQL上进行评测,指标为QM和IM。
4.2 实验结果
实验结果如下表所示,
在不同轮次表现对比如下:
4.3 Ablation Study
作者首先验证了去掉各个部分的表现,
以及使用R-Drop的有效性。
4.4 Case Study
这里与RAT-SQL进行了对比。
5 总结
我们提出了HIE-SQL,这是一种历史信息增强的上下文依赖的文本到SQL模型,它的目标是从交互历史语句和上一次预测的SQL查询中显式地捕获上下文依赖。在提出的双模预训练模型的帮助下,尽管自然语言和逻辑形式的SQL不匹配,但SQLBERT、HIE-SQL在语句和预测SQL之间架起了桥梁。此外,我们还引入了一种模式链接的方法来增强语句、SQL查询和数据库模式之间的连接。
总之,HIE-SQL在与上下文相关的Text-toSQL任务上实现了一致的改进,特别是在交互匹配度量方面。HIE-SQL在两个著名的上下文相关的Text-to-SQL数据集SparC和CoSQL上实现了最优的结果。