论文

稳健代码表示的不变预训练

Invariant Pretraining for Robust Code Representations

模型训练预训练

摘要

基于编码器的代码表示模型仍然广泛应用于克隆检测和代码分类等判别任务,其中它们的小尺寸和低推理成本是决定性的。然而,它们的鲁棒性很脆弱:在不变的程序下,以不同语法形式编写的语义等效的代码,即使程序行为不变,学习的表示也会大幅降低。我们对四个编码器基线、两个下游任务和四个数据集的鲁棒性差距进行了实证研究,并提供了一个最小的仅代码持续预训练方法,可以弥补其中的大部分问题。我们的方法,不变预训练(InvPT),将语义保留转换应用于语料库,并将掩码语言模型与多重正监督对比学习相结合,将同一源函数的所有增强视为正项,将自对比对(相同代码,不同掩码)与不变对比对(转换后的代码)混合以获得不同难度的正项。与之前的对比代码编码器不同,InvPT 不需要配对的自然语言数据。在我们的评估中,InvPT 将克隆检测的稳健性提高了 11 个百分点,代码分类的鲁棒性提高了 19 个百分点,同时匹配或提高了标准准确性,并且我们的消融将多正不变对比度隔离为增益的主要来源。我们的目标不是一个新的目标,而是仔细测量编码器鲁棒性在哪里被破坏以及简单的、仅代码的配方可以在多大程度上恢复它。