北京大学 常辰
编者按:
原文《RAT-SQL: Relation-Aware Schema Encoding and Linking for Text-to-SQL Parsers》这篇文章发表于ACL 2020,文中所介绍的模型RAT-SQL使用Transformer同时对文本和数据库的schema进行编码,同时修改了自注意力的计算公式,使其能够捕捉到schema与文本之间的关联。
论文地址:
https://www.aclweb.org/anthology/2020.acl-main.677.pdf
1、背景介绍
在Text-to-SQL的任务中,模型需要将自然语言的问句转换为相应的SQL语句,除此之外,每一个实例都会对应一个数据库(其schema和数据都会给出),每一个数据库可能会包含多个表,因此模型如何利用schema的信息是非常关键的。具体来说,处理schema有两大难点:
1)Schema的编码
2)Schema与自然语言问句的关联
如下图所示,由于schema是结构化的数据,难以和自然语言用同样的编码方式;此外,问句中的单词与数据库中表或者列的对应关系也是未知的,而在生成SQL时很显然需要利用这一关联。这篇文章中给出的模型RAT-SQL是针对这两个难点设计的,相比过去的模型也有较为显著的提升。
2、模型介绍
2.1 Relation-aware自注意力
如下图所示,在计算attention score和对value进行加权求和时,加入代表了xi和xj关系的表示rij。
假设一共有R种不同的关系,rij可以定义为R个特征向量的拼接,对于每一种关系,如果xi和xj有这一关系,就将对应的特征向量作为参数进行学习,否则就置为零向量。
2.2 关系定义
文章中所使用的到的关系主要分为:schema内部的关系以及schema与自然语言问句中的词的关系。下图是schema内部的所有关系,这些关系的定义十分直观,不同表之间的关系主要是通过外键来建立。
而对于schema与问句中词的关系,文中用到了两种方法来确定。一种是通过名字匹配(name-based),用问句中的n-gram词组与列名/表名进行匹配,分为完全匹配、部分匹配、不匹配三种关系。另一种是通过数值匹配(value-based),如果某一个词在某一列的数据中出现了,那么这个词与这一列记为COLUMN-VALUE这一关系,这一匹配的好处在于可以找到一部分隐含的关系。
2.3 encoder
先通过多个双向LSTM或者BERT得到问句中的词q,表名t,列名c的初始表示,并将所有的表示作为输入X,之后通过若干个有Relation-aware自注意力的Transformer层,得到encoder的输出。
2.4 decoder
RAT-SQL将SQL的生成转换为一个action的序列,并用LSTM以深度优先生成SQL语句的语法树。其中action分为三类:APPLYRULE,SELECTCOLUMN,SELECTTABLE。APPLYRULE是利用上下文无关语法(CFG)展开一个非终结节点,SELECTCOLUMN与SELECTTABLE则是在所有列/表上计算一个概率分布,并利用到了问句与schema的对齐矩阵Lcol,其计算方法与Relation-aware自注意力类似,用到了encoder最后一层的输出。
3、实验结果与分析
作者主要在Spider上做了实验,可以看到相比当时的SOTA有显著的提升(左图),在消融实验中(右图)也证明了数值匹配十分有效。对于生成错误SQL语句的主要原因,文章做了一个简单的分析,有18%的错误只是等价的表述,如ORDER BY C LIMIT 1 和 SELECT MIN(C);39%的错误是因为错误/缺失/多余的列;29%的错误是因为WHERE语句不完整,如 问句中出现older than 21,隐含了T.age > 21的条件,但在实际生成中未出现。
通过分析对齐矩阵的热力图中table:car_makers这一列,可以看出虽然问句中出现了cars,但模型成功排除了car_makers这个表格。
此外作者在WikiSQL上简单做了一个实验来验证RAT-SQL的泛用性,下图显示了实验的结果,虽然未达到SOTA模型的准确率,但仍然是一个有竞争力的结果。
相 / 关 / 链 / 接