«上一篇 下一篇»
  计算机工程  2022, Vol. 48 Issue (9): 71-77, 88  DOI: 10.19678/j.issn.1000-3428.0064560
0

引用本文  

黄君扬, 王振宇, 梁家卿, 等. 基于自裁剪异构图的NL2SQL模型[J]. 计算机工程, 2022, 48(9), 71-77, 88. DOI: 10.19678/j.issn.1000-3428.0064560.
HUANG Junyang, WANG Zhenyu, LIANG Jiaqing, et al. NL2SQL Model Based on Self-Pruning Heterogeneous Graph[J]. Computer Engineering, 2022, 48(9), 71-77, 88. DOI: 10.19678/j.issn.1000-3428.0064560.

基金项目

国家自然科学基金(62102095);中国博士后基金(2020M681173,2021T140124);上海市科技创新行动计划(19511120400);信息系统工程重点实验室开放基金(05202002)

作者简介

黄君扬(1996—),男,硕士研究生,主研方向为自然语言处理、知识图谱;
王振宇,工程师、硕士;
梁家卿,博士后;
肖仰华,教授、博士

文章历史

收稿日期:2022-04-26
修回日期:2022-05-26
基于自裁剪异构图的NL2SQL模型
黄君扬1 , 王振宇2 , 梁家卿1 , 肖仰华1     
1. 复旦大学 软件学院, 上海 200433;
2. 信息系统工程重点实验室, 南京 210007
摘要:自然语言转换为结构化查询语言(NL2SQL)是语义解析领域的重要任务,其核心为对数据库模式和自然语言问句进行联合学习。现有研究通过将整个数据库模式和自然语言问句联合编码构建异构图,使得异构图中引入大量无用信息,并且忽略了数据库模式中不同信息的重要性。为提高NL2SQL模型的逻辑与执行准确率,提出一种基于自裁剪异构图与相对位置注意力机制的NL2SQL模型(SPRELA)。采用序列到序列的框架,使用ELECTRA预训练语言模型作为骨干网络。引入专家知识,对数据库模式和自然语言问句构建初步异构图。基于自然语言问句对初步异构图进行自裁剪,并使用多头相对位置注意力机制编码自裁剪后的数据库模式与自然语言问句。利用树型解码器和预定义的SQL语法,解码生成SQL语句。在Spider数据集上的实验结果表明,SPRELA模型执行准确率达到71.1%,相比于相同参数量级别的RaSaP模型提升了1.1个百分点,能够更好地将数据库模式与自然语言问句对齐,从而理解自然语言查询中的语义信息。
关键词自然语言转换为结构化查询语言    异构图    自裁剪机制    语义解析    预训练语言模型    
NL2SQL Model Based on Self-Pruning Heterogeneous Graph
HUANG Junyang1 , WANG Zhenyu2 , LIANG Jiaqing1 , XIAO Yanghua1     
1. School of Software, Fudan University, Shanghai 200433, China;
2. Science and Technology on Information Systems Engineering Laboratory, Nanjing 210007, China
Abstract: Natural Language to Structured Query Language(NL2SQL) is a critical task in semantic parsing.The goal of NL2SQL lies in the joint learning of natural language query and database schema.Existing approaches construct a heterogeneous graph to jointly encode the entire database schema and natural language query.However, the heterogeneous graph constructed using this approach introduces a large amount of useless information and ignores the importance of different information in the schema.A novel NL2SQL model based on a self-pruning heterogeneous graph and relative position attention mechanism called the SPRELA model is proposed to improve the logic and execution accuracy of NL2SQL.The proposed model is implemented with a sequence-to-sequence architecture and uses a pre-trained language model, ELECTRA, as its backbone.An initial heterogeneous graph is constructed by introducing expert knowledge for database schema and natural language query.The heterogeneous graph is self-pruned for the natural language query, and a multi-head relative position is used to encode the self-pruned database schema and natural language query information.The target SQL statement is generated using a tree-structured decoder with predefined SQL syntax.The SPRELA model is experimented on the Spider dataset and achieves an accuracy of 71.1% in terms of execution accuracy.Compared with the Relation Aware Semi-autoregressive Semantic Parsing for NL2SQL(RaSaP) model at the same parameter level, the SPRELA model is improved by 1.1 percentage points.The results demonstrate that the SPRELA model better aligns database schema with natural language questions and understands the semantic information in natural language queries.
Key words: Natural Language to Structured Query Language(NL2SQL)    heterogeneous graph    self-pruning mechanism    semantic parsing    pre-trained language model    

开放科学(资源服务)标志码(OSID):

0 概述

随着自然语言处理技术的发展,智能问答系统在无人驾驶、语音识别、人脸识别等领域[1-3]得到广泛应用。智能问答系统通常以一问一答形式,精确定位用户所需要的提问知识,通过与用户进行交互,为用户提供个性化的信息服务。近几年,基于自然语言转换为结构化查询语言(Natural Language to Structured Query Language,NL2SQL)的问答系统成为了研究的热点[4-5],相比基于检索式、基于阅读理解的其他问答系统,NL2SQL先生成结构化查询语句(Structured Query Language,SQL),再提供答案的推理路径,因此具有更好的可解释性。NL2SQL任务即将自然语言问句解析为结构化查询语句,并用这条查询语句得到问题的答案。例如,给定问题“请列出图书俱乐部中1989年之后至少有两本书的图书分类类别。”NL2SQL需要将其解析成SQL查询语句“SELECT category FROM book_club WHERE year > 1989 GROUPBY category HAVING count(*) > = 2”。由于相同的问题在不同的数据库模式上会有不同的SQL查询语句,因此设计一种能同时学习问句表示和数据库模式表示的模型对于提高NL2SQL模型的逻辑准确率和执行准确率十分重要。

现有研究通过在注意力机制的基础上构建一个异构图[6]来联合编码数据库模式和问句,随后再使用SQL语法指引的树状解码器[7]来解析SQL语句。这种方法将数据库模式和问句视为一个异构图,建立问句、列名和表名中字符之间的关系。随后学习这些关系的嵌入作为模式信息,并将其编码到模型中。然而,该方法根据整个数据库模式构建一个异构图,将导致两个主要问题:其一,当数据库模式较大时,异构图太大,模型难以捕捉并学习到正确的特征;其二,该方法会忽略数据库模式中的每一个元素的重要性。例如,当询问一个人的身高时,实际上数据库模式中人实体的所有属性中只有身高是有用的,年龄、性别等属性都是无用的,所以在构图时,年龄与性别这两个属性不应该与身高有相同的权重。一般而言,模型需要根据问句判断数据库模式中所有元素的重要程度,而不是单纯地将数据库模式中所有的元素加入到异构图中。

为了解决上述问题,本文提出基于自裁剪异构图与相对位置注意力机制的NL2SQL模型,简称为SPRELA。SPRELA模型采用序列到序列的框架,主要包括异构图构建、编码器和解码器三部分。异构图构建模块使用预先定义的专家知识构建一个初步的异构图。SPRELA编码器裁剪异构图的部分边来剔除数据库模式中不重要的元素,并使用相对位置注意力机制来联合学习问句和数据库模式的向量表示,其中相对位置就是异构图中边的特征,词特征使用ELECTRA[8]预训练语言模型进行初始化。SPRELA解码器借助预先定义的SQL语法规则,使用树型解码器分步解码出树状结构的抽象语法树,并通过槽填充将SQL语句的信息补全。

1 相关工作

目前,NL2SQL的相关工作可以根据模型中的模块大致分为问句与数据库模式联合编码、结构化查询语言解码和预训练词表征增强3类。

针对问句与数据库模式联合编码的问题,SQLNet[9]通过列名注意力机制来解决问题和数据库模式的联合编码问题,然后在预定义的SQL模板上使用指针网络补全SQL信息。IRNet[10]引入中间表示层,以解决自然语言表达的意图与SQL中的实现细节不匹配的问题,首先将数据库模式与问句建立链接,识别出问句中提到的表名、列名和值,随后用神经网络把问句按照数据库模式分成不同的问句区间并使用BiLSTM进行编码。RAT-SQL[11]针对数据库模式和问句通过构建一个异构图建立数据库模式与问句中词之间的联系,然后将异构图中各个节点之间的边进行向量化表示,最后使用相对位置自注意力机制将异构图信息编码到模型中。然而,上述方法都没有考虑对数据库模式信息进行过滤,无用的模式信息会放大模型编码过程中的噪声。

针对结构化查询语言解码问题,近期的工作通常使用树形结构的解码器来解码SQL语句,即在定义目标语言的基础语法作为先验知识后,生成一棵抽象语法树来表示SQL语言。树形结构解码策略的应用非常广泛[12-13],特别是在解决数学问题和自然语言转换为各类编程语言等任务中。RAT-SQL使用LSTM以深度优先的遍历顺序生成SQL的抽象语法树,然后使用指针网络填槽补全SQL语法树中缺失的表名和列名。SmBoP[14]使用自下而上的解码策略,在第$ t $个步骤构建高度小于等于$ t $的top-K子树,由于每次解码时每个子树都是并行解码的,因此该方法提高了解码效率。

还有一些工作侧重于为NL2SQL任务提供预训练词增强表征。GraPPa[15]首先学习Spider数据集中的语法和SQL规则,然后利用这些规则在其他数据库上生成与Spider构建规则相似的高质量问句-SQL对,然后设定预训练任务让模型根据问句和数据库模式直接生成SQL,以捕捉问句和数据库模式之间的结构信息。GAP[16]通过3个不同的预训练任务提高词表征:第1个预训练任务判断数据库表中的列是否出现在问句中;第2个预训练任务随机把问句中的列名替换成该列单元格的值,模型需要恢复被替换的列名;第3个预训练任务需要模型根据问句与数据库模式直接生成SQL语句。然而上述方法使用的预训练语料质量无法保证,且模型训练需要大量算力支持。

2 问题定义与模型框架 2.1 问题定义

NL2SQL任务的输入是一句自然语言问句和数据库模式,输出是一个结构化查询语句$ Z $

具体而言,模型需要根据给定的一个长度为$ \left|\mathcal{Q}\right| $个字符的问句$ \mathcal{Q}=[{q}_{1}, {q}_{2}, \cdots , {q}_{\left|\mathcal{Q}\right|}] $和数据库模式$ \mathcal{S}= $ $ < \mathcal{T}, \mathcal{C} > $生成结构化查询语句$ Z $。数据库模式由表名$ \mathcal{T}=[{t}_{1}, {t}_{2}, \cdots , {t}_{\left|\mathcal{T}\right|}] $和列名$ \mathcal{C}=\{{c}_{1}, {c}_{2}, \cdots , {c}_{\left|\mathcal{C}\right|}\} $组成,其中,表名有$ \left|\mathcal{T}\right| $个,列名有$ \left|\mathcal{C}\right| $个。每一个列名$ {c}_{i}=\{{c}_{i, 1}, {c}_{i, 2}, \cdots , {c}_{i, \left|{c}_{i}\right|}\} $$ \left|{c}_{i}\right| $个字符组成,每一个表名$ {t}_{i}=\{{t}_{i, 1}, {t}_{i, 2}, \cdots , {t}_{i, \left|{t}_{i}\right|}\} $$ \left|{t}_{i}\right| $个字符组成。生成的结构化查询语句$ Z $以抽象语法树(Abstract Syntax Tree,AST)的形式来表示。

模式中的一些列被称为主键,主键是一个数据库表中的一行数据的唯一索引。还有一些列被称为外键,用于索引不同表中的主键列。此外,表中每一列的单元值均由数字或文本组成。

2.2 模型框架

本文提出的SPRELA模型采用序列到序列的框架,如图 1所示,主要由3个模块组成:1)异构图构建,使用专家知识,动态地将输入的问句和数据库模式构建为一个异构图,更好地建立了问句与数据库模式之间的联系;2)编码器,使用相对位置注意力机制,将问句、数据库模式信息和异构图联合编码为高维隐层向量表示;3)解码器,使用树型解码器将高维隐层向量解码成高质量、可执行的SQL语句。

Download:
图 1 SPRELA模型框架 Fig. 1 Framework of the SPRELA model
3 模型设计 3.1 异构图构建

本节介绍如何使用问句$ \mathcal{Q} $和数据库模式$ \mathcal{S} $构建异构图$ \mathcal{G}= < \mathcal{V}, \mathcal{E} > $。异构图的节点集合由数据库模式中的列名、表名和问句中的词语组成,以字符的形式来标记,即$ \mathcal{V}=\mathcal{C}\bigcup \mathcal{T}\bigcup \mathcal{Q} $。针对表示列名的节点,需要在标签前加入额外特征来表示其类型是字符还是数字。加入问句中的词语作为节点能将问句中的词语与数据库模式中的信息对齐,丰富了异构图的信息表示能力,使异构图有效地建立了问句与数据库模式之间的联系。异构图的边集$ \mathcal{E} $是由专家根据数据库模式来定义的,其中一部分是通过数据库特有结构(例如外键、主键等关系)而得出,另一部分是通过对验证集上错误的案例进行分析,并多次迭代归纳总结得出。专家定义的异构图边构建规则如表 1所示。

下载CSV 表 1 专家定义的异构图边构建规则 Table 1 Heterogeneous graph edge construction rules defined by experts

表 1中,DISTANCE-D代表Y是X中第D个字符,SAME-TABLE代表X和Y属于同一张表,FOREIGN-F代表X是Y的外键,FOREIGN-R代表Y是X的外键,PRIMARY-KEY-F代表X是Y的外键,HAS-F代表X是Y的一个列,PRIMARY-KEY-R代表Y是X的主键,HAS-R代表Y是X的一个列,FOREIGN-TAB-F代表X在表Y中存在外键,FOREIGN-TAB-R代表Y在表X中存在外键,FOREIGN-TAB-B代表X和Y中互相存在外键,NO-MATCH代表X和Y中没有重叠的字符,PARTIAL-MATCH代表X是Y的子串,EXACT-MATCH代表X和Y完全一致,HAS-VALUE代表X是Y列中某个单元格的值。

3.2 编码器

SPRELA编码器首先使用ELECTRA预训练语言模型作为骨干网络获取向量表示$ {\mathit{\boldsymbol{{c}}}}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}} $$ {\mathit{\boldsymbol{{t}}}}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}} $$ {\mathit{\boldsymbol{{q}}}}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}} $,其中,$ {\mathit{\boldsymbol{{c}}}}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}} $代表异构图中列名的词向量表示,$ {\mathit{\boldsymbol{{t}}}}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}} $代表异构图中表的词向量表示,$ {\mathit{\boldsymbol{{q}}}}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}} $代表问句的词向量表示,然后将这3个向量表示连接成一个向量$ \mathit{\boldsymbol{{X}}} $作为输入。

$ \begin{array}{l}\mathit{\boldsymbol{{X}}}=({\mathit{\boldsymbol{{c}}}}_{1}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, {\mathit{\boldsymbol{{c}}}}_{2}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, \cdots , {\mathit{\boldsymbol{{c}}}}_{\left|\mathcal{C}\right|}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, {\mathit{\boldsymbol{{t}}}}_{1}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, {\mathit{\boldsymbol{{t}}}}_{2}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, \cdots , {\mathit{\boldsymbol{{t}}}}_{\left|\mathcal{T}\right|}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, \\ \ \ \ \ \ \ \ \ \ {\mathit{\boldsymbol{{q}}}}_{1}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, {\mathit{\boldsymbol{{q}}}}_{2}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}}, \cdots , {\mathit{\boldsymbol{{q}}}}_{\left|\mathcal{Q}\right|}^{\mathrm{i}\mathrm{n}\mathrm{i}\mathrm{t}})\end{array} $ (1)

通过该方式,数据库模式中所有与问句相关的词都被连接起来,形成了最终的向量表示。为了使模型能学习边的特征,编码器将异构图构建模块构建出的初步异构图的每一个边初始化为一个向量表示。然后编码器使用相对位置编码的自注意力[17]机制对输入进行编码,使得模型能联合学习问题和知识库模式之间的关系。与传统方法不同的是,SPRELA编码器以异构图的边向量作为相对位置编码,以此将异构图的信息融入到SPRELA中,如式(2)~式(7)所示:

$ {\mathit{\boldsymbol{{e}}}}_{ij}^{\left(h\right)}=\frac{{\mathit{\boldsymbol{{x}}}}_{i}{\mathit{\boldsymbol{{W}}}}_{Q}^{\left(h\right)}({\mathit{\boldsymbol{{x}}}}_{j}{\mathit{\boldsymbol{{W}}}}_{K}^{\left(h\right)}+{\mathit{\boldsymbol{{r}}}}_{ij}^{K}{)}^{\mathrm{T}}}{\sqrt{{d}_{z}/H}} $ (2)
$ {\alpha }_{ij}^{\left(h\right)}=\underset{j}{\mathrm{S}\mathrm{o}\mathrm{f}\mathrm{t}\mathrm{m}\mathrm{a}\mathrm{x}} \left\{{\mathrm{e}}_{\mathrm{i}\mathrm{j}}^{\left(\mathrm{h}\right)}\right\} $ (3)
$ {\mathit{\boldsymbol{{z}}}}_{i}^{\left(h\right)}=\sum\limits_{j=1}^{n}{\alpha }_{ij}^{\left(h\right)}({\mathit{\boldsymbol{{x}}}}_{j}{\mathit{\boldsymbol{{W}}}}_{V}^{\left(h\right)}+{\mathit{\boldsymbol{{r}}}}_{ij}^{V}) $ (4)
$ {\mathit{\boldsymbol{{z}}}}_{i}=\mathrm{C}\mathrm{o}\mathrm{n}\mathrm{c}\mathrm{a}\mathrm{t}({\mathit{\boldsymbol{{z}}}}_{i}^{\left(1\right)}, {\mathit{\boldsymbol{{z}}}}_{i}^{\left(2\right)}, \cdots , {\mathit{\boldsymbol{{z}}}}_{i}^{\left(H\right)}) $ (5)
$ {\tilde{y}}_{i}=\mathrm{L}\mathrm{a}\mathrm{y}\mathrm{e}\mathrm{r}\mathrm{N}\mathrm{o}\mathrm{r}\mathrm{m}({\mathit{\boldsymbol{{x}}}}_{i}+{\mathit{\boldsymbol{{z}}}}_{i}) $ (6)
$ {y}_{i}=\mathrm{L}\mathrm{a}\mathrm{y}\mathrm{e}\mathrm{r}\mathrm{N}\mathrm{o}\mathrm{r}\mathrm{m}({\tilde{y}}_{i}+\mathrm{F}\mathrm{C}(\mathrm{R}\mathrm{e}\mathrm{L}\mathrm{U}\left(\mathrm{F}\mathrm{C}\right({\tilde{y}}_{i}\left)\right)\left)\right) $ (7)

其中:$ {\mathit{\boldsymbol{{W}}}}_{Q}^{\left(h\right)}, {\mathit{\boldsymbol{{W}}}}_{K}^{\left(h\right)}, {\mathit{\boldsymbol{{W}}}}_{V}^{\left(h\right)}\in {\mathbb{R}}^{{d}_{x}\times ({d}_{x}/H)} $为权重矩阵,参数定义和原理与相对位置编码的自注意力机制原文献[17]相同;$ \mathrm{F}\mathrm{C} $层和$ \mathrm{L}\mathrm{a}\mathrm{y}\mathrm{e}\mathrm{r}\mathrm{N}\mathrm{o}\mathrm{r}\mathrm{m} $层分别是全连接层和标准化层;$ {\mathit{\boldsymbol{{r}}}}_{ij}^{K} $$ {\mathit{\boldsymbol{{r}}}}_{ij}^{V} $是异构图的边向量表示。该相对位置编码的自注意力机制使用了多头技术,它由$ H $个头组成,每个头侧重于不同的语义特征。$ {\mathit{\boldsymbol{{r}}}}_{ij}^{K} $$ {\mathit{\boldsymbol{{r}}}}_{ij}^{V} $由异构图中所有的边的特征拼接而成,如式(8)所示:

$ {\mathit{\boldsymbol{{r}}}}_{ij}^{K}={\mathit{\boldsymbol{{r}}}}_{ij}^{V}=\mathrm{C}\mathrm{o}\mathrm{n}\mathrm{c}\mathrm{a}\mathrm{t}({m}_{ij}^{\left(1\right)}{\mathit{\boldsymbol{{\rho }}}}_{ij}^{\left(1\right)}, {m}_{ij}^{\left(2\right)}{\mathit{\boldsymbol{{\rho }}}}_{ij}^{\left(2\right)}, \cdots , {m}_{ij}^{\left(R\right)}{\mathit{\boldsymbol{{\rho }}}}_{ij}^{\left(R\right)}) $ (8)

其中:边的种类一共有$ R $种,第$ s $条边定义为$ {\mathcal{E}}^{\left(s\right)\subseteq X\times X}(1\le s\le R) $$ X $代表节点数量;$ {\mathit{\boldsymbol{{\rho }}}}_{ij}^{\left({s}_{i}\right)} $是边的一个可学习的边向量表示;$ {m}_{ij}^{\left(R\right)} $是一个自裁剪变量,根据输入的自然语言问句对异构图中每个边$ {s}_{i} $进行二分类,来记录这条边是否需要保留,如果不需要保留则利用$ {m}_{ij}^{\left(R\right)} $将该边的向量表示置为一个全为0组成的同维度向量。

本文构建了一个二分类模型来实现该自裁剪子模型。首先,模型利用多头注意力机制,并使用自然语言问句的嵌入表示$ {\mathit{\boldsymbol{{X}}}}_{q} $为异构图中每条边$ {s}_{i} $计算向量表示$ {\tilde{\mathit{\boldsymbol{{x}}}}}_{{s}_{i}} $,如式(9)、式(10)所示:

$ {\gamma }_{ji}^{\left(h\right)}=\underset{j}{\mathrm{S}\mathrm{o}\mathrm{f}\mathrm{t}\mathrm{m}\mathrm{a}\mathrm{x}}\frac{\left({\mathit{\boldsymbol{{x}}}}_{{s}_{i}}{\mathit{\boldsymbol{{W}}}}_{sq}^{\left(h\right)}\right)({\mathit{\boldsymbol{{x}}}}_{{q}_{j}}{\mathit{\boldsymbol{{W}}}}_{sk}^{\left(h\right)}{)}^{\mathrm{T}}}{\sqrt{d/H}} $ (9)
$ {\tilde{\mathit{\boldsymbol{{x}}}}}_{{s}_{i}}=\left(\right|{|}_{h=1}^{H}\sum\limits_{j}{\gamma }_{ji}^{\left(h\right)}{\mathit{\boldsymbol{{x}}}}_{{q}_{j}}{\mathit{\boldsymbol{{W}}}}_{sv}^{\left(h\right)}){\mathit{\boldsymbol{{W}}}}_{so} $ (10)

其中:$ {\gamma }_{ji}^{h} $为计算中间结果;$ {\mathit{\boldsymbol{{W}}}}_{sq}^{\left(h\right)} $$ {\mathit{\boldsymbol{{W}}}}_{sk}^{\left(h\right)} $$ {\mathit{\boldsymbol{{W}}}}_{sv}^{\left(h\right)}\in {\mathbb{R}}^{d\times d/H} $$ {\mathit{\boldsymbol{{W}}}}_{so}\in {\mathbb{R}}^{d\times d} $s为模型第$ s $条边的权重参数;$ |{|}_{h=1}^{H} $代表将$ H $个矩阵横向拼接。

然后,使用Biaffine[18]二分类器来判断经过编码的向量表示$ {\tilde{\mathit{\boldsymbol{{x}}}}}_{{s}_{i}} $和边的嵌入表示$ {\mathit{\boldsymbol{{x}}}}_{{s}_{i}} $是否有关联,如式(11)、式(12)所示:

$ \mathrm{S}\mathrm{e}\mathrm{l}\mathrm{f}\mathrm{P}\mathrm{r}\mathrm{u}\mathrm{n}\mathrm{i}\mathrm{n}\mathrm{g}({\mathit{\boldsymbol{{x}}}}_{1}, {\mathit{\boldsymbol{{x}}}}_{2})={\mathit{\boldsymbol{{x}}}}_{1}{\mathit{\boldsymbol{{U}}}}_{s}{\mathit{\boldsymbol{{x}}}}_{2}^{\mathrm{T}}+[{\mathit{\boldsymbol{{x}}}}_{1};{\mathit{\boldsymbol{{x}}}}_{2}]{\mathit{\boldsymbol{{W}}}}_{s}+{b}_{s} $ (11)
$ {P}^{\mathrm{s}\mathrm{p}}\left({y}_{{s}_{i}}\right|{\mathit{\boldsymbol{{x}}}}_{{s}_{i}}, {\mathit{\boldsymbol{{X}}}}_{q})=\sigma (\mathrm{S}\mathrm{e}\mathrm{l}\mathrm{f}\mathrm{P}\mathrm{r}\mathrm{u}\mathrm{n}\mathrm{i}\mathrm{n}\mathrm{g}({\mathit{\boldsymbol{{x}}}}_{{s}_{i}}, {\tilde{\mathit{\boldsymbol{{x}}}}}_{{s}_{i}})) $ (12)

如果$ {s}_{i} $出现在真实SQL语句中,则边的标签$ {y}_{{s}_{i}}^{g} $为1。本文将该任务与语义解析任务以多任务训练的方式进行联合训练,目标函数如式(13)所示:

$ \begin{array}{l}{\mathcal{L}}_{\mathrm{s}\mathrm{p}}=\sum\limits_{{s}_{i}}\left[{y}_{{s}_{i}}^{g}ln{P}^{sp}\right({y}_{{s}_{i}}|{\mathit{\boldsymbol{{x}}}}_{{s}_{i}}, {\mathit{\boldsymbol{{X}}}}_{q})+\\ \ \ \ \ \ \ \ \ (1-{y}_{{s}_{i}}^{g})\mathrm{l}\mathrm{n}(1-{P}^{\mathrm{s}\mathrm{p}}({y}_{{s}_{i}}|{\mathit{\boldsymbol{{x}}}}_{{s}_{i}}, {\mathit{\boldsymbol{{X}}}}_{q})\left)\right]\end{array} $ (13)
3.3 解码器

解码器使用IRNet模型中基于长短期记忆(Long Short-Term Memory,LSTM)网络的树型解码器解码SQL语句。首先以深度优先遍历的顺序将SQL生成为一棵抽象语法树。然后通过LSTM网络输出一连串的动作(action),动作主要分为以下2类:1)生成的节点为非叶子节点,则将该节点扩展为一条语法规则,称为扩展规则(Extend Rule);2)生成的节点为叶子节点,从数据库模式中选择一个列名或表名,分别称为列选择(Select Column)或表选择(Select Table)。

树型解码器中的LSTM使用如式(14)所示的方式更新状态:

$ ({\mathit{\boldsymbol{{m}}}}_{t}, {\mathit{\boldsymbol{{h}}}}_{t})=f\left(\left[{\mathit{\boldsymbol{{a}}}}_{t-1}\right|\left|{\mathit{\boldsymbol{{h}}}}_{{p}_{t}}\right|\left|{\mathit{\boldsymbol{{a}}}}_{{p}_{t}}\right|\left|{\mathit{\boldsymbol{{n}}}}_{{f}_{t}}\right], {\mathit{\boldsymbol{{m}}}}_{t-1}, {\mathit{\boldsymbol{{h}}}}_{t-1}\right) $ (14)

其中:$ {\mathit{\boldsymbol{{m}}}}_{t} $是LSTM的核(cell)状态;$ {\mathit{\boldsymbol{{h}}}}_{t} $是LSTM在$ t $时刻的输出;$ {\mathit{\boldsymbol{{a}}}}_{t-1} $是上一个动作的嵌入表示;$ {\mathit{\boldsymbol{{p}}}}_{t} $是语法树中当前节点的父节点;$ {\mathit{\boldsymbol{{n}}}}_{{f}_{t}} $是当前节点类型的嵌入表示。

扩展规则的计算方式如式(15)所示:

$ \mathrm{P}\mathrm{r}({\mathit{\boldsymbol{{a}}}}_{t}=\mathrm{E}\mathrm{x}\mathrm{t}\mathrm{e}\mathrm{n}\mathrm{d}\mathrm{R}\mathrm{u}\mathrm{l}\mathrm{e}[R]\mathrm{ }\mathrm{ }\mathrm{ }\mathrm{ }\mathrm{ }\mid {\mathit{\boldsymbol{{a}}}}_{ < t}, y)=\sigma \left(g\left({\mathit{\boldsymbol{{h}}}}_{t}\right)\right) $ (15)

其中:$ \sigma (\cdot ) $是Softmax函数;$ g(\cdot ) $是多层感知机层并以tanh作为激活函数。

列选择的计算方式如式(16)所示,表选择的计算方式与列选择类似。

$ \mathrm{P}\mathrm{r}({\mathit{\boldsymbol{{a}}}}_{t}=\mathrm{S}\mathrm{e}\mathrm{l}\mathrm{e}\mathrm{c}\mathrm{t}\mathrm{C}\mathrm{o}\mathrm{l}\mathrm{u}\mathrm{m}\mathrm{n}[i]\mid {\mathit{\boldsymbol{{a}}}}_{ < t}, y)=\sum\limits_{j=1}^{\left|y\right|}{\mathit{\boldsymbol{{\lambda }}}}_{j}{L}_{j, i}^{\mathrm{c}\mathrm{o}\mathrm{l}} $ (16)

其中:$ {\mathit{\boldsymbol{{\lambda }}}}_{j} $为权重向量;$ {L}_{j, i}^{\mathrm{c}\mathrm{o}\mathrm{l}} $为边的嵌入表示。

4 实验与结果分析 4.1 数据集与评测指标设置

使用Spider[19]数据集验证SPRELA模型性能。Spider是一个评估NL2SQL系统的常见数据集,包含8 659个训练条目和1 034个验证条目,以及复杂的SQL查询和1个冷启动设置,其中测试集中的数据库模式与训练集和验证集是不同的。使用两个通用的指标评测SPRELA模型在Spider数据集上的效果,分别为:1)不含槽位值的逻辑准确率(EM);2)含槽位值的执行准确率(EXEC)。EM主要评测SQL语句的语法结构,测试脚本将每个SQL分解成多个子句并进行集合匹配,而不是简单地将预测出来的SQL和标签SQL进行字符串比较。EXEC主要评测执行结果,测试脚本将直接执行预测出来的SQL和标签SQL进行比较判断能否查询到相同的结果。

4.2 参数设置

针对编码器,设置相对位置注意力机制的多头数量$ H=8 $,其共包含24个自注意力层。Dropout[20]层损失的信息比例设置为0.2。针对解码器,使用集束搜索策略并设置集束大小$ K=30 $,在预测时的解码步骤最大值设置为$ T=9 $。ELECTRA预训练语言模型和SPRELA解码器的学习率分别设置为3e-6和0.000 186。模型在RTX3090显卡上训练了500轮,批次大小设置为16,并采取梯度积累策略,其中梯度累积参数设置为4。

4.3 对比实验分析

使用RAT-SQL[11]、GAZP[21]、COMBINE[22]、BRIDGE[23]、RaSaP[24]、RATSQL+GAP+NatSQL[25]和PICARD[26]作为基线模型进行对比,其中RATSQL+GAP+NatSQL和PICARD模型的规模远大于本文SPRELA模型和其他基线模型。表 2给出了基线模型与SPRELA模型在Spider数据集上的实验结果。由于RAT-SQL模型不能生成可执行的SQL语句,因此执行准确率使用N/A表示。由表 2中实验结果可以看出,SPRELA模型在两个评价指标上都超越了现有的相同参数量级别的模型,特别是在执行准确率指标上超越了RaSaP模型1.1个百分点。RATSQL+GAP+NatSQL模型的EXEC指标效果要好于SPRELA模型,原因是该模型集成了一个槽位预测模型,旨在提高槽位预测的准确率,而多个模型的集成也使该模型在EXEC指标上表现优秀。PICARD模型在EM和EXEC指标上的效果都比SPRELA模型好,原因是该模型骨干网络使用了T5-3B[27]预训练语言模型,T5-3B的参数量远多于现有所有模型,所以其效果为目前最优。但是模型集成(如RATSQL+GAP+NatSQL)和大规模模型(如PICARD)意味着需要更大的算力支持、更长的训练时间,这些模型的效果理论上会更好,但是成本太高,由于实际工程应用场景对模型的并发量、成本控制都有所要求,因此无法支持超大规模的模型。

下载CSV 表 2 NL2SQL模型在Spider数据集上的实验结果 Table 2 Experimental results of the NL2SQL models on the Spider dataset  

图 2是SPRELA模型与BRIDGE模型的实验结果的案例分析,可以看出BRIDGE模型生成了错误的SQL,SPRELA模型生成了正确的SQL。图 2中的解释是对BRIDGE模型生成错误SQL的原因分析,可见SPRELA模型可以更好地将自然语言问句与数据库模式对齐,也能更好地理解自然语言查询中的语义信息。因此,SPRELA模型不论是在生成SQL语句的结构上,还是槽位值的选择上均具有更好的性能表现。

Download:
图 2 SPRELA与BRIDGE模型的实验结果案例分析 Fig. 2 Case analysis of experimental results of SPRELA and BRIDGE models

为了更细致地分析模型在不同SQL子句上的性能表现,本文使用精确率、召回率和F1值3个指标对模型子句性能做进一步实验。实验结果如表 3所示,可以看出SPRELA模型在group子句上的泛化能力与查询性能仍有提升的空间,在select、order和and/or子句上具有较好的泛化能力,在where子句上的查询性能也仍有提升空间。

下载CSV 表 3 SPRELA模型子句性能 Table 3 Clause performance of the SPRELA model  
4.4 消融实验分析

为了分析不同模块给SPRELA模型带来的效果增益,本节针对SPRELA模型进行消融实验来验证异构图构建模块中的专家知识子模块和编码器模块中的自裁剪子模块对模型性能的影响。消融实验结果如表 4所示。

下载CSV 表 4 SPERLA模型的消融实验结果 Table 4 Ablation experiment results of the SPRELA model  

表 4中的实验结果可以看出,完整的模型相比于不同的消融模型取得了最优的效果。对比移除专家知识模块前后,不论是EM指标还是EXEC指标都有所下降。在移除自裁剪模块后,模型在两个指标上效果同样有所下降。当同时移除专家知识和自裁剪模块后,模型效果则会进一步下降。为了解释消融模型效果下降的原因,本文借助图 3所示的案例进行分析,其中错误SQL来自不包含专家知识与自裁剪模块的消融模型,正确SQL来自完整的SPRELA模型。此外,图 3中还列出了数据库模式信息。

Download:
图 3 专家知识与自裁剪模块的有效性分析结果 Fig. 3 Effectiveness analysis results of expert knowledge and self-pruning modules

图 3可以看出,错误SQL未能识别出“amc hornet sportabout(sw)”是一个完整的槽位值的原因在于“sw”恰好是“model_list”表中“model”列的一个值而“amc hornet”恰好也是“car_names”表中“Make”列的一个值。因此,“amc hornet sportabout(sw)”就被拆分为“amc hornet”和“sw”两个槽位值并匹配到其相应的列名。

在利用专家知识构建异构图后,“amc hornet sportabout(sw)”和列名“Make”会与标记为EXACT-MATCH的边连接,而“amc hornet”和列名“Make”会与标记为PARTIAL-MATCH的边连接。通过该方式构建的异构图可使模型能建立问句与数据库模式之间更细粒度的关系。

由于问句中的语义信息明显是查询装备“amc hornet sportabout(sw)”套件轿车的加速度,与轿车的模组(Model)无关,因此自裁剪模块会将与列名“Model”相关的边裁去。通过该方式,模型能够更好地剔除与问句无关的图信息,保留相对有关的信息,减少了噪声的引入。

在结合专家知识与自裁剪模块后,由于异构图的不同边具有较强的特征信息,使得自裁剪模块在该案例中还能学习到当存在标记为EXACT-MATCH的边时优先裁剪标记为PARTIAL-MATCH的边的行为。因此两个模块的组合可以进一步提升模型的效果,这也与消融实验的结果一致。从上述实验结果与案例分析证明了本文设计的专家知识与自裁剪机制对于模型性能提升的有效性。

5 结束语

本文提出一种基于自裁剪异构图的自然语言转换为结构化查询语言模型SPRELA,采用ELECTRA预训练模型获取词表征作为骨干网络并利用专家知识构建异构图,通过相对位置注意力机制联合编码问句与数据库模式,使用树状解码器解码生成结构化查询语句。在Spider数据集上的实验结果表明,相比于经典模型和同类模型,SPRELA模型利用自裁剪机制裁剪异构图中的部分边,使得模型能够剔除与问句相对无关的信息,保留相对有关的信息,达到更细粒度的数据过滤,减少异构图中的无用信息,同时通过引入专家知识构建异构图来建模结构化数据中的模式信息,能更好地辅助模型学习结构化查询语言的相关特征。今后将尝试寻找挖掘专家知识的自动化或半自动化方法,进一步提高SPRELA模型在级联查询、嵌套子查询等复杂SQL解析任务下的执行准确率。

参考文献
[1]
邹品荣, 肖锋, 张文娟, 等. 面向视觉问答的多模块协同注意模型[J]. 计算机工程, 2022, 48(2): 250-260.
ZOU P R, XIAO F, ZHANG W J, et al. Multi-module co-attention model for visual question answering[J]. Computer Engineering, 2022, 48(2): 250-260. (in Chinese)
[2]
苏珂, 黄瑞阳, 张建朋, 等. 多跳机器阅读理解研究进展[J]. 计算机工程, 2021, 47(9): 1-17.
SU K, HUANG R Y, ZHANG J P, et al. Research progress of multi-hop machine reading comprehension[J]. Computer Engineering, 2021, 47(9): 1-17. (in Chinese)
[3]
赵芸, 刘德喜, 万常选, 等. 检索式自动问答研究综述[J]. 计算机学报, 2021, 44(6): 1214-1232.
ZHAO Y, LIU D X, WAN C X, et al. Retrieval-based automatic question answer: a literature survey[J]. Chinese Journal of Computers, 2021, 44(6): 1214-1232. (in Chinese)
[4]
DENG C Y, ZENG G F, CAI Z P, et al. A survey of knowledge based question answering with deep learning[J]. Journal on Artificial Intelligence, 2020, 2(4): 157-166. DOI:10.32604/jai.2020.011541
[5]
ABDELAZIZ I, RAVISHANKAR S, KANPANIPATHI P, et al. A semantic parsing and reasoning-based approach to knowledge base question answering[C]//Proceedings of AAAI Conference on Artificial Intelligence. Palo Alto, USA: AAAI Press, 2021: 15985-15987.
[6]
CAO R S, CHEN L, CHEN Z, et al. LGESQL: line graph enhanced text-to-SQL model with mixed local and non-local relations[C]//Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing. Stroudsburg, USA: Association for Computational Linguistics, 2021: 2541-2555.
[7]
ZHOU G B, LUO P, CAO R Y, et al. Tree-structured neural machine for linguistics-aware sentence generation[EB/OL]. [2022-03-12]. https://arxiv.org/abs/1705.00321.
[8]
CLARK K, LUONG M T, LE Q V, et al. ELECTRA: pre-training text encoders as discriminators rather than generators[EB/OL]. [2022-03-12]. https://arxiv.org/abs/2003.10555.
[9]
XU X J, LIU C, SONG D. SQLNet: generating structured queries from natural language without reinforcement learning[EB/OL]. [2022-03-12]. https://arxiv.org/abs/1711.04436.
[10]
JHA D, WARD L, YANG Z J, et al. IRNet: a general purpose deep residual regression framework for materials discovery[C]//Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. New York, USA: ACM Press, 2019: 2385-2393.
[11]
WANG B L, SHIN R, LIU X D, et al. RAT-SQL: relation-aware schema encoding and linking for text-to-SQL parsers[C]//Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. Stroudsburg, USA: Association for Computational Linguistics, 2020: 7567-7578.
[12]
DONG L, LAPATA M. Coarse-to-fine decoding for neural semantic parsing[C]//Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics. Stroudsburg, USA: Association for Computational Linguistics, 2018: 731-742.
[13]
YIN P C, FANG H, NEUBIG G, et al. Compositional generalization for neural semantic parsing via span-level supervised attention[C]//Proceedings of 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. Stroudsburg, USA: Association for Computational Linguistics, 2021: 2810-2823.
[14]
RUBIN O, BERANT J. SmBoP: semi-autoregressive bottom-up semantic parsing[C]//Proceedings of the 5th Workshop on Structured Prediction for NLP. Stroudsburg, USA: Association for Computational Linguistics, 2021: 12-21.
[15]
YU T, WU C S, LIN X V, et al. GraPPa: grammar-augmented pre-training for table semantic parsing[EB/OL]. [2022-03-12]. https://arxiv.org/abs/2009.13845.
[16]
SHI P, NG P, WANG Z G, et al. Learning contextual representations for semantic parsing with generation-augmented pre-training[EB/OL]. [2022-03-12]. https://arxiv.org/abs/2012.10309.
[17]
SHAW P, USZKOREIT J, VASWANI A. Self-attention with relative position representations[C]//Proceedings of 2018 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. Stroudsburg, USA: Association for Computational Linguistics, 2018: 464-468.
[18]
DOZAT T, MANNING C D. Deep Biaffine attention for neural dependency parsing[EB/OL]. [2022-03-12]. https://arxiv.org/abs/1611.01734.
[19]
YU T, ZHANG R, YANG K, et al. Spider: a large-scale human-labeled dataset for complex and cross-domain semantic parsing and text-to-SQL task[C]//Proceedings of 2018 Conference on Empirical Methods in Natural Language Processing. Stroudsburg, USA: Association for Computational Linguistics, 2018: 3911-3921.
[20]
SRIVASTAVA N, HINTON G, KRIZHEVSKY A, et al. Dropout: a simple way to prevent neural networks from overfitting[J]. The Journal of Machine Learning Research, 2014, 15(1): 1929-1958.
[21]
ZHONG V, LEWIS M, WANG S I, et al. Grounded adaptation for zero-shot executable semantic parsing[C]//Proceedings of 2020 Conference on Empirical Methods in Natural Language Processing. Stroudsburg, USA: Association for Computational Linguistics, 2020: 6869-6882.
[22]
MELLAH Y, RHOUATI A, ETTIFOURI E H, et al. SQL generation from natural language: a sequence-to-sequence model powered by the transformers architecture and association rules[J]. Journal of Computer Science, 2021, 17(5): 480-489. DOI:10.3844/jcssp.2021.480.489
[23]
LIN X V, SOCHER R, XIONG C M. Bridging textual and tabular data for cross-domain text-to-SQL semantic parsing[C]//Proceedings of EMNLP'20. Stroudsburg, USA: Association for Computational Linguistics, 2020: 4870-4888.
[24]
HUANG J, WANG Y, WANG Y, et al. Relation aware semi-autoregressive semantic parsing for NL2SQL[EB/OL]. [2022-03-12]. https://arxiv.org/abs/2108.00804.
[25]
GAN Y J, CHEN X Y, XIE J X, et al. Natural SQL: making SQL easier to infer from natural language specifications[C]//Proceedings of EMNLP'21. Stroudsburg, USA: Association for Computational Linguistics, 2021: 2030-2042.
[26]
SCHOLAK T, SCHUCHER N, BAHDANAU D. PICARD: parsing incrementally for constrained auto-regressive decoding from language models[C]//Proceedings of 2021 Conference on Empirical Methods in Natural Language Processing. Stroudsburg, USA: Association for Computational Linguistics, 2021: 9895-9901.
[27]
RAFFEL C, SHAZEER N, ROBERTS A, et al. Exploring the limits of transfer learning with a unified text-to-text transformer[J]. Journal of Machine Learning Research, 2020, 21: 1-67.