对比式代码表示学习
机器学习
2022-01-10 v4 人工智能
编程语言
软件工程
机器学习
摘要
近期工作通过从上下文重建 token 来学习源代码上下文表示。对于诸如用英语总结代码等下游语义理解任务,这些表示理想情况下应捕捉程序功能。然而,我们表明流行的基于重建的 BERT 模型对源代码编辑敏感,即便编辑保持语义不变。我们提出 ContraCode:一种学习代码功能而非形式的对比式预训练任务。ContraCode 预训练一个神经网络,以从许多非等价干扰项中识别程序的功能相似变体。我们利用自动化源到源编译器可扩展地生成这些变体,作为一种数据增强形式。对比式预训练将 JavaScript 总结与 TypeScript 类型推断准确率提升了 2% 至 13%。我们还提出一个新的零样本 JavaScript 代码克隆检测数据集,显示 ContraCode 更具鲁棒性且语义更有意义。在该数据集上,我们在对抗设定下以 39% AUROC 优于 RoBERTa,在自然代码上最高达 5%。
引用
@article{arxiv.2007.04973,
title = {Contrastive Code Representation Learning},
author = {Paras Jain and Ajay Jain and Tianjun Zhang and Pieter Abbeel and Joseph E. Gonzalez and Ion Stoica},
journal= {arXiv preprint arXiv:2007.04973},
year = {2022}
}
备注
In Proceedings of EMNLP 2021. 19 pages, 16 figures, 9 tables. Code available at https://github.com/parasj/contracode