AST-T5:用于代码生成和理解的结构感知预训练
提出了一种名为 CodeT5 + 的编译器 - 解码器语言模型,具有灵活的组件模块和多样化的预训练任务,能够在不同的代码相关基准测试中取得最先进的结果,特别是在针对人类评估的代码生成任务中。
May, 2023
在软件工程领域,编程语言理解与表示(即代码表示学习)一直是一个备受关注和具有挑战性的任务,其旨在应用深度学习技术生成源代码特征的数值表示同时保持其语义,这些表示可用于促进后续与代码相关的任务。然而,AST(抽象语法树)作为一种基本的代码特征,在代码表示学习中广泛应用,但目前缺乏对 AST-based 代码表示如何促进后续代码相关任务的系统和定量评估。本文通过详细的实证研究首次探索了 AST-based 代码表示在促进后续代码相关任务方面的有效性,并比较了基于代码标记序列和基于 AST 的代码表示方法在三种常见类型的代码相关任务上的性能。令人惊讶的是,整体定量统计结果表明,与基于代码标记的代码表示方案相比,基于 AST 的代码表示方法在所有三个任务中的表现均较差。进一步的定量分析显示,基于 AST 的代码表示方法在所有三个任务的某些子样本中优于基于代码标记的代码表示方法。我们还进行了全面的实验,评估和揭示了 AST 解析 / 预处理 / 编码方法的选择对基于 AST 的代码表示和后续代码相关任务的影响。本研究为未来的研究人员提供了关于如何选择每个阶段的解决方案以充分利用 AST 的详细指导。
Dec, 2023
本文提出 TreeBERT,一个基于树结构的预训练模型,用于改进编程语言相关的生成任务。TreeBERT 采用一系列组合路径和节点位置嵌入来表示代码对应的 AST,并通过基于树掩码语言模型 (TMLM) 和节点排序预测 (NOP) 的混合目标进行训练。在多项编程语言数据集上进行的预训练实验结果表明,TreeBERT 在代码摘要和代码文档生成任务中优于其他预训练模型和业界最优模型。此外,TreeBERT 在跨编程语言应用时也表现出色。
May, 2021
本文介绍了一种 AstBERT 模型,该模型基于预训练的编程语言模型,使用抽象语法树从语义和句法两方面来更好地理解金融代码,通过 Alipay 代码库中大量的 Java 和 Python 代码进行训练,并通过代码解析器将抽象语法树信息整合进模型中,最终,在代码问答、代码克隆检测和代码优化三个任务中获得了良好的性能。
Jan, 2022
本文提出了一种名为 SASA 的结构感知稀疏注意机制用于长代码理解任务。SASA 采用 top-k 稀疏关注机制和基于抽象语法树的结构感知关注机制,能够高效降低计算成本并处理长代码,实现了优于竞争基准模型的表现。
May, 2022
通过同时学习源代码和抽象语法树的结构信息,本篇研究提出了一种只使用与语言无关的功能和直接从抽象语法树中计算得出的功能的新机器学习模型,该模型在单语言和多语言代码总结方面均取得了最新成果。
Mar, 2021
介绍了针对类似代码生成和语义解析等需要将非结构化(或部分结构化)输入映射到格式化可执行输出的抽象语法网络建模框架,并使用一个具有动态确定模块化结构的解码器构建输出,具有与输出树结构相一致的特性,在 Hearthstone 数据集上获取了 79.2 BLEU 和 22.7% 的精确匹配度,相比之前最先进的值提高了 12.1 和 16.6 个百分点,在 Atis、Jobs 和 Geo 语义解析数据集上的表现也很有竞争力,并且无需进行任何任务特定的工程。
Apr, 2017
本文介绍了一种称为 CAST 的新型模型,采用分层拆分和重构 AST 来完整地捕捉 AST 中的丰富信息,利用递归神经网络对子树进行编码,通过重构拆分后的 AST 来聚合嵌入子树,最后使用 AST 表示和源码嵌入进行代码摘要,进而提高程序的理解和维护能力。
Aug, 2021
本研究利用编码器 - 解码器 Transformer 模型进行编码生成,使用诸如抽象语法树路径预测和数据流预测等辅助任务,结构感知地提高了生成代码质量,实现了代码翻译和文本到代码生成任务的最新性能状态。
Jun, 2022
该研究探讨了使用神经机器翻译模型进行源代码自动生成文档的机器翻译任务,并阐述了抽象语法树在源码的机器学习研究中的重要性和 Tree-LSTM 方法的局限性,并提出了一种新方法 Multi-way Tree-LSTM 来应对此问题,对比现有技术取得更好的结果。
Jun, 2019