作者: Yue Wang, Weishi Wang, Shafiq Joty, Steven C.H. Hoi
摘要:
像 BERT 和 GPT 这样的自然语言(NL)预训练模型最近被证明可以很好地迁移到编程语言(PL),并极大地有益于广泛的代码相关任务。尽管取得了成功,但目前大多数方法要么依赖于仅编码器(或仅解码器)的预训练,这对于生成(或理解)任务来说是次优的;要么以与处理自然语言相同的方式处理代码片段,忽略了编程语言的特殊特征,例如标记类型。我们提出了 CodeT5,这是一个统一的预训练编码器-解码器 Transformer 模型,它能更好地利用开发者分配的标识符所传达的代码语义。我们的模型采用统一的框架来无缝支持代码理解和生成任务,并允许多任务学习。此外,我们提出了一种新颖的标识符感知预训练任务,使模型能够区分哪些代码标记是标识符,并在它们被掩码时恢复它们。此外,我们提出利用用户编写的代码注释,通过双模态双重生成任务来实现更好的 NL-PL 对齐。全面的实验表明,CodeT5 在理解任务(如代码缺陷检测和克隆检测)以及跨各种方向的生成任务(包括 PL-NL、NL-PL 和 PL-PL)上显著优于先前的方法。进一步的分析表明,我们的模型可以更好地从代码中捕获语义信息。我们的代码和预训练模型发布于 https://github.com/salesforce/CodeT5。
主题分类:
- 计算与语言 (cs.CL)
- 编程语言 (cs.PL)
提交信息:
- 提交日期:2021年9月2日
- 备注:已被 EMNLP 2021 接收。