FuncEvalGMN: 通过图匹配网络评估SQL的功能正确性
摘要
在本文中,我们提出了一种新颖的基于图的方法来评估SQL生成的功能正确性。传统的评估SQL代码生成的指标,如基于匹配的方法和基于执行的方法(例如,精确集合匹配和执行准确性),存在两个主要限制。基于匹配的方法无法有效评估功能正确性,因为不同的SQL查询可能具有相同的功能。基于执行的方法在评估中容易产生假阳性样本。我们提出的评估方法FuncEvalGMN不依赖于测试数据的充分准备,能够精确测试代码的功能正确性。首先,我们使用一个称为RelNode的关系运算符树(ROT)解析SQL,该树从逻辑执行的角度包含丰富的语义信息。然后,我们引入了一种基于GNN的方法来预测生成SQL的功能正确性。这种方法结合了全局位置嵌入,以解决传统图匹配框架中拓扑信息丢失的限制。作为辅助贡献,我们提出了一种基于规则的匹配算法RelNode部分匹配(RelPM)作为基线。最后,我们贡献了一个数据集Spider-Pair,其中包含一个训练集和两个测试集,每个测试集由一对SQL代码组成,以模拟各种SQL代码评估场景。
1 引言
自动代码生成评估在自然语言处理和软件工程领域具有重要意义和广阔前景。由于大型语言模型(LLMs)的强大能力,直接从自然语言提示生成代码的关注度显著上升。然而,评估不同代码生成模型的性能仍然具有挑战性,这阻碍了先进代码生成技术的发展。因此,开发更精确和可靠的评估方法是至关重要的。
在代码生成任务中,文本到SQL是一种特定类别,旨在解释文本语义以预测准确的SQL查询。实质上,用于SQL评估的核心指标主要有三种。最常用的是执行准确性,它涉及根据执行结果比较预测的SQL与标准SQL的指称。与在命令式语言中使用的通过评估代码在测试用例上的通过率而得出的通过率和Pass@k不同,执行准确性只能获得二元评分(正确或错误),无法反映部分正确性,并且在测试数据不全面时容易产生高假阳性。此外,它还会导致测试环境的设置成本和计算负载显著增加。另一种常见的评估指标是基于匹配的,例如BLEU,它依赖于计算生成代码与参考代码之间的重叠n-gram。然而,它们关注基本和词汇级特征,未能充分捕捉功能等效程序变体的广泛范围。相反,基于预训练模型的评估方法利用上下文嵌入来评估候选代码的相似性分数,超越了单纯的语法和文本属性。由于代码功能的正确性与代码的语法结构和执行逻辑密切相关,将代码构建为程序图可以捕获比将代码处理为令牌序列更多的语义信息。此外,在领域,研究人员将查询等价性问题转化为约束满足问题,并利用通用验证器来确定查询等价性。该技术包括推导查询的符号表示,并通过确定符号表示之间的查询包含关系来证明它们的等价性。然而,有一些SQL关键字无法转换为等价的符号表示,这使得该方法无法应用于所有查询。
基于上述原因,我们开发了一种基于图相似性的新的评估指标FuncEvalGMN。首先,我们将SQL转换为关系运算符树(ROT),称为RelNode,它抽象了SQL的特定语法并表示其逻辑执行计划。然后,通过结合逻辑和数据流构建一个综合程序图,以监控SQL中的执行状态和数据使用。我们利用图相似性作为评估生成SQL功能正确性的指标,通过图匹配网络(GMN)进行评估。创新性地,我们在GMN的交叉注意力计算中引入了全局位置嵌入,增强了模型捕获跨图结构细节的能力。此外,我们构建了一种基于匹配的方法RelNode部分匹配(RelPM)作为我们的基线之一。此外,我们基于Spider创建了一个数据集Spider-Pair,其中每个数据条目包括由表模式和问题构建的提示、一对SQL(参考SQL和生成SQL)以及生成SQL的功能正确性。具体而言,它包含一个训练集和两个测试集。在我们的数据集上,RelPM在两个测试集上分别达到了和的AUC,显著超过其他基于匹配的指标,而FuncEvalGMN则以和的AUC在所有方法中达到了最先进的性能。此外,引入PE相比于原始GMN提高了多达,证明了其在增强匹配算法性能方面的有效性。
本文的主要贡献如下:(a)我们提出了一种基于嵌入程序图的通用距离度量,用于评估SQL生成的功能正确性。(b)我们在GMN的交叉注意力计算中引入了一种全局位置编码机制,增强了跨图结构信息的表示能力。(c)我们开发了一种自定义匹配算法RelPM,可以通过调整父节点和子节点的权重提供综合评分。(d)我们构建了一个数据集Spider-Pair,填补了评估SQL生成的空白。
2 相关工作
代码评估指标:基于执行的方法成为了流行的代码评估工具。执行准确性通过在数据库上执行真实值和预测SQL的表示进行比较。这种方法需要覆盖数据分布的数据库,以防止假阳性,即功能上不同的SQL被错误地识别为正确。测试套件准确性涉及提炼数据集,以创建紧凑的、高覆盖率的数据库测试套件,以有效测试SQL的语义准确性。
另一方面,基于匹配的评估指标通过考虑代码的语法规则和结构特性来评估代码的表面形式差异。CrystalBLEU通过经验性地消除代码中缺乏语义意义的最常见n-gram来评估预测代码的质量,而CodeBLEU通过抽象语法树(AST)和数据流分析结合了代码的语法结构和语义信息。然而,这些方法未能正确评估在语义上等价但在词法上多样的代码片段,导致严重的假阴性。
最近,使用预训练模型的代码表示展示了出色的代码理解能力,并显著帮助代码评估。CodeBERTScore将代码编码为上下文嵌入,并计算它们的向量相似性。CodeScore提出了一个统一的代码生成学习框架,使预训练模型能够学习代码执行。
基于图的代码表示:在各种软件工程任务中,如代码补全、代码克隆检测和代码摘要,表示源代码而不丢失重要信息是代码分析的一个活跃研究领域。AST是一种树形结构,表示代码的抽象语法结构。它抽象掉真实语法中的具体细节,仅关注结构和内容相关的方面。为了增强原始AST,集成了显式语义边,如数据流和控制依赖,构建了一个包含语法和语义信息的综合程序图。此外,程序分析中的三种主要图形表示是控制流图(CFGs)、数据流图(DFGs)和程序依赖图(PDGs)。使用CFG表示代码,因为它们解决了AST在捕捉语义特征方面的局限性以及PDG在详细代码分析中的粗粒度问题。然而,SQL缺乏如CFG、DFG和PDG这样的结构。现代方法主要集中在从AST中提取SQL的语法和结构信息。为了理解SQL查询的数据流和逻辑依赖,关系运算符树(ROT)将SQL表示为关系运算符的序列和层次,描绘了查询的逻辑执行计划。我们的研究在结合ROT与逻辑和数据流以提取SQL语法和语义用于代码分析方面具有开创性。
图匹配神经网络:图匹配问题在各种现实应用中发挥着关键作用,包括源代码/二进制代码分析和计算机视觉。早期的一种方法SMPNN通过将相似性建模为节点-节点相似性分数的总和来处理该问题。随后,SIMGNN提出通过提取节点的直方图特征来利用节点-节点相似性分数。在一个重要的发展中,GMN创新性地通过跨图注意机制将节点-节点相似性信息纳入图级嵌入,增强了图的特征表示,考虑了两个图之间的节点差异。Graph-Sim偏离了图级表示方法,认为每个图的单一固定维度嵌入可能无法充分表示不同大小和链接结构的图。相反,它直接对节点嵌入的集合进行操作。随着图的复杂性和深度的增加,MGNN引入了一种多视图匹配函数,将一个图的上下文节点嵌入与另一个图的图级嵌入进行比较,有效捕捉复杂的跨级交互特征。EGSC开发了一种基于协作注意的特征融合网络,专注于模型效率,在融合模型中采用知识蒸馏以加快推理过程。同时,ERIC引入了一种强大的对齐正则化技术,在GNN编码器上应用节点-图对应约束,以降低计算成本。
3 RelNode 部分匹配
Ren 等人(2020);Eghbali 和 Pradel(2022)建议,仅仅将代码解释为自然语言以评估模型生成可能会忽视其复杂的语法结构,而基于图的方法可以有效地抽象代码的语法结构而不丢失重要信息。为此,我们将 SQL 查询转换为关系运算符树(ROT),该树使用关系代数表示 SQL 的逻辑执行计划。它有效地展示了关系运算符(如连接、选择和投影)的结构顺序和层次组织。通过利用 Apache Calcite,获得了优化的 ROT,称为 RelNode 2。它通过操作重排序和冗余子句消除来优化计划。优化后,RelNodes 可以揭示不同语法形式下相似的逻辑执行模式,从而实现 SQL 语句之间精确的语义等价比较(示例见附录 D)。为了方便表示,我们将 RelNode 的节点分为计算节点和内容节点。计算节点充当运算符,形成 SQL 查询的语法结构,而内容节点则表示查询的参数变量,作为操作数并且是树的叶节点。
图1:FuncGMN方法的整体框架
在将 SQL 查询转换为 RelNode 后,我们建立了一种基于规则的部分匹配算法(RelPM),作为基于匹配的评估基准。简而言之,RelPM 是一种应用于树结构的一般匹配算法,计算每个匹配节点的分数。在节点匹配算法中,每个节点的分数计算为节点自身分数和其子节点分数的加权和,权重根据它们特征的比较分配,算法 1 用于比较两个节点的特征。参数 是一个全局可调的自由参数,需进行微调以确保根节点与其子节点之间匹配权重的平衡分配。请注意,算法 3 对于 和 是不对称的。在算法 2 中,我们使用可调参数 来计算加权几何平均,以控制对源树语义完成的关注。
4 RelNode 图匹配网络
作为一种基于匹配的方法,RelPM 在识别具有语法结构变化的 SQL 的相同语义时仍然容易受到影响。因此,我们提出了一种基于图匹配网络的新方法 FuncEvalGMN,以进一步捕捉生成 SQL 的功能正确性。
图 2:使用 RelNode 和 AST 的 SQL 表示。AST 从语法角度纯粹抽象 SQL,而 RelNode 从执行的角度提供了更多的语义信息。在 RelNode 中,橙色边表示逻辑流,连接在 RelNode 的第二层,指示子句执行的逻辑顺序。绿色数据流表示跨各个子句的数据路径,与表示列名的节点相关联。
4.1 程序图构建
基于 RelNode,我们整合数据和逻辑流,以全面捕捉 SQL 的语法和语义信息。逻辑流和数据流增强了图形准确分析 SQL 子子句内复杂交互和依赖关系的能力。最后,SQL 被表示为一个程序图 ,其中 是来自 RelNode 的节点, 是包括 RelNode 的边以及数据和控制流边的边。
4.2 节点特征嵌入
计算节点:在 中,许多等效的语法结构可以执行相同的功能操作。例如,ORDER BY 和 LIMIT 的组合表示等效的 MAX 或 MIN 操作。假设在计算节点中有 种不同类型,我们计算每个 的嵌入为
其中上标 (0) 表示初始状态,随着消息在图神经网络中传播,该状态将被更新。
内容节点:内容节点表示查询的参数变量,这也是精确的数据库模式元素。在文本到 SQL 的过程中,一个常见的挑战是,尽管 SQL 查询在结构上是合理的,但由于参数变量(如表名和列名)的误用,可能无法按预期执行。主要原因是像 Word2Vec 和 FastText 这样的词嵌入模型被用于表示语义,它们倾向于将两个语义上相似但不同的实体(即列名 ‘kid’ 和 ‘child’)表示为相似的嵌入。为了解决这个挑战,引入了一种字符串感知嵌入方法,以增强我们模型对不同实体的理解。具体而言,我们首先将每个内容节点表征为一个固定长度为 的字符串 ,每个元素编码为范围从 0 到 127 的 ASCII 值,可以转换为一个 n 维向量 。然后,我们对每个维度应用 128 维大小的扩展,将向量扩展为 。为了增强不同节点之间的特征差异,进一步采用了 ResNet 模型。由于页面限制,请参阅附录 B 以获取具体架构。
4.3 位置嵌入
具有相同邻域的节点通常表现出相似的表示。然而,由于在子树中的独特层次位置或位置,它们的实际功能可能会有所不同。为了解决这个问题,我们引入了位置编码,特别是使用随机游走位置编码(RWPE)。它通过一个 步随机游走来定义:
其中 是随机游走的状态转移矩阵, 表示 的 次方。 和 分别表示图的邻接矩阵和度矩阵。该方法利用简单的随机游走矩阵方法,仅关注节点 返回自身的概率,记作 。这一策略提供了独特的节点表示,基于每个节点具有独特的 步拓扑邻域的前提,特别是当 足够大时。
图3:位置编码。
图4:图嵌入。
提出了两种计算图对中节点位置编码的方法。第一种方法分别计算每个图中节点的位置信息,而第二种方法,如图3所示,通过 Rels 节点和预定义的种子节点连接两个图。然后,我们计算合并图中节点的全局位置编码。显然,后者为图内和图间的节点提供了全局位置信息。Rels 节点指的是每个 RelNodes 中的顶级节点,Seeds 节点指的是在两个 RelNodes 之间与其对应子树 和 匹配的节点。即,。我们限制跨图边缘仅包括表示子条款的二级操作符的根节点,例如 TableScan 和 Sort。在图3中,节点颜色表示在 次游走后返回自身的平均概率,这突显出具有相似子结构的节点往往具有更接近的特征值。此外,在合并图中,每个节点有更多的随机游走路径可供选择,从而减少返回自身的可能性,因此节点的层次位置变得更加显著。
4.4 图嵌入
考虑从 构建的两个图, 和 。我们基于 Li 等人(2019)的研究创建一个图匹配网络(GMN)来生成图表示并评估它们的相似性。在本节中,我们专注于增强 GMN 的消息传递机制,如图 4 所示。更多细节请参见附录 C。
图内消息传递:在图内消息传递中,对于一个节点 ,其邻居集表示为 。在第 步传递的消息为:
其中 表示节点 在第 步接收到的消息, 和 分别是节点 和 在第 步的表示。 是节点 和 之间边的表示。我们计算每个 的嵌入为:
图间消息传递:在图间消息传递中,利用交叉注意力来计算图表示,从而共同捕捉两个图的语义相似性,而不是专注于单个图中的孤立特征。具体而言,对于图 中的节点 ,我们考虑 来表示图 中对应的节点集。与图内消息传递不同,这里的节点表示 是节点特征嵌入 和节点位置嵌入 的非线性组合。此外,节点的位置表示在此过程中会被更新。在 Li 等人(2019)的基础上,使用全连接交叉注意力,我们的交叉注意力与合并图位置编码结合,提供了更具表现力的节点表示。例如,如图 2 所示,在不同的子树(在 Sort 和 Project 下)中,不同出生日期的节点可以有效识别。 是节点 到另一个图的交叉图消息,通过交叉注意力计算为:
其中 是节点 在 中对 中 的注意力权重, 是相似性函数, 是 的维度。随着维度 的增加,导致更高的注意力分数方差,softmax 函数进入低梯度区域,阻碍反向传播学习。图之间的差异被封装在交叉图匹配向量中,并将在传播过程中被强调。
针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈
![](https://img-blog.csdnimg.cn/img_convert/e0466511c62f21585582e415234ad69f.jpeg)
5 实验
5.1 数据集
基于SQL生成的基准数据集Spider,我们构建了一个新的数据集Spider-Pair,用于代码评估目的。该数据集由一个训练集和两个测试集组成,每个集包含一对SQL,以模拟SQL代码评估的多样化场景。每对SQL由黄金SQL和生成的SQL组成,并附有一个真实标签,指示生成的SQL的正确性。训练集(train)和一个测试数据集(test)由使用大型语言模型进行的NL2SQL代码生成的数据组成,而另一个测试集(test-aug)则是通过SQL等价重写生成的。为了减轻评估数据集中数据泄漏的问题,我们确保训练集和测试集来自不同的数据库。更多细节见附录F。
5.2 消融研究
我们使用相关性评估指标(如AUC、斯皮尔曼相关系数R 和皮尔逊相关系数R )评估代码评估指标与代码功能正确性之间的关系,如附录I所讨论的。在本节中,我们在四个关键领域进行消融研究,以评估模型中各个组件的影响。
表1:消融研究。实验(0)将SQL解析为抽象语法树(AST),而(1)将SQL解析为RelNode;(2)将控制流和数据流纳入RelNode,以捕获更多语义信息。实验(0)、(1)和(2)是在GMN的原始版本上进行的;(3)和(4)基于(2),并在GMN的交叉注意力中引入不同的位置信息嵌入(PE)。实验(3)中的PE是在单独的图上计算的,而实验(4)中的PE是通过连接种子节点获得的合并图得出的。附录H中的折线图显示了实验(1)-(4)训练过程中测试集AUC的变化。
首先,我们使用mo sql parsing 3库将SQL转换为抽象语法树(AST)。在测试数据集中,生成的SQL代码和参考SQL代码的语法结构趋于相似,因此实现了的AUC。然而,在增强的测试增强数据集上,AUC显著下降至。为了克服AST的局限性,我们引入了RelNode,这是一种能够识别不同语法中相似逻辑执行模式的SQL优化工具。RelNode在功能增强的测试数据集上提高了的性能。此外,将逻辑和数据流分析集成到RelNode中,使我们能够揭示和传达文本特征背后的更深层语义,在两个数据集上的性能提升了。
对图匹配网络(GMN)的进一步增强包括可学习的位置信息嵌入(PE),以包含结构和位置信息。实验(3)将PE应用于两个单独的图,测试增强数据集的AUC提高了,但在测试数据集上下降了0.89%,这表明在具有相似语法结构的SQL对中强调结构差异会导致过拟合。相比之下,实验(4)在合并图上计算PE,测试数据集和测试增强数据集的增益分别为和。合并图上的PE不仅突出了RelNode中不同层级节点之间的差异,还使潜在匹配子树的特征更接近,从而增强了模型超越训练数据集的泛化能力。
此外,我们还实验了各种图匹配神经网络(GMNN),但它们的性能不及GMN。我们推测,在SQL评估任务中,与MGNN相比,我们优化的GMN利用全局位置信息编码来增强捕获等效结构的能力。此外,与EGSC和ERIC相比,它可以通过交叉注意力更好地关注节点之间的细微差异。
5.3 与其他评估指标的比较
为了全面评估我们的模型,我们将其与基于匹配的指标进行比较,包括 CrystalBLEU、CodeBLEU、RelPM、ASTPM,以及基于预训练模型的方法,包括 CodeScore、CodeBERTScore,在两个数据集上进行评估。此外,为了从 SQL 等价性的角度进行评估,我们将我们的方法与最先进的 SQL 等价验证器 SPES 以及基于功能和逻辑一致性评估 SQL 等价性的自定义提示(使用 GPT-4 模型)进行比较。
如表 2 所示,我们提出的 RelPM 显著超越了所有基于匹配的方法,其中 FuncEvalGMN 达到了最先进的水平。与 RelPM 相比,ASTPM 的性能下降了约 ,证明 RelNode 可以减轻语法差异的影响,并在逻辑执行下捕捉更深层次的语义信息。为了更好地利用 CodeBLEU 的潜力,我们用 RelNode 替换了 AST。然而,CodeBLEU 仅对语法树进行粗粒度的子树匹配,其性能仅与 ASTPM 相当,突显了我们提出的部分匹配算法的优越性。此外,由于 CrystalBLEU 忽视了代码的语法结构和语义信息,它在所有基于匹配的算法中表现最差。
在基于预训练模型的类别中,CodeBERTScore 仅依赖于嵌入在预训练模型中的先验知识,导致在新语言(如 SQL)上的可扩展性较差。具体而言,它在 test-aug 数据集上的 AUC 仅为 。相比之下,CodeScore 通过数据驱动学习对预训练模型进行微调,从而在两个数据集上取得了最佳结果,仅次于我们的方法。然而,CodeScore 仅将代码视为一系列标记,忽视了代码独特的语法结构和语义信息。此外,它仅对生成的代码与参考代码进行简单的线性连接,阻碍了对代码对之间结构差异的感知。然而,由于模型固有的先验知识,它在与训练集数据分布不同的 test-aug 数据集上表现出色,得分仅比我们的 FuncEvalGMN 低 。
SPES 涉及生成查询的符号表示,并通过评估这些符号表示之间的查询包含关系来建立它们的等价性。然而,它并未完全支持所有 SQL 关键字,并且在区分区分大小写的字符串方面存在困难,导致在两个测试数据集上的 AUC 仅为 和 。GPT-4 的性能超过了 SPES 方法,表明 GPT-4 在确定 SQL 等价性方面具有一定优势。然而,由于 GPT-4 对 SQL 语句理解的固有限制,其有效性并未达到我们提出的 FuncEvalGMN 方法所提供的功能一致性评估。
5.4 泛化到其他 NL2SQL 数据集
BIRD 数据集具有更复杂的模式,更适合 LLM SQL 生成任务。我们根据附录 F.1 中的相同指导原则模拟了 BIRD-pair 数据集。
FuncEvalGMN 在表 3 中的性能仍然优于其他方法,因此其泛化能力显而易见。此外,我们评估了两个数据集的复杂性,Spider-
表 3:不同方法在 BIRD 数据集上的性能比较。
6 结论
在我们的工作中,我们提出了 FuncEvalGMN,这是一种新颖的基于图的方法,用于增强代码的功能正确性评估,特别是 SQL。该方法涉及将 SQL 转换为一个图,以捕捉其语法和语义本质,使用节点类型和编码策略的组合来表示 SQL 结构和参数。我们利用图匹配网络来评估图的相似性,结合位置嵌入以改善结构理解。我们的实验包括一个独特的数据集 Spider-Pair 和基线方法,以进行全面评估。展望未来,我们旨在将该方法扩展到其他编程语言,探索其在不同编码范式中推广的潜力,并进一步增强代码评估技术。
A RelNode 部分匹配 ( RelPM )
RelPM 计算每个 RelNode 的匹配节点及其分数,使用 F-beta 分数来确定两个 SQL 之间的相似性。我们将该过程分为三个部分:节点匹配、RelNode 评分和相似性评估。
A.1 节点匹配
在匹配两个 SQL 查询的 RelNodes 时,我们可以将一个指定为源树,另一个指定为目标树,然后使用深度优先搜索来找到它们的匹配节点集。在评估目标树的匹配时,源树被视为参考,以衡量目标树的节点与其对齐的程度。节点匹配的成功与否通过与 个候选匹配节点的评分来决定,得分最高的节点被选为最终匹配。该过程的公式为 ,其中 表示节点 n 与另一个树中的候选匹配节点 的匹配得分,可以计算为:
表示节点自身与候选匹配节点的匹配得分,而 表示两个树之间子节点的最大匹配得分。 的计算是递归的,遵循与 相同的方法,直到达到叶节点。此外,如图 5 所示, 作为加权系数,用于平衡节点得分与其子节点得分之间的重要性。红色节点表示成功匹配,而灰色节点表示匹配失败。当 低于 0.5 时,重点转向子节点的匹配结果,导致我们避免使用 和 ”AND” 逻辑,而更倾向于匹配更多的子节点。相反,当 超过 0.5 时,重点放在匹配父节点上,导致其下所有对应子树节点的匹配失败。
A.2 RelNode 分数
对于给定节点,其匹配得分由候选匹配节点 决定。如果两个节点的属性相同,则认为可以建立匹配。
图 5: 部分匹配
对于具有匹配信息的树,我们可以根据子句和关键节点的重要性调整权重,从而影响整体得分。得分方程定义为:
这里, 表示加权因子, 表示节点自身的得分,该得分在匹配阶段的过程中计算。计算从根节点开始,递归进行,通过加权和结合节点自身及其子节点的得分。
A.3 相似性评估
通过对源树和目标树进行交叉比较,“精确度”计算在源树中成功找到与目标树匹配的节点的百分比,而“召回率”则衡量在目标树中与源树匹配的节点的百分比。我们计算加权几何平均数,
在评估代码生成模型时,我们主要关注验证生成的代码是否与参考代码的语义完全一致。在这种情况下,参考代码充当目标树,而生成的代码代表源树。因此,我们在评估中优先考虑召回率,这表明我们赋予相对较高的值。
B 内容节点特征嵌入
图6:内容节点特征嵌入的架构
图6展示了使用“abc cba”作为示例表示内容节点的过程。最初,该字符串通过ASCII编码被编码为一维向量。随后,向量的每个元素通过独热编码进行转换。因此,“abc cba”被编码为一个的矩阵。在这个上下文中,64表示字符串的长度,任何不足64的部分通过零填充进行补偿。128维度反映了ASCII独热编码的维度。为了增强内容节点的特征表示,我们使用了ResNet模型。该模型由八个残差块(组织成4层)组成,每个块主要采用一维卷积层作为其核心组件。
C RelNode 图匹配网络
除了消息传递,GMN的其他实现细节如下:
C.1 更新函数
更新函数整合所有收集到的信息,以在每次迭代步骤中更新每个节点的表示。这个过程在数学上被公式化为:
在这个方程中, 是节点 在步骤 的更新表示。函数 在我们的实现中是一个门控循环单元(GRU),它使用节点的先前状态 、内部图消息 和跨图通信 来更新节点的特征表示。
C.2 聚合器
聚合是计算整个图的表示。在经过 次传播步骤后,聚合函数处理节点表示的集合,以生成图级表示 。我们采用的聚合方法是(Li et al., 2015)中提出的:
在此方法中,门控加权和聚合了所有节点的信息,并过滤掉无关数据,证明比简单的求和更有效。
C.3 相似度度量
一旦我们获得了图对 的图表示 和 ,我们就可以使用向量空间度量来评估它们的相似性。合适的度量包括欧几里得、余弦或汉明相似度。在我们的案例中,我们采用欧几里得距离作为相似度度量,其定义为:
C.4 损失函数
在我们的工作中,我们需要评估我们计算的图相似度与真实标签之间的距离。为此,我们利用基于边际的成对损失:
其中 表示图对的标签, 作为边际参数。这个损失函数鼓励相似对的相似度分数 小于 (当 时),而对于不相似对则大于 (当 时)。该损失对噪声数据具有鲁棒性,并且不会对小的偏差过度惩罚。它还通过保持边际来增强模型的泛化能力,这对于在未见数据上的性能至关重要,而不仅仅是最小化训练误差。
D Equivalent Conversion Capabilities of RelNode
Calcite 将解析器生成的关系代数表达式转换为执行计划,并在此过程中应用多个优化规则。这些优化规则使得关系表达式的等效转换成为可能,例如谓词下推、常量折叠和列裁剪。
在我们的工作中,我们利用 Calcite 生成的执行计划来构建图。它抽象了 SQL 的语法结构,并从逻辑执行和变量使用的角度提供了丰富的语义信息。此外,它对执行计划的优化标准化了 SQL,揭示了在不同语法结构下相同的功能,从而降低了在确定功能等价性时模型判断的难度。
图 8:谓词下推示例
在接下来的讨论中,我们探讨一个谓词下推优化的案例。谓词下推是一种策略,涉及将外部查询块的 WHERE 子句中的谓词重新定位到更细粒度的查询块中,在该查询块中谓词是相关的。这种方法使得数据过滤更早进行,并增强了索引的利用率。图 8 演示了两个功能上等价的 SQL 查询,而图 7 则展示了它们相同的 RelNode。
初始的 SQL 查询在 has_pet
、student
和 pets
表之间执行 θ-连接,然后根据条件 pets.pettype = 'dog'
和 student.sex = 'F'
应用过滤器。
通过谓词下推优化,外部查询的总条件被分解成直接在内部查询中应用的子条件。因此,在修改后的 SQL 中,条件 student.sex = 'F'
被应用于 student
表,pets.pettype = 'dog'
被应用于 pets
表,在对这些表执行 θ-连接之前。通过这一优化,可以通过早期过滤和改进的索引性能实现更高效的数据处理。
图 7:优化 SQL 的 RelNode 结构。
图 9:误报案例。
在本节中,我们将介绍图 9 中的两个案例,以讨论在测量 SQL 查询正确性时误报的问题,特别是功能上不正确的 SQL 查询被错误地认为是正确的情况。
在第一个案例中,两个 SQL 查询之间唯一的语义差异在于它们过滤条件指定的范围。参考 SQL 使用的条件是 weight 3000 AND weight ,而生成的 SQL 指定为 weight AND weight 4000。由于数据库中没有 weight 字段恰好等于 3000 或 4000 的记录,这两个 SQL 查询检索到相同的数据集,错误地将这两个不等价的 SQL 视为等价。
在第二个案例中,两个 SQL 语句是否等价取决于 DDL 设置。如果 capacity 被设置为唯一,则数据库中将只有一条记录具有最大 capacity 值,导致两个 SQL 查询产生相同的单条记录。然而,如果 capacity 没有设置为唯一,则可能会有多条记录共享最大 capacity 值。这意味着参考 SQL 和生成的 SQL 并不等价,导致错误的执行匹配。
F Spider-Pair 数据集
文本到 SQL 指的是将自然语言查询转换为精确 SQL 命令的过程。为此,已经开发了许多数据集,包括 Spider,其中每个条目包含一个参考 SQL 查询、一个相应的自然语言问题和相关的数据库。然而,目前没有可用的数据集来验证生成的 SQL 代码质量与评估指标之间的一致性。我们提出的 Spider-Pair 填补了这一空白。它由一个训练集和两个测试集组成,我们将其称为 train、test 和 test-aug。数据集中的每个条目包括一对 SQL 查询(参考 SQL 和生成的 SQL)、一个提示以及生成的 SQL 的功能正确性。在接下来的部分中,我们将介绍我们的构建方法。
F.1 SQL对由LLMs自动生成
为了生成SQL对,我们利用Spider Yu等人(2018)作为我们的源数据集。该数据集包含10,181个查询和5,693个独特的复杂SQL查询,涵盖了138个不同领域的200个数据库。我们从146个数据库中使用了8,659个示例作为我们的源训练集,而测试集包含来自20个不同数据库的1,034个示例。这种分离确保了评估的公平性,因为训练集和测试集使用了不同的数据库。随着大型语言模型(LLMs)能力的不断提升,在各种任务中超越人类表现,我们利用它们作为生成SQL的中介。我们仔细设计了由问题和所需数据库的数据定义语言(DDL)构成的提示。DDL是根据我们数据库中所有表的模式制作的,每个模式以markdown格式概述了表的结构。我们用于生成SQL的LLMs包括GPT-3.5、GPT-4和CodeLLaMA-13B。
表4:LLMs在训练集和测试集上的执行分数
表4展示了三种LLMs在Spider数据集上的比较性能。我们将输出的SQL语句分为三种评分:-1、0和1。评分表示SQL中存在语法错误,使其无法被数据库执行。对于可执行的SQL查询,我们使用1表示与提示指令的一致性,使用0表示相反。或者,1表示与参考SQL的功能等价,而0表示不等价。首先,我们根据SQL查询在数据库中的执行正确性进行验证。由于执行准确性中假阳性的高发生率,我们随后提示GPT-4进行进一步检查。在执行结果与GPT-4的响应不同时,我们进行人工评估以确定功能的正确性。最后,我们对所有SQL对实施重复数据删除过程,并排除参考代码和生成代码相同的情况。
F.2 数据增强通过等价重写
在F.1节中,我们在训练集和测试集中使用相同的LLM来模拟代码生成过程。由于相同的模型倾向于使用类似的句法结构来处理相同类型的查询,因此两个集合中的SQL对共享相同的数据分布。然而,这种数据偏差可能会影响评估的有效性。为了解决这个问题,我们对参考SQL进行等价重写,采用多样的句法结构来构建SQL对。此外,我们使用F.1节中的相同方法验证它们的功能等价性。图10展示了通过我们的等价重写得到的两个困难正例,其中尽管SQL对实现了相同的结果,但采用了显著不同的句法结构。
G 注意力可视化解释
在本节中,我们分析一个困难的正例,即两个 SQL 在功能上是等价的,但在语法结构上有所不同。我们可视化了由我们的 FuncEvalGMN 传播的初始和最终注意力图,以检查其识别图中关键特征的能力。此外,通过观察注意力图从初始传播到最终传播的变化,我们阐明了 FuncEvalGMN 如何检测和匹配具有强相关性的节点。这一分析表明,我们的模型擅长识别两个图中等价的子结构和功能节点,从而促进对 SQL 的语法结构和语义的全面理解。
图 10:困难的正 SQL 对。红色关键词表示等价的语法结构,其中 MAX 可以被 ORDER BY 和 LIMIT 1 的组合替代。在连接两个表后执行带有两个条件的查询,相当于对每个表进行单独的条件查询,然后取交集。
G.1 第一次传播的注意力图
图 11:第一次传播的注意力图。在图中,节点上的标签表示它们的内容。黑色边表示 RelNode 中的连接,而绿色边表示注意力链接。绿色边的透明度反映了注意力权重的大小。注意力链接是从左图中的节点绘制到右图中接收最高注意力的节点。
图 11 显示了一个显著特征:注意力主要集中在 ts date 和 MAX 节点上。这是因为 ts date 是 SQL 查询检索的字段,而 MAX 是用于提取它的逻辑。它们共同定义了 SQL 查询所表达的核心功能。这表明我们的模型从一开始就成功捕捉到了 SQL 的关键语义。
G.2 最终传播的注意力图
图12展示了模型最终传播的注意力图,在这里我们可以识别出几个关键特征:
-
等效子结构捕获 观察到,除了其他细节节点外,TableScan子树的所有对应节点在两个图中都通过注意力边成功匹配。这个现象可以从两个角度进行解释:a. 从相似性来看,TableScan子树作为两个SQL查询中的共同元素,表现出最高的相似度。b. 此外,左图中Project、Sort和Limit子树内几乎所有节点都通过注意力边与右图中的HashAggregate子树匹配。这是因为左图中Project、Sort和Limit操作的组合在功能上等同于右图中的HashAggregate操作。从这一分析可以明显看出,我们的模型具有从完全不同的结构中提取等效功能结构的强大能力。
-
等效功能节点的捕获 观察表明,左图的排序子树中的 LAST 节点引起了右图中 MAX 节点的注意。这是因为降序排序并选择最后一个数据条目的操作等同于在聚合函数中直接取 MAX。此外,作为 SQL 执行结果的 ts date 字段被准确捕获:左图中 limit 子树内的 1 节点引起了右图中 ts date 节点的注意。这是因为使用 limit 来检索最后一条记录提取了 ts date 字段,而该节点是右图中唯一的 ts date 节点,因此被准确识别。
图 12:最终传播的注意力图。
接下来,我们比较初始传播和最终传播的注意力图,以分析模型传播过程中注意力图变化的趋势,最终辨别模型在特征提取中的注意力组件的能力和特征。
最初,节点嵌入仅经过编码器层处理,尚未整合邻域信息和结构特征。在这个阶段,模型快速捕捉到 SQL 的核心特征 ts date 和 MAX,但忽略了其他 SQL 细节。然而,在最终传播之后,通过观察注意力边缘的方向和不透明度,我们可以辨别出注意力图呈现以下四个特征:
-
注意力的分布更加均匀。
-
注意力权重更加平衡。
-
捕获到两个图中的等效子结构。
-
识别出不同结构中的功能等效节点。
这些观察结果表明,随着传播的进行,模型开始考虑 SQL 图中更广泛的特征,从最初对关键元素的关注转向对 SQL 结构和语义的更全面理解。此外,模型能够从等效功能节点和等效子结构中提取功能一致的信息。这种能力在一定程度上得益于关系运算符树(ROT)的使用,因为 ROT 中的每个子树(子结构)代表执行计划中的一个原子功能操作。
H 测试集 AUC 在训练过程中的趋势
图13:测试数据集中的 AUC
图14:测试增强数据集中的 AUC
I 相关性评估
不同模型的性能可以使用以下指标进行评估:
曲线下面积 (AUC) 指的是接收者操作特征 (ROC) 曲线下的面积。ROC 曲线是一个图形表示,展示了二元分类器系统在其判别阈值变化时的诊断能力。
其中 是真正率, 是在阈值 下的假正率,而 是对阈值的微分。
斯皮尔曼等级相关系数 是一种非参数的等级相关性度量,它评估两个变量或数据集排名之间的统计依赖性:
其中 表示 和 的排名之间的协方差,分别用 和 表示, 表示标准差。
肯德尔秩相关系数 评估两个排名之间的关系,通过测量给定变量与参考测量之间的序数或等级相关性。公式为:
其中 Concordant 是两个测量在其相对排名上达成一致的对数。相反,Discordant 计算两个测量表现出相互矛盾的排名顺序的对数。
J 代码大型模型的评估
我们的训练和测试数据集来源于 GPT3.5、GPT-4 和 CodeLlama。为了验证我们的 FuncEvalGMN 相较于其他模型的有效性,我们在 Spider 数据集上使用 DeepSeek 模型进行了推理。获得的 AUC、 和 分别为 、 和 ,这表明我们的方法在其他大型模型上也展现了强大的评估能力。
最后,我们在 Spider 数据集上使用三种评估指标对四个代码大型模型进行了评估:FuncEvalGMN、测试套件和执行准确率。FuncEvalGMN 的原始输出范围记作 ,范围从负无穷到零。我们使用公式 将输出结果归一化到 0 到 1 的范围。如图 15 所示,我们的 FuncEvalGMN 也可以作为评估 SQL 生成的良好指标。与执行准确率和测试套件相比,我们不需要承担维护和执行数据库的成本。
图 15:代码大型模型的评估
K 关键字在 BIRD 和 SPIDER 数据集中的分布
在我们的研究中,我们分析了两个数据集,BIRD 和 SPIDER,以了解 SQL 关键字的分布。这一分析提供了对每个数据集中查询复杂性和性质的洞察。
BIRD 数据集显示出 WHERE 关键字的高频率,出现在 的查询中。这表明查询中对过滤条件的强烈重视。JOIN 操作普遍存在,出现在 的查询中,暗示着大量查询涉及从多个表中组合数据。
SPIDER 数据集呈现出不同的 SQL 关键字分布。WHERE 关键字在 的查询中被使用,频率显著低于 BIRD 数据集,表明应用于过滤数据的条件较少。JOIN 关键字出现在 的查询中,显示出与 BIRD 相比,对组合表的依赖较小。
有趣的是,聚合 和计数 在 SPIDER 中更为常见,表明对数据汇总的关注更高。ORDER BY 关键字在 的查询中被使用,而 LIMIT 出现在 ,这两个比例均略高于 BIRD。
对这些数据集的分析揭示了 SQL 关键字使用的不同模式,反映了它们所包含的不同类型的查询。BIRD 更加重视数据的过滤和连接,而 SPIDER 则更关注数据的聚合和联合操作。这些差异突显了每个数据集所满足的查询复杂性和使用案例的多样性。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓