自从 2020 年 CodeBERT 开了代码表征预训练模型(本文称之为 CodePTM)这个新坑后,在短短两年的时间内出现了若干个程序设计语言(Programming Language,称之为 PL,与 Natural Language,也就是 NL 对应)语言模型。它们的共同特点是大部分用于处理 PL(或 Source Code)时所采用的技术是从 NLP 中的 Transformer-based 模型迁移而来,但这些 CodePTMs 又各有特点,从训练的角度出发即不同的预训练/微调策略,从数据的角度出发,比如是否使用了代码的结构信息,即抽象语法树(Abstract Syntax Tree,本文将其简称为 AST)及其变体。
而从架构出发,这些 Code 预训练模型大致可以被分为以下这三类:
-
encoder-only:CuBERT、CodeBERT、GraphCodeBERT 等。
-
decoder-only:CodeGPT、GPT-C 等。
-
encoder-decoder:PLBART、CodeT5 等。
本文对各个 CodePTM 建模编程语言的思想进行回顾,并简要分析了一下它们的特色。对文中提到的所有 CodePTMs 的描述主要从背景、预训练策略、微调策略以及下游任务这几个角度出发进行分析,考虑到这些模型之间都存在一些共性以及文章篇幅原因,文中略去了一些通用的处理手段和细节,因此对各部分的分析讲解详略不一,不过都保留了建模编程语言最核心的思想。阅读前需要对 Transformer 有一定的了解。
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢