2 个月前
对比代码表示学习
Paras Jain; Ajay Jain; Tianjun Zhang; Pieter Abbeel; Joseph E. Gonzalez; Ion Stoica

摘要
近期的研究通过从上下文中重建代码标记来学习源代码的上下文表示。对于诸如将代码总结为英语等下游语义理解任务,这些表示应理想地捕捉程序的功能。然而,我们发现流行的基于重构的BERT模型对源代码编辑非常敏感,即使这些编辑保留了语义。为此,我们提出了ContraCode:一种对比预训练任务,旨在学习代码功能而非形式。ContraCode预训练神经网络以识别在众多非等价干扰项中功能相似的程序变体。我们使用自动化源到源编译器(source-to-source compiler)生成这些变体,作为数据增强的一种形式。对比预训练方法在JavaScript代码总结和TypeScript类型推断任务中的准确性提高了2%至13%。此外,我们提出了一种新的零样本JavaScript代码克隆检测数据集,证明了ContraCode不仅更加鲁棒,而且具有更强的语义意义。在此数据集中,我们在对抗环境下比RoBERTa高出39%的AUROC指标,在自然代码上则最多高出5%。