通过将抽象语法树建模为图来完成代码补全
通过使用 Syntax Graph Retrieval Augmented Code Generation (CodeGRAG) 模型,可以提高大型语言模型在单轮代码生成任务中的性能,填补编程语言和自然语言之间的差距,并使用外部结构化知识作为不同编程语言之间的桥梁,从而显著提高语言模型的代码生成能力。
May, 2024
在软件工程领域,编程语言理解与表示(即代码表示学习)一直是一个备受关注和具有挑战性的任务,其旨在应用深度学习技术生成源代码特征的数值表示同时保持其语义,这些表示可用于促进后续与代码相关的任务。然而,AST(抽象语法树)作为一种基本的代码特征,在代码表示学习中广泛应用,但目前缺乏对 AST-based 代码表示如何促进后续代码相关任务的系统和定量评估。本文通过详细的实证研究首次探索了 AST-based 代码表示在促进后续代码相关任务方面的有效性,并比较了基于代码标记序列和基于 AST 的代码表示方法在三种常见类型的代码相关任务上的性能。令人惊讶的是,整体定量统计结果表明,与基于代码标记的代码表示方案相比,基于 AST 的代码表示方法在所有三个任务中的表现均较差。进一步的定量分析显示,基于 AST 的代码表示方法在所有三个任务的某些子样本中优于基于代码标记的代码表示方法。我们还进行了全面的实验,评估和揭示了 AST 解析 / 预处理 / 编码方法的选择对基于 AST 的代码表示和后续代码相关任务的影响。本研究为未来的研究人员提供了关于如何选择每个阶段的解决方案以充分利用 AST 的详细指导。
Dec, 2023
介绍了针对类似代码生成和语义解析等需要将非结构化(或部分结构化)输入映射到格式化可执行输出的抽象语法网络建模框架,并使用一个具有动态确定模块化结构的解码器构建输出,具有与输出树结构相一致的特性,在 Hearthstone 数据集上获取了 79.2 BLEU 和 22.7% 的精确匹配度,相比之前最先进的值提高了 12.1 和 16.6 个百分点,在 Atis、Jobs 和 Geo 语义解析数据集上的表现也很有竞争力,并且无需进行任何任务特定的工程。
Apr, 2017
本文提出了一种基于图神经网络 (GNN) 的程序控制流和数据流表示方法 FA-AST (flow-augmented abstract syntax tree),并将其应用于代码克隆检测,相比基于抽象语法树 (AST) 的方法,在 Google Code Jam 和 BigCloneBench 数据集上均取得了更好的效果。
Feb, 2020
该研究报告介绍了一种新方法 —— 结构化语言建模(SLM),利用编程语言的严格语法将代码片段建模为树来实现任意代码完成,该方法可以生成任意编程语言的任意代码,在生成 Java 和 C# 代码方面,效果显著优于现有技术。
Sep, 2019
本文介绍了一种称为 CAST 的新型模型,采用分层拆分和重构 AST 来完整地捕捉 AST 中的丰富信息,利用递归神经网络对子树进行编码,通过重构拆分后的 AST 来聚合嵌入子树,最后使用 AST 表示和源码嵌入进行代码摘要,进而提高程序的理解和维护能力。
Aug, 2021
该研究提出了利用异构有向超图和异构有向超图神经网络处理代码分类的方法,并在公共的 Python 和 Java 代码数据集上测试,结果表明该方法可以提高代码理解和高阶数据相关性的表述。
May, 2023
本文提出了一种使用图神经网络的自动代码注释生成方法,该方法使用了源代码序列和图结构信息作为输入,使用 210 万个 Java 方法 - 注释对进行评估,并表明比四种基线技术均有所改进。
Apr, 2020
本文通过解析抽象语法树(AST)推测了基于树状神经网络模型的行为,并提出了一种双重变换器方法,通过源代码标记和 AST 表示进行交叉注意力机制的操作,进一步探索了图神经网络(GNN)对于基于树状问题的适应性,实证评估发现,我们的双重变换器模型在各种数据集上表现出色,优于其他基于树状神经网络和基于 GNN 的模型。
Jun, 2024
本文提出了 PyCoder 代码补全模型,使用轻量级的句法信息 —— 标记类型,训练支持模型通过预测标记类型来提高模型预测代码内容的准确性,以此实现对语法信息的无需依赖,比 AST 等传统方法更加高效,在 CodeXGLUE 评测中取得了最好的成绩,模型已在 HuggingFace 平台上公开。
Nov, 2022