
摘要
近期研究表明,像BERT和GPT这样的自然语言(NL)预训练模型可以很好地迁移到编程语言(PL),并在广泛的代码相关任务中带来显著的好处。尽管这些模型取得了成功,但大多数当前的方法要么依赖于仅编码器(或仅解码器)的预训练,这种预训练对于生成任务(或理解任务)来说并不理想,要么以与自然语言相同的方式处理代码片段,忽略了编程语言特有的属性,如标记类型。我们提出了CodeT5,这是一种统一的预训练编码器-解码器Transformer模型,能够更好地利用开发者指定的标识符所传达的代码语义。我们的模型采用了一种统一框架,无缝支持代码理解和生成任务,并允许进行多任务学习。此外,我们提出了一种新的标识符感知预训练任务,使模型能够区分哪些代码标记是标识符,并在它们被遮掩时恢复它们。我们还建议利用用户编写的代码注释,通过双模态双重生成任务来实现更好的自然语言-编程语言对齐。全面的实验表明,CodeT5在诸如代码缺陷检测和克隆检测等理解任务上显著优于先前的方法,并且在包括PL-NL、NL-PL和PL-PL在内的多个方向上的生成任务中也表现出色。进一步分析显示,我们的模型能够更好地捕捉代码中的语义信息。我们的代码和预训练模型已发布在https://github.com/salesforce/CodeT5 。
代码仓库
awsm-research/vulrepair
jax
GitHub 中提及
salesforce/codet5
官方
pytorch
GitHub 中提及
jetbrains-research/commit_message_generation
pytorch
GitHub 中提及
salesforce/coderl
jax
GitHub 中提及
fewshotcdcs/cdcs
pytorch
GitHub 中提及
基准测试
| 基准 | 方法 | 指标 |
|---|---|---|
| code-generation-on-concode | CodeT5 | BLEU: 41.48 CodeBLEU: 44.10 Exact Match: 22.70 |
| code-translation-on-codexglue-codetrans | CodeT5 | Accuracy (C#→Java): 66.90 Accuracy (Java→C#): 65.90 BLEU (C#→Java): 79.87 BLEU (Java→C#): 84.03 |
| defect-detection-on-codexglue-devign | CodeT5 | Accuracy: 65.78 |
| text-to-code-generation-on-codexglue-concode | CodeT5 | BLEU: 41.48 CodeBLEU: 44.10 EM: 22.70 |