论文阅读:Interleaving Pre( 五 )


为了解决第二个挑战 , 基于对SQL执行结果能够反映SQL质量的观察 , 我们设计了一种基于执行的选择策略来选择最优的可执行的SQL查询 , 可以返回高质量的数据 。SQL 查询完成模块的更多细节将在第 5 节中讨论 。
4、SQL
本节介绍 SQL , 它生成 SQL的排名列表 , 如图 7 所示 。我们首先在 4.1 节中介绍配备数据库感知序列化策略的 SQL学习框架 , 然后在 4.2 节中开发问题感知对齐根据中问题 Q的语义进一步对 SQL 草图进行排序 。
4.1SQL
给定一个用户问题 Q和一个数据库模式  , 我们需要在 SQL 草图中生成三个部分:、FROM、 , 为了便于表示 , 这些部分称为子任务 。我们将此问题表述为序列到序列生成问题 , 并采用编码器-解码器预训练语言模型(PLM)作为主干 。我们使 - PLM 通过多任务学习来学习生成这些部分 , 如图 7 所示 。接下来 , 我们介绍这个 SQL组件的两个关键步骤:数据库感知序列化和参数学习 。
-aware :给定用户问题 Q和数据库模式  , 我们将它们与不同的指令结合起来 , 为每个子任务构建特定的输入 , 如下所示:
?
其中 INS 是每个子任务的指令 , S(·)是序列化函数 , 用于将结构化数据库模式序列化为文本序列 。图7展示了每个子任务对应的指令 , 延续了之前的工作 , 主要由任务描述组成 。例如 , 对于FROM生成子任务 , 对应的指令是 “ theof thisto the ” 。我们的主要直觉是 , 不同的指令可以使 PLM 理解不同的子任务 , 以实现所需的输出 。
对于数据库模式序列化 , 以前基于 PLM 的工作直接连接表/列名称 , 并要求模型输出这些名称以形成 SQL 查询 。但是 , PLM 有义务生成数据库中存在的有效表/列名称 。当测试环境发生变化时 , 以前的方法不能保证这一点 。示例2和图8-(1)提供了详细的解释 。
示例 2(直接表/列名称序列化) 。大多数现有作品使用数据集作为训练集 , 该数据集在用户问题中具有很高的列提及百分比 。我们观察到 , PLM 在训练期间经常直接从问题 Q中复制列/表名称 , 而不是从数据库中进行选择 。我们设计了一个实验来探讨数据分布变化对 PLM 的影响 。我们通过直接生成列/表名称来在数据集上训练 T5-3B 模型 。图8-(1)显示了微调后的T5-3B模型的测试结果 , 其中数据库中不存在 “” 列 。
为了解决这个问题 , 我们提出了一种简单而有效的数据库感知序列化策略 , 使 PLM 能够选择有效的数据库表或列 。具体来说 , 我们通过训练 PLM 通过索引引用数据库中的列/表来实现这一点 。具体来说 , 给定名为

 , 其中包含 n个表
组成的关系型数据库D , 其中
表示 表
的第 j 列 。我们对不同部分使用括号和索引来序列化数据库 , 如下所示:
?
例如 , 在图 7 中 , 数据库“car_1”的序列化表示为“car_1: t0:(c0: , c1:maker, c2: model) t1:(c0: , c1: ) t2:(...)” 。此外 , 对于包含外键关系的表(例如 , 在图7中 , 表“”的列“id”在表“”中具有外键“”) , 我们以“t4.c0= t2.c0”形式附加它在序列化表“”之后 。
通过这种方式 , 我们强制 PLM 选择与用户问题最匹配的表/列索引 , 而不是直接从问题中复制它 。最后 , 索引会自动转换回原始列/表名称 。示例 3 和图 8-(2) 说明了我们的数据库感知序列化策略 。