GP: Context-free Grammar Pre-training for Text-to-SQL Parsers
Journal of Artificial Intelligence(JAIR)
https://arxiv.org/abs/2101.09901v2
Note:这篇文章的 related work 很不错。
Abstract
- 为了充分学习SQL语法的内部关系,对解码器进行了独立于编码器的预训练。提高了模型的鲁棒性,加快了模型的收敛速度。—— 核心
- 采用 Flooding level 来获得非零训练损失,避免局部极值问题。
- 基于前人的 GRAPPA 和 RAT-SQL 模型对句子进行编码,在 Spider 上获得了更好的性能(72.8% dev, 69.8% test)。
1. Introduction
- 创造性地提出了一种面向文本到sql的上下文无关语法预训练(GP)方法。
由于SQL语法框架与特定的自然语言无关,首先在没有编码器信息的情况下预先训练解码器。 - 在预处理模块中,我们使用字符串匹配来发现问题中出现的值,并将其添加到原始输入序列的等效列后面。
- 在损失函数的设计上,采用了 Flooding level 作为避免局部最小值的新方法。
2. Related Works
3. Methodology
3.1 Context-free Grammar Pre-training(GP)
目前的方法将代码生成视为序列生成的任务,未考虑目标编程语言的语法。基于语法规则,SNM(Syntactic Neural Model)本质上是一种通过限制解码器的搜索空间来提高模型准确性的方法。
在解码器端预训练参数,作为输入,编码器的语义信息被零向量代替。
RAT-SQL利用LSTM输出一系列解码器动作的概率方程为:
Pr
(
P
∣
y
)
=
∏
t
Pr
(
a
t
∣
a
<
t
,
y
)
\operatorname{Pr}(P \mid y)=\prod_{t} \operatorname{Pr}\left(a_{t} \mid a_{<t}, y\right)
Pr(P∣y)=t∏Pr(at∣a<t,y)在GP中,
y
y
y 总是
[
0
]
[0]
[0],
a
<
t
a_{<t}
a<t是 all previous actions。
相应地,LSTM的状态更新策略将被修改为:
m
t
,
h
t
=
f
L
S
T
M
(
[
a
t
−
1
∥
[
0
]
∥
h
p
t
∥
a
p
t
∥
n
f
t
]
,
m
t
−
1
,
h
t
−
1
)
m_{t}, h_{t}=f_{L S T M}\left(\left[\mathbf{a}_{\mathbf{t}-\mathbf{1}}\|[\mathbf{0}]\| \mathbf{h}_{\mathbf{p}_{\mathbf{t}}}\left\|\mathbf{a}_{\mathbf{p}_{\mathbf{t}}}\right\| \mathbf{n}_{\mathbf{f}_{\mathbf{t}}}\right], \mathbf{m}_{\mathbf{t}-\mathbf{1}}, \mathbf{h}_{\mathbf{t}-\mathbf{1}}\right)
mt,ht=fLSTM([at−1∥[0]∥hpt∥apt∥nft],mt−1,ht−1)其中,
符号 | 意义 |
---|---|
m t m_t mt | 第 t t t步的LSTM cell state |
h t h_t ht | 第 t t t步的LSTM output |
a t − 1 a_{t-1} at−1 | 前一个动作的embedding |
p t p_t pt | 展开当前节点的父AST节点对应的步骤 |
n f t n_{ft} nft | 当前节点类型的embedding |
[ 0 ] [0] [0] | 代替了之前的 z t z_t zt(上下文表示即 multi-head attention on h t − 1 h_{t-1} ht−1 over y y y) |
由于GP不再依赖语义信息,它无法预测列或表的名称。为了不改变RAT-SQL的框架,假设每个示例只有一列和一个表,即:
Pr
(
a
t
=
S
E
L
E
C
T
COLUMN
[
0
]
∣
a
<
t
)
=
1
Pr
(
a
t
=
S
E
L
E
C
T
T
A
B
L
E
[
0
]
∣
a
<
t
)
=
1
\begin{array}{c} \operatorname{Pr}\left(a_{t}=S_{E L E C T} \operatorname{COLUMN}[0] \mid a_{<t}\right)=1 \\ \operatorname{Pr}\left(a_{t}=S_{E L E C T} T A B L E[0] \mid a_{<t}\right)=1 \end{array}
Pr(at=SELECTCOLUMN[0]∣a<t)=1Pr(at=SELECTTABLE[0]∣a<t)=1为了防止过拟合,解码器语法预训练步骤的数量被限制为300。
3.2 Question-Schema Serialization and Encoding
只在提到的列与问题精确匹配时才向它们添加值。