论文笔记:RAT-SQL: Relation-Aware Schema Encoding and Linking for Text-to-SQL Parsers
目录
笔者按
RATSQL是ACL 2020上的一篇用于解决Spider数据集上Text-to-SQL问题的论文,后续的LGESQL也是在篇论文的基础上改进的。文章的主要创新点在于:
- 在Encoder中加入relation-aware self-attention组成RAT层代替transformer层对输入进行encode,relation一共有33种,每两个单词之间都会有一个relation。利用schema linking同时把显式关系(schema)和隐式关系(question和schema之间的linking)都考虑在encoding中,完善了模型的表示能力。假设一共有R种不同的关系,rij可以定义为R个特征向量的拼接,对于每一种关系,如果xi和xj有这一关系,就将对应的特征向量作为参数进行学习,否则就置为零向量。
- 构造Graph,图顶点集合Vq由三部分组成:column names,table names以及question words。对于column,同时在顶点label中加入column type。边集合Eq 由三部分组成:首先是Database Schema所定义的表连接关系,table和column的包含关系等等;其次是通过schema linking得到的question和schema之间的对应关系;最后是为辅助relation-aware self-attention而定义的Auxiliary Relations。
- 在encoder输出的向量之上通过一系列的预测动作来构造AST(Abstract Syntax Tree):首先,用APPLYRULE来生成基本结构;然后,用SELECTTABLE或者SELECTCOLUMN来完成table name或column name的选择填充。AST生成后,可进一步推断出最终的SQL query。
- 在encoder最后一层计算一个对齐矩阵,用于可视化查看模型在question word和schema word之间的对齐效果
- 论文地址:https://www.aclweb.org/anthology/2020.acl-main.677.pdf
- 会议:ACL 2020
摘要
当将自然语言问题转换为SQL查询以回答来自数据库的问题时,当前的语义解析模型努力将其推广到不可见的数据库模式。泛化的挑战在于(a)以语义解析器可访问的方式对数据库关系进行编码,以及(b)在给定查询中对数据库列及其提及数之间的对齐建模。我们提出了一个统一的框架,基于关系感知的自我注意机制,来处理Text-to-SQL编码器中的模式编码、模式链接和特征表示。在具有挑战性的Spider数据集上,该框架将精确匹配准确率提高到57.2%,比其最好的对手提高了8.7%。再加上BERT,它在Spider排行榜上达到了65.6%的最新性能。此外,我们观察到模型对模式连接和对齐的理解有了质的改进。我们的实现将在https://github.com/Microsoft/rat-sql上公开。
简介
Spider数据集的提出使人们将Text-to-SQL任务的注意力转向“在没有见过的数据库结构上模型的泛化”(generation to unseen database schema)问题。这个泛化问题的挑战主要有三方面:
- 首先,任何Text-to-SQL解析模型都必须将模式编码为适合于解码可能涉及给定列或表的SQL查询的表示形式。
- 其次,这些表示应该编码关于模式的所有信息,比如它的列类型、外键关系和用于数据库连接的主键。
- 最后,模型必须识别用于提到列和表的NL,这可能与训练中看到的参考语言不同。后一个挑战称为模式链接(schema linking)——将问题中的实体引用对齐到预期的模式列或表。
最近的研究多集中于schema encoding,而schema linking相对少一些。如图1所示,它展示了linking任务中的歧义问题。问题中的“model”指的是car_names.model而不是model_list.model中,“cars”实际上指的是cars_data和car_names(但不是car_makers)用于不同表之间使用join连接。为了正确地解析列/表引用,语义解析器必须同时考虑已知的模式关系(例如外键)和问题上下文。
之前的工作将schema中的外键关系使用GNN编码为有向图。尽管这种方式很高效,但有以下缺点:首先,它没有在schema编码时考虑问题的上下文,因此在构建column表示和question词表示之后,很难对schema linking进行推理。其次,它将模式编码期间的信息传播限制为预定义的外键关系图(即信息流只能通过这条路径传播)。
在这篇工作中,我们提出一个统一的框架名为RAT-SQL用于编码数据库schema的结构关系和给定的问题。它使用relation-aware self-attention来将对schema entity(即table和column)和question词的全局推理与对预定义模式关系的结构化推理相结合。通过将RAT-SQL应用到schema encoding和schema linking上,我们取得了很好的结果。
相关工作
最近在Spider数据集上的先进方法使用各种注意体系结构进行question/schema编码,并使用基于AST的结构体系结构进行查询解码。IRNet分别使用LSTM和self-attention对问题和模式进行编码,并使用自定义类型向量进行模式链接。他们进一步使用基于AST的解码器解码中间表示(IR)中的查询,该表示具有比SQL更高层次的抽象。GNN-SQL使用GNN和类似的基于语法的解码器编码schema。这两种方法都强调模式编码和模式连接,但设计了单独的特征技术来扩充词向量(而不是词向量之间的关系)。
与此同时,Bogin等人发布了Global-GNN,一种不同的Spider模式链接方法,它在question词和schema column/table之间应用了全局推理(global reasoning)。全局推理是通过使用question token表示对schema编码的GNN进行限制(通过对节点进行gate操作)来实现的。这与RAT-SQL有两个重要的区别:(a)疑问词表示会影响模式表示,但反之则不会;(b)与其他基于gnn的编码器一样,消息传播仅限于模式引起的边,如外键关系。相反,我们的relation-aware transformer机制允许显式地编码question词和schema元素之间的任意关系,并且使用自我注意对所有输入共同计算这些表示。
Relation-Aware Self-Attention
Relation-aware self-attention实际上就是在计算Self-attention过程中加入一些已知的relation作为prior knowledge。原始的Self-attention计算公式如下:
详细推导可以参考我的博客NLP学习笔记(十)Transformer模型1(Transformer Model (1/2): Attention without RNN)。
而所谓的relation-aware self-attention就是在计算
e
i
j
(
h
)
e_{ij}^{(h)}
eij(h)和
z
i
(
h
)
z_{i}^{(h)}
zi(h)时各自考虑一个附加项,改进后的公式如下:
在这里,
r
i
j
r_{ij}
rij代表了两个输入元素
x
i
x_i
xi和
x
j
x_j
xj。部分关系如下表:
RAT-SQL
问题定义
给出一个自然语言问题
Q
=
(
q
1
,
q
2
,
⋯
,
q
∣
Q
∣
)
Q=(q_1,q_2,\cdots,q_{|Q|})
Q=(q1,q2,⋯,q∣Q∣),其长度为
∣
Q
∣
|Q|
∣Q∣,对应的database schema为
S
=
T
∪
C
S=T \cup C
S=T∪C,目标是生成一个SQL语句
y
y
y。其中
S
S
S包含有多个table和column,
T
=
{
t
1
,
t
2
,
⋯
}
,
C
=
{
c
1
,
c
2
,
⋯
}
T=\{t_1,t_2,\cdots\}, C=\{c_1,c_2,\cdots\}
T={t1,t2,⋯},C={c1,c2,⋯}.每一个table名称可能由多个word组成,即
(
t
i
,
1
,
t
i
,
2
,
⋯
)
(t_{i,1}, t_{i,2},\cdots)
(ti,1,ti,2,⋯),同理每一个column名称
(
c
i
,
1
,
c
i
,
2
,
⋯
)
(c_{i,1}, c_{i,2},\cdots)
(ci,1,ci,2,⋯)。除此之外,每个
c
j
c_{j}
cj都有一个类型域(type field)
τ
\tau
τ来表示这个column的数据类型(TEXT或NUMBER)。我们的目标是生成SQL语句
P
P
P的AST形式。
然后定义两个图。
G
G
G表示数据库schema item构成的有向图。
G
Q
G_Q
GQ表示联合question上下文后的图。
Relation-Aware Input Encoding
各个词向量的初始值通过Glove初始化,如果一个shema item或question word由多个token组成,那么将这些token序列通过一个BiLSTM后获得初始词向量。输入 G Q G_Q GQ的输入可以表示为:
编码器
f
e
n
c
f_{enc}
fenc是由N个relation-aware self-attention层堆叠而成。最后将第N层的输出作为编码器的最终输出。
同时,论文也使用预训练模型BERT来获取初始节点Embedding。同时也添加了许多附加关系,使得节点之间两两互有关系,构成一个完全图。
Schema Linking
Schema linking用于帮助模型对齐column/table中的词语与question中的词语。主要有两种形式的对齐:对齐名称(name matching)和对齐值(value matching)。
Name-Based Linking
Name-based Linking指的是table/column中的单词精确或部分出现在question中。这里我们考虑对question的n-gram(n从1-5)用来匹配。主要考虑是否精确匹配或这个n-gram是某个schema item的子串。
Value-Based Linking
Value-based linking主要是确定question中的某个词是否是数据库表中某列的一个值。这对于模型的表现提升很大。
Memory-Schema Alignment Matrix
论文使用Encoder最后一层的输出来计算一个alignment矩阵,用于可视化schema linking的对齐效果。其计算公式就是Relation-aware Self-attention。
解码器
解码器还是使用一种tree-structured结构。它首先生成SQL对应的AST然后在将AST转回SQL。详情参考A Syntactic Neural Model for General-Purpose Code Generation
实验
在Spider上的结果
在Spider数据集上实验结果如下:
在各个难度子集上的结果如下:
同时,文章进行了Ablation Study,结果如下:
结果显示,作者所使用的这几部分对于结果的提升都是很大的。
在WikiSQL上结果
作者也尝试在WikiSQL数据集上进行了评估。实验结果如下:
可以看到,模型相比于WIkiSQL上一些单纯的"slot filling"的方法也取得了具有竞争性的表现。
讨论
对齐效果
我们将之前的Alignment matrix进行可视化。
图中展示了模型对图1示例生成的对齐。对于引用列的三个单词((“cylinders”, “model”, “horsepower”),对齐矩阵正确地标识了它们对应的列。其他单词的对齐受到这三个关键字的强烈影响,导致稀疏的span-to - column对齐,例如“largest horsepower” 到 horsepower.。表cars_data和cars_names是由单词cars隐式提到的。对齐矩阵成功地推断使用这两个表而不是car_makers,因为它们包含了所提到的三个列。
使用Schema Linking的必要性
这里作者做了“Oracle experiment”(注:所谓Oracle experiment一个解释如下“An Oracle experiment is used to compare your actual system to how your system would behave if some compoent of it always did right thing.”即如果模型的某些部分没有任何误差完美实现了其功能后对模型的整体性能的影响,),结果如下:
这里的Oracle columns指的是总是给模型提供正确的table/column,Oracle sketch指的是给出正确的AST结构。可以看到,如果都可以正确给出,模型可以达到99.4的准确率,证明了模型中的语法基本可以覆盖所有的Spider中的例子。
误差分析
主要有三种误差:
- 18%的预测误差实际上是当前语句的等价实现。(例如ORDER BY C LIMIT 1 vs.
SELECT MIN©) - 39%的错误包涉及SELECT子句中错误、缺失或多余的列。
- 29%的错误丢失了WHERE子句。
结论
尽管对Text-to-SQL的解析进行了积极的研究,但许多当代模型都在努力学习给定数据库模式的良好表示,以及正确链接问题中的column/table引用。这些问题是相关的:编码和使用schema中的column/table,模型必须推断它们在问题上下文中所扮演的角色。在这项工作中,我们提出了一个统一的框架来解决schema encoding和schema linking的挑战。由于relation-aware self-attention,它基于模式和问题表征之间的一致性和模式关系共同学习模式和问题表征。
从经验上讲,RAT框架使我们在Text-to-SQL解析方面获得了显著的改进。定性地说,它提供了一种在同一编码器体系结构中结合预定义的硬模式关系和推断的软自参与关系的方法。这种表示学习在文本到sql之外的任务中是有益的,只要输入有一些预定义的结构。