代码的通用表示方法
GraphCodeBERT 是一种基于 Transformer 的预训练模型,通过使用数据流而不是抽象语法树的句法级别结构,可以更有效地编码代码的语义结构,从而提高代码理解过程。其结构感知的预训练任务可以改善 GraphCodeBERT,并在代码搜索,克隆检测,代码翻译和代码优化等方面实现了最先进的性能。
Sep, 2020
本文介绍了如何使用图表示代码的句法和语义结构,并使用基于图的深度学习方法来学习对程序结构进行推理的方法。作者在两个任务上对该方法进行了评估:VarNaming 和 VarMisuse,结果表明使用已知结构的建模方法具有优势,并且可以在许多情况下学习推理有意义的变量名和解决 VarMisuse 任务,并且 VarMisuse 还可以发现成熟开源项目中的错误。
Nov, 2017
通过大量的代码数据进行编码表示学习,使用两阶段的预训练方案以及对比学习的方式增强表示,在各种下游任务上持续显著地超过现有的模型,详细讨论了源代码的自定义和有效的令牌级去噪方案、硬负样本与硬正样本的重要性、提出的双模态对比学习如何提升跨语义搜索性能以及预训练方案对模型规模决定下游任务性能的影响。
Feb, 2024
本研究提出了一个通用的语言表示学习方法 MiSAD,通过利用大型未标记语料库中提取的有意义的 n-gram,实现对不同层次语言单位或具有相当不同长度的文本的嵌入形式,从而使手头的多个语言层次的信息能够更好地统一处理,并且在 GLUE 基准和问答数据集上显著提高了下游任务的性能以及在不同语言层次上实现了最高准确率。
May, 2021
本论文介绍了一种名为 FuzzPretrain 的方法,利用程序的测试用例中的动态信息,将其嵌入代码的特征表示中,以改善代码搜索的效果,并提供了学习具有区分性的代码表示的实验证据。
Sep, 2023
本研究探索预训练模型在软件工程任务中的应用,通过四项探测任务评估模型对代码特征信息的理解程度,发现不同预训练模型表现有差异,其中 BERT 表现出乎意料的优异,但还需要深入研究。
Aug, 2021
本文提出了一种统一的跨模态预训练模型 UniXcoder,使用前缀适配器控制模型行为并使用语法树和代码注释等交叉模态内容来增强代码表示。同时,利用多模态内容进行对比学习以学习代码片段代表,并使用跨模态生成任务在编程语言之间进行表示的对齐。该模型在五个代码相关任务上取得了最先进的结果,而注释和 AST 可以增强该模型。
Mar, 2022
本研究探讨了预训练模型在代码处理中的广泛应用及其对识别语法结构、正确性、标识符、数据流和命名空间等方面的影响,并测试了使用给定目标进行预训练、模型大小变化以及微调的影响。
Feb, 2022
通过 GraphControl 模块和先进的图结构预训练模型,解决了在不同图中转移预训练模型到下游任务时的可迁移性和特异性之间的困境,并在目标数据集上实现了 1.4-3 倍的性能提升。
Oct, 2023
本文针对现有技术在软件工程任务中依然存在两个问题:长期依赖和不同的代码组件被平等地处理。为了解决这些问题,本文提出了一种代表代码的层次结构(“Code Hierarchy”)和一种网络架构(“ECHELON”),该架构将异构图变换网络和基于树的卷积神经网络的优点相结合用于学习富含代码依赖信息的抽象语法树。同时,本文提出了一种新的预训练目标 “Missing Subtree Prediction” 来补充 “Code Hierarchy”。评估结果表明,我们的方法在任何代码完成、代码分类和代码克隆检测方面明显优于其他基线。
May, 2022