Page 344 - 《软件学报》2026年第2期
P. 344
姬涛 等: AI 赋能的关系型数据库系统研究: 标准化、技术与挑战 823
解决 Text2SQL 任务中的编码问题. SQLova [28] 和 RYANSQL [33] 将输入问题中的单词与数据库模式中的单词串联后
输入 BERT 编码器进行处理. 其他方法则利用预训练语言模型编码不同层次的信息, 例如, X-SQL [27] 采用列编码替
代段编码, 而 IRNet [34] 等方法在此基础上引入了额外的特征以增强问题标记与表格列名之间的匹配. HydraNet [35]
则使用 BERT 分别对问题和单个列进行编码, 以保持与 BERT 预训练任务的一致性. ETA [36] 通过训练辅助概念预
测模块来识别问题中与表和列相关的关键标记, 并通过检测删除问题标记后置信度得分的显著下降来确定重要标
记. 此外, 一些方法提出了专门针对 Text2SQL 任务的预训练语言模型. 例如, TaBERT [37] 利用表格数据进行预训练,
目标是通过屏蔽列预测和单元格值恢复任务来优化 BERT. GraPPa [38] 则通过合成问题和 SQL 对预训练 BERT, 目
标包括掩码语言建模、预测列是否出现在 SQL 查询中以及触发的 SQL 操作. GAP [39] 在合成的文本到 SQL 和表
格数据上进行预训练, 目标涵盖掩码语言建模、列预测、列恢复和 SQL 生成. 这些方法通过结合预训练语言模型
的强大语义表示能力和任务特定的优化策略, 显著提升了 Text2SQL 任务的性能.
(2) 解码. 解码就是将编码器输出的查询和数据库模式的表示转化成 SQL 语句, 解码包括解码器解码和对解
码结果的精炼输出. 解码模型主要有以下 4 个类别, 分别是基于树的方法、基于草图的方法、基于注意力机制的
方法和基于中间表示的方法.
● 基于树的方法通过自上而下的解码器生成 SQL 的逻辑表达形式, 其中子树的组件基于其父节点和隐向量
编码生成. Seq2AST [40] 采用抽象语法树 (AST) 作为解码目标, 但该方法并未直接应用于 Text2SQL 任务. Syntax-
SQLNet [41] 则提出了一种针对 SQL 语法的基于树的解码方法, 通过递归调用模型预测不同的 SQL 组件, 直至生成
完整的 SQL 查询. SmBoP [42] 则提出了一种自下而上构建树的方法, 这种方法利用解码器对构造的解码树进行评分
然后保留得分最高的几棵树. 基于树的方法充分利用了 SQL 查询的层次化结构特性, 能够更准确地捕捉 SQL 语
句的语法和语义关系, 从而提升 Text2SQL 任务的生成效果.
● 基于草图的方法通过设计与 SQL 语法一致的草图框架, 并利用模型填充草图中的槽位来完成 SQL 查询的
生成. 这种方法显著降低了 SQL 生成的复杂度, 因为模型只需预测草图中槽位的内容, 而无需学习完整的 SQL 语
法和上下文信息, 但其性能也受到草图设计的限制. SQLNet [16] 等方法是基于草图的典型代表, 它们设计了与 SQL
语法一致的草图框架, 并通过模型预测槽位内容. 文献 [43] 和 IRNet [34] 进一步细化了基于草图的方法, 将解码过程
分为两个阶段: 第 1 阶段粗略预测槽位内容, 第 2 阶段根据问题和第 1 阶段的预测结果填充更详细的草图内容.
RYANSQL [33] 则解决了利用草图生成复杂查询的难题, 通过递归设计多个草图框架, 并分别使用模型为每个草图
填充槽位内容. 这些方法通过引入草图框架, 有效简化了 SQL 生成的复杂性, 同时提升了模型的可解释性和生成
准确性.
● 基于注意力机制的方法利用 Transformer 模型整合解码端的信息, 通过计算注意力分数并与编码器的隐向
量相乘, 生成上下文向量, 进而输出 SQL 字符. SQLNet [16] 设计了基于注意力机制的解码器, 通过将列的隐藏状态
与问题的嵌入相乘, 计算给定问题中列的注意力分数. 文献 [44] 在 SQL 组件选择中引入了对问题和列名称的双向
注意力机制. 文献 [45] 则通过结构化注意力计算边际概率, 用于填充生成草图中的槽位. DuoRAT [30] 在编码器和解
码器中均采用了自注意力机制, 以增强模型对复杂关系的建模能力. 此外, 一些方法构建了序列到序列的 Text2SQL
系统, 直接使用标准的 Transformer 模型进行端到端的 SQL 生成. 这些方法通过引入注意力机制, 显著提升了模型
对查询语义和数据库模式之间关系的捕捉能力, 从而提高了 SQL 生成的准确性和鲁棒性.
● 基于中间表示的方法通过设计 SQL 查询的中间表示形式, 使解码器首先生成中间表示, 再将其精炼为最终
的 SQL 查询. IncSQL [17] 定义了针对不同 SQL 组件的操作, 并让编码器和解码器对这些操作进行编解码. SmBoP [42]
则利用关系代数作为 SQL 查询的中间表示形式. IRNet [34] 引入了一种称为 SemQL 的中间表示, 通过解码器生成
SemQL, 再将其转换为最终的 SQL 查询. ValueNet [46] 对 SemQL 进行了改进, 扩展了其对 SQL 语法的支持能力. 此
[47] [48]
外, NatSQL 和方法 等进一步改进和扩展了 SemQL, 使其能够更好地适应复杂的 SQL 生成任务. 这些方法通
过引入中间表示, 降低了直接生成 SQL 的复杂度, 同时增强了模型对 SQL 语法和语义的建模能力, 从而提升了
Text2SQL 任务的性能.

