InferCode:通过预测子树进行代码表示的自监督式学习
通过使用 Transformer 编码器作为模型的一个关键组成部分并引入了一个名为 TransformCode 的新型框架,该研究论文提出了一种基于对比学习方式学习代码嵌入的方法,并介绍了一种名为抽象语法树转换的新型数据增强技术,从而生成更多样化和稳健的锚点样本。该框架不仅灵活适应,可以扩展到其他需要代码表达的下游任务,而且效率高且可扩展性强,支持任何编程语言。
Nov, 2023
本文针对现有技术在软件工程任务中依然存在两个问题:长期依赖和不同的代码组件被平等地处理。为了解决这些问题,本文提出了一种代表代码的层次结构(“Code Hierarchy”)和一种网络架构(“ECHELON”),该架构将异构图变换网络和基于树的卷积神经网络的优点相结合用于学习富含代码依赖信息的抽象语法树。同时,本文提出了一种新的预训练目标 “Missing Subtree Prediction” 来补充 “Code Hierarchy”。评估结果表明,我们的方法在任何代码完成、代码分类和代码克隆检测方面明显优于其他基线。
May, 2022
本文通过解析抽象语法树(AST)推测了基于树状神经网络模型的行为,并提出了一种双重变换器方法,通过源代码标记和 AST 表示进行交叉注意力机制的操作,进一步探索了图神经网络(GNN)对于基于树状问题的适应性,实证评估发现,我们的双重变换器模型在各种数据集上表现出色,优于其他基于树状神经网络和基于 GNN 的模型。
Jun, 2024
通过同时学习源代码和抽象语法树的结构信息,本篇研究提出了一种只使用与语言无关的功能和直接从抽象语法树中计算得出的功能的新机器学习模型,该模型在单语言和多语言代码总结方面均取得了最新成果。
Mar, 2021
在软件工程领域,编程语言理解与表示(即代码表示学习)一直是一个备受关注和具有挑战性的任务,其旨在应用深度学习技术生成源代码特征的数值表示同时保持其语义,这些表示可用于促进后续与代码相关的任务。然而,AST(抽象语法树)作为一种基本的代码特征,在代码表示学习中广泛应用,但目前缺乏对 AST-based 代码表示如何促进后续代码相关任务的系统和定量评估。本文通过详细的实证研究首次探索了 AST-based 代码表示在促进后续代码相关任务方面的有效性,并比较了基于代码标记序列和基于 AST 的代码表示方法在三种常见类型的代码相关任务上的性能。令人惊讶的是,整体定量统计结果表明,与基于代码标记的代码表示方案相比,基于 AST 的代码表示方法在所有三个任务中的表现均较差。进一步的定量分析显示,基于 AST 的代码表示方法在所有三个任务的某些子样本中优于基于代码标记的代码表示方法。我们还进行了全面的实验,评估和揭示了 AST 解析 / 预处理 / 编码方法的选择对基于 AST 的代码表示和后续代码相关任务的影响。本研究为未来的研究人员提供了关于如何选择每个阶段的解决方案以充分利用 AST 的详细指导。
Dec, 2023
本文介绍了一种基于 AST 的神经网络架构 xASTNN,用于源代码表示,以推广深度学习在工业实践中的应用。研究结果表明,xASTNN 在代码分类和克隆检测等任务上具有较大提升且速度更快。
Mar, 2023
GraphCodeBERT 是一种基于 Transformer 的预训练模型,通过使用数据流而不是抽象语法树的句法级别结构,可以更有效地编码代码的语义结构,从而提高代码理解过程。其结构感知的预训练任务可以改善 GraphCodeBERT,并在代码搜索,克隆检测,代码翻译和代码优化等方面实现了最先进的性能。
Sep, 2020
使用基于子树检索的方法来生成程序源代码。通过动态规划的句子相似性评分方法检索与输入句子相似的句子,提取建立相应抽象语法树的动作序列的 n-gram,并增加导致检索到的 n-gram 动作子树出现在预测代码中的动作的概率。在两个代码生成任务中,ReCode 方法提高了高达 2.6 BLEU 的性能。
Aug, 2018
通过预训练和微调编程结构,改进了面向代码任务的当前语言模型的方法,并且在使用有限训练样本时,结合程序结构与纯文本表示方式展现出显著的改进效果。
Jan, 2024
CV4Code 是一种针对源代码的紧凑而有效的计算机视觉方法,不需要词法分析或语法树解析的步骤,它将代码片段视为二维图像,并使用 ASCII 码点图像表示方法,利用这种方法生成源代码图像非常快速且无冗余,进一步使用卷积神经网络和 transformer 网络学习进行功能预测和检索,实验结果表明,该方法在处理源代码理解任务方面显著优于其他方法。
May, 2022