来自北大等基于深度学习的 SQL 生成综述论文
SQL 生成 (text-to-SQL) 是自动化软件工程的重要应用之一, 也是语义解析领域的研究热点. SQL 生成根据输入的自然语言描述自动生成相应的 SQL 数据库查询语句, 它允许非专业人员在不了 解 SQL 语法的情况下访问数据库. 随着大量 SQL 相关数据集的不断构造以及人工智能技术的卓越进 步, SQL 生成任务也得到了极大的发展. 基于深度学习的 SQL 生成 (deep learning-based text-to-SQL) 能够利用大规模数据的优势, 从已有数据中学习自然语言、数据库以及 SQL 语句的表示, 并根据新的 自然语言输入生成符合查询需求的 SQL 语句. 相对于传统的 SQL 生成, 基于深度学习的 SQL 生成 具有高准确率、输入信息灵活和可迭代学习的优点. 近年来, 研究者在基于深度学习的 SQL 生成方面 进行了一系列的研究, 本文从 SQL 生成场景、数据集、模型结构和评估方法层面对现有研究进行分类综述.
https://www.sciengine.com/SSI/issue/52/8
引言
SQL (structured query language) 是操作关系型数据库的结构化查询语言, 用于访问和处理结构 化数据. 与命令式编程语言不同, SQL 的本质是一种基于集合的声明式编程语言. SQL 在 1986 年成 为美国国家标准化组织 (American National Standards Institute, ANSI) 的一项标准, 并在 1987 年成为 国际标准化组织 (International Organization for Standardization, ISO) 的一项标准 [1] , 后续发展中标 准 SQL 也存在多种扩展形式. SQL 相比较于之前的读写接口而言, 可以允许一条命令访问多个记录, 并且消除了指定如何到达记录的必要性, 例如, 可以不使用索引. 在现代软件中, 当涉及关系型数据库的操作时, 往往都会用到 SQL 语句, 如操作电商平台存储用户和商品数据、查询学校中老师和课程信 息等. 然而, 对于不了解 SQL 语法的人, 很难在包含大量记录的数据库中快速地找到自己感兴趣的数 据. 在具体应用场景中, 重复性地数据查询往往也会消耗大量的人力资源, 如客户向电商客服询问具 体商品价格和参数. 因此, 通过对所需要查询的意图进行描述, 由 SQL 生成 (text-to-SQL) 模型自动 生成具有相应功能的 SQL 语句是必要且非常有帮助的, 它能够让非专业人员轻松地访问数据库, 降低 大规模数据分析的门槛, 也可以在减少人力消耗的情况下提供自动且及时的查询数据反馈. 除此之外, SQL 语法和模式相对于命令式编程语言而言较为简单, 生成 SQL 语句的任务也有较高的可行性.
SQL 生成任务旨在根据已有数据库信息, 将自然语言描述映射到特定功能的 SQL 语句, 它是软 件工程领域中代码生成任务以及自然语言处理领域中语义解析 (semantic parsing) 任务的热点研究之 一. SQL 生成任务允许使用查询问题的语义来访问和操作结构化数据库信息, 而无需了解复杂的 SQL 查询语法, 极大地减少了查询数据库所需要的先验知识. 已有研究包含了使用基于规则 [2]、程序合 成 [3] 等方法生成查询语句, 但这些方法通常只在小规模数据集上实验并且难以达到较好的生成效果. 随着深度学习技术的不断涌现以及研究人员对 SQL 生成场景的不断探索, 基于深度学习的 SQL 生成 (deep learning-based text-to-SQL) 成为了当前非常重要的研究问题. 近年来基于深度学习的 SQL 生成 研究取得了大量的研究成果, 生成 SQL 的效果不断提升, 成为了 SQL 生成研究中主流的方式. 因此, 针对基于深度学习的 SQL 生成问题进行综述对代码自动化生成和深度学习应用具有重要的研究意义. 目前也有研究针对 SQL 生成问题进行综述 [4, 5] . 但主要存在如下问题: (1) 现有分类框架较为粗 糙, 无法全面覆盖 SQL 生成研究; (2) 对特定类别下的研究文献整理不够充分, 没有涉及目前最新的 方法和模型; (3) 没有整理现有研究的具体思路. 本综述基于这些问题, 构造了系统的分类框架对现有 研究进行整理, 并且分析了现有 SQL 生成研究的常见思路. 本文将基于深度学习的 SQL 生成的研究 分为 4 个部分, 分别是 SQL 生成场景、数据集、模型结构和评估指标. 其中, SQL 生成场景包含了常 见 SQL 生成中所涉及的需求和要素; 数据集可以根据所涉及的数据库是否包含不同领域信息分为单 领域数据集和跨域数据集; 模型结构可以分为编码模型和解码模型, 编码模型可以根据所处理对象是 否结构化分为自然语言描述编码、数据库编码和自然语言与数据库之间的模式链接编码 3 部分, 数 据库编码又可以细分为数据模式和数据库记录的编码, 解码模型可以根据 SQL 不同的生成方式分为 模版插值的方式和基于生成的方式, 基于生成的方式包括了基于序列生成和基于语法生成两种具体的 方法.
本文对基于深度学习的 SQL 生成研究工作进行综述. 首先整理了 SQL 生成常见场景要素. 接着 探索了基于深度学习的 SQL 生成方法的数据集, 根据不同数据集的特点归纳了数据集的研究和发展. 然后本文对深度学习模型结构进行了分析, 从编码模型和解码模型两方面入手对现有方法建立了详细 的分类系统, 并对每一个详细类别的研究工作进行综述. 另外, 本文也整理了针对 SQL 生成模型的评 估指标. 最后讨论了基于深度学习的 SQL 生成研究面临的主要挑战和未来研究方向.
基于深度学习的 SQL 生成分类方法和相关工作
图 1 展示了一个基于深度学习的方法生成 SQL 语句的示例, SQL 语句生成过程主要涉及数据集 和模型结构中的编码、解码模型, 关于 SQL 生成研究的创新目前也集中在以上 3 个方向. 数据集为深 度学习模型提供用于训练的语料, 其中数据类型和特点能够反映 SQL 的具体生成场景. 不同数据集 决定了模型不同的应用场景和应用范围, 并且对数据集的研究也极大地促进了后续 SQL 生成方法的 创新. 目前基于深度学习的方法基本遵循编码器 – 解码器结构, 涉及编码模型和解码模型两个阶段, 后续研究通常针对这两个阶段进行优化.
可以从 SQL 生成场景中数据库领域对现有数据集进行划分. 数据集的早期研究专注在各个不同 领域内部收集查询问题和相应 SQL 语句, 致力于提升单领域数据集质量. 在近期的研究中, 大多数研 究者更加关注大规模的跨领域数据集, 通过提升数据复杂度增加 SQL 生成任务的挑战性, 以此来激发 研究者构建更好的深度学习模型. 另外, 也有研究者在大规模跨域数据集的基础上增加查询上下文依 赖的情况, 构造了交互式生成 SQL 语句的数据集. 总之, 随着越来越多数据集的提出, 不仅增加了研 究者对 SQL 生成任务的研究兴趣, 也增加对深度学习模型生成能力的挑战性.
编码模型的研究主要关注如何对查询问题以及 SQL 生成任务中特有的结构化数据库进行合适的编码. 具体而言, 编码过程需要同时考虑查询问题、数据库以及查询问题和数据库之间的模式链接, 其 中模式编码和模式链接对生成 SQL 语句非常重要, 也是编码模型的关键研究问题. 因此, 图网络、预 训练模型等先进的深度学习技术也不断被引入到 SQL 生成任务, 以此提升模型编码能力. 为了使得 编码过程能够更好地覆盖查询问题和数据库之间的联系, 也有越来越多的研究开始使用丰富模型的编 码内容, 以及使用专门的预训练模型增强处理自然语言与数据库模式之间链接的能力.
解码模型的研究也是 SQL 生成任务的重点之一, 它决定了如何将编码后的信息转化为 SQL 语句 或其等价表示形式. 编码器 – 解码器结构的基本输出方式为顺序地生成普通单词序列, 但模型解码后 常常无法识别 SQL 语句内不需要顺序限制的部分, 如 SQL 语句中并列的查询条件, 以及生成不符合 语法的 SQL 语句. 基于这些问题, 研究者在解码模型部分提出了一系列基于模版的方法以及使用含 语法约束或结构敏感的解码器等研究, 以此提升模型解码能力, 并尽可能保证模型生成有意义的可执 行程序. 整体而言, SQL 生成的研究是当前语义解析任务的前沿研究. 相比较于生成其他命令式编程语言 的程序, SQL 生成任务的效果相对显著, 能够在高准确率的情况下生成较为复杂的 SQL 语句. 同时 SQL 生成也是面向实际应用方面最具有潜力的语义解析任务.
工业界经典落地项目
在大数据时代, 对感兴趣数据进行快速抽取和数据分析逐渐成为人们关注的焦点. 但对数据库的 分析和操作通常需要具有编程语言基础 (如 SQL), 这给非专业人员设置了较高的门槛. 目前工业界提 出了一系列基于 SQL 生成技术的对话式数据分析应用, 只需输入自然语言, 就可以获取和分析大规模 的数据. 下面将从典型落地场景中的智能客服和 Excel 中智能数据分析举例. 在智能客服的应用中, SQL 生成与智能对话系统的结合技术能够 24 小时自动查询数据库并回答 用户相关问题, 极大地减少了人工客服的消耗和运营成本, 能够有效地提升用户体验. 阿里巴巴的小 蜜智能客服是其中的典型代表, 它能够帮助用户解决常用的业务咨询类问题, 以及通过多轮对话完成 商品导购的工作. 尤其是在大型购物节期间, 如双十一购物节, 这种智能客服能够及时响应, 有效减少 了因为客服人数不足而导致的阻塞和商业损失. 在这种智能问答情况下, 用户一般看不到后台数据库, 查找相应商品信息又很耗时, 基于自然语言理解的智能模型能够有效提升用户体验, 为企业创造更多 商业价值. Excel 作为通用数据处理和分析软件, 已经成为了人们日常办公中最重要的软件. 但很多用户通 常只使用 Excel 的基础功能, 对数据分析方面仍存在一定的难度. 微软亚洲研究院开发了一套智能分 析算法 AnnaParser 为 Excel 提供对话式智能分析功能. AnnaParser 是一种典型的 SQL 生成的落地 算法, 即通过自然语言的理解生成 SQL 处理数据并输出处理后结果. AnnaParser 首先使用数据抽象 模块 (data abstraction) 来识别自然语言与数据模式和数据记录的联系, 并替换成相应符号输入语义 解析模块. 然后使用知识理解 (knowledge understanding) 模块挖掘每个表格背后隐含的知识, 最后使 用一种自底向上的解析框架来生成最终的 SQL 语句进行数据的处理和分析. 类似地, 工业界内的谷 歌、Tableau、SalesForce 等公司同样也一直关注对话式数据分析并活跃在学术前沿. 总而言之, SQL 生成研究具有现实意义并能够在工业界中的大型项目中落地, 能够实际提升用户 在特定需求下的应用体验, 并且可以提升企业相应商品的竞争力和商业价值.
分类方法
**本文对基于深度学习的 SQL 生成研究所涉及的 SQL 生成场景、数据集、模型结构和评估方法进行了详细的划分和总结. **最终得到相应的研究分类框架如图 2 所示. 场景方面, SQL 生成场景反映了生成过程中面临的具体需求和特点, 场景可以根据不同场景元素 加以区分, 如场景中的语种、是否有多轮 SQL 生成等. 一个数据集可以包含实际场景中的多种元素, 根据 SQL 生成不同的需求和特点, 可以选择和组合不同的场景元素, 从而形成符合特定需求的 SQL 生成任务. 之后的数据集研究将根据 SQL 生成场景元素中数据是否包含多个领域的数据库进行划分. 在划分后依然可以从其他场景元素的角度继续分析, 如数据涉及的语种以及是否需要使用多轮 SQL 生成的方式. 数据集方面, SQL 生成数据集可以从是否包含不同领域数据库的角度划分, 分为单领域数据集和 跨域数据集. 在单领域的数据集中, 模型只需要针对单个领域数据库的查询问题生成相应的 SQL 语 句. 单领域的数据集只涉及单一数据库以及单一的领域知识, 因此所需数据数量相对较少, 模型学习 相对简单, 同时应用范围也有限. 在跨域的数据集中, 模型不仅要学习多领域数据库所涉及的知识, 并 要求模型能够泛化到训练过程未见过的数据库. 由于涉及的数据库和领域知识更多, 跨域数据集的数 量也相对较多, 对模型的学习和泛化能力要求更高, 但同时跨域数据集的应用价值相比单领域数据集 更大. 跨域数据集内部也可以根据场景元素的语种、SQL 语句复杂程度以及生成方式是否涉及多轮生 成继续进行划分和组合.
模型结构方面, 可根据编码模型和解码模型两部分展开. 编码模型可以从编码的对象是否结构化 分为自然语言编码、数据库编码和自然语言与数据库之间的模式链接 3 类. 在自然语言的编码方面, 得益于自然语言处理领域的发展, 目前已有大量的研究工作, 如词嵌入和预训练模型等. 在数据库编 码方面, 数据库内容可以细分为数据库模式和数据库记录. 另外目前也有研究关注单独提升模型对模 式链接的捕获能力, 从而提升模型生成 SQL 的效果. 数据库编码涉及的相关技术主要包括循环神经网 络、图神经网络和预训练模型. 解码模型可以根据生成 SQL 语句的不同方式分为基于模版插值的方 法和基于生成的方法. 基于模版插值方法的特点是不要求生成完整的 SQL 语句, 只需要生成模版中需 要插入的相关内容. 但基于模版的方法在面向复杂程度不同的 SQL 语句时具有较大区别, 所以后续将 分别讨论. 基于生成的方法模型需要生成完整的 SQL 内容, 或者生成完整的等价表示形式. 在生成的 方法中又可以根据生成 SQL 的形式不同分为基于序列生成的方法和基于语法生成的方法. 在基于序 列生成的方法中, 模型将 SQL 语句看作是一种特殊的自然语言, 将 SQL 语句中的每一个元素看作是 单词直接进行完整 SQL 序列的预测. 基于序列的方法通常也会搭配其他模块的优化来增强生成效果,如强化学习和预训练模型等. 在基于语法生成的方法中, 模型直接预测 SQL 语句的抽象语法树, 相当 于在生成过程中加入了语法的约束, 从而尽可能让模型学习到 SQL 语句的语法. 在基于语法生成的 内部, 也包含了利用语法建模和针对语法优化两种思路, 第一种直接使用 SQL 语法约束解码过程, 第 二种针对 SQL 的特点设计中间表示或使用其他语法作为中间表示来进一步优化解码过程. 编码器 – 解码器结构下的深度学习模型包含了编码模型和解码模型部分, 本文在分类时考虑文章中研究的侧重 点进行展开, 例如仅在编码模型部分进行创新的文章, 将只会在编码模型部分总结, 不会在解码模型 部分展开描述.
评估方法方面, 由于要求模型生成有约束的可执行 SQL 语句, 而不是无约束的自然语言, 所以对 生成后的内容要求更高. 具体表现为首先要求生成的内容符合 SQL 语法, 而不是其他的形式, 另外还 要求生成的 SQL 语句和标准答案的语义相同. 在 SQL 生成过程中, 常见的评估方法包括基于文本的 组成成分匹配率和完全匹配率, 和基于执行的执行结果正确率. 实际中, 往往需要综合多个评价指标来 评价生成 SQL 语句的质量. 另外, 也有研究不断探索如何更加客观地评价生成 SQL 的语义, 以及除 了 SQL 语义以外其他评估指标.
SQL 生成数据集
模型结构
**编码模型 **
基于深度学习的方法首先要求模型的输入为数字类型的向量, 并要求编码后能够尽可能地保留原 始输入的所有语义. 将输入的信息编码为合适的向量形式是训练深度学习模型中非常重要的环节, 它 将直接决定后续语义解析的效果. 由于 SQL 生成的特殊性, 在编码阶段需要同时考虑自然语言形式的 查询问题、结构化的数据库信息以及自然语言与数据库之间的模式链接信息. 图 3 展示了编码过程中需要考虑的内容. 其中编号 1 为自然语言编码部分, 编号 2 为数据库编码 部分, 编号 3 为模式链接部分. 如图 3 所示, 数据库相关的编码不仅需要考虑数据库模式的编码, 即 针对 cars data 和 cars names 两张数据表的编码, 还需要考虑模式链接的编码, 例如将自然语言中的 cars 对应到图中的两张表, 将 cylinders, model 和 horsepower 对应到表中的列名称. 现有研究工作包 括了在数据库编码部分考虑模式链接的做法, 以及单独考虑提升模型对模式链接理解能力的做法, 下 面将对近年来专注于提升模型模式链接能力的研究工作分开讨论. 除此之外, 数据库内容可以分为数 据库模式和数据库记录, 一些研究工作也对数据库中的记录进行编码, 例如将自然语言中的数字 4 对 应到数据表中的记录.
解码模型
深度学习模型在对输入数据进行深层次编码处理与计算之后, 需要将模型的内部表示形式解码为 目标形式, 在 SQL 生成任务中的目标形式就是 SQL 语句及其等价的表示形式. 按照 SQL 生成方式 的不同可以将解码模型分为基于模版插值的方法和基于生成的方法, 在基于生成的方法中又可以根据 解码过程中是否有语法约束分为基于序列的 SQL 生成方法和基于语法的 SQL 生成方法. 图 6 展示了 SQL 语句生成方式. 第一种是基于模版插值的方法, 黑色框内的是需要插入的内容, 如果 AGG 表示聚合操作符号, COL 表示查询的列, TBL+ 表示查询的表, 可以由多个表连接而来, VAL 表示具体的数值类型. 第二种方式基于生成的方法, 可以具体分为是基于序列生成的方法和基于 语法生成的方法. 基于序列生成的方法将 SQL 语句看作是由普通单词构成的序列, 并根据已有的序 列预测下一个 SQL 中的单词, 挑选前 K 个概率最大的单词作为候选的下一个单词. 基于语法生成的 方法是在 SQL 语句生成过程中加入 SQL 抽象语法树结构的约束, 一般以从上至下的方式生成, 即从 树结构中的根节点往叶子结点 (终结符) 的方向生成. 表 4 [15, 50, 53, 56, 60, 69, 72∼74] 展示了在 SQL 生成任务中的经典模型以及目前最新模型的技术特点. 其中 WikiSQL 和 Spider 是目前 SQL 生成任务中最具代表性的数据集. 近期的研究中编码模型常用 预训练模型和图神经网络来增强模型对自然语言和数据库的编码能力, 并且解码模型中基于语法生成 的方法往往会取得更好的效果. 在解码过程中, 也有研究针对解码过程中的通用改进方法, 这些方法可以用于多种解码模型中. Vinyals 等[75] 提出指针网
络在多种自然语言处理任务上均有应用, 指针网络允许从输入中拷贝单词到输出中, 这有利于模型生成词表之外的单词, 从而提升模型性能. Wang 等 [76] 提出执行指导的解码机 制, 利用语义信息判断生成的部分程序的执行信息, 在解码过程中检测并排除错误程序, 从而提升模型 解码效果. Kelkar 等[77] 提出一种判别式重新排序方法 Bertrand-DR. 其将重新排序过程构建为一种基 于 BERT 的分类器, 以此来判断生成的 SQL 语句是否与输入信息对应.
总结
本文综述了现有基于深度学习的 SQL 生成相关工作, 从 SQL 生成场景、数据集、模型结构和评 估方法 4 个层面对现有工作进行分类. 在此分类的基础上, 本文又针对每个类别进行详细的划分, 并 总结整理了关于每个研究方向的相关工作和研究思路. SQL 生成能够让非专业人士轻松地访问数据 库内容, 而无需了解复杂的 SQL 语法, 降低了从大规模数据中抽取有效信息的门槛. SQL 自动生成是 编程自动化和数据驱动的软件工程中重要的研究课题, 具有重要的学术意义和广泛的应用价值.