中文

对比式代码表示学习

机器学习 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