《Unified Pre-training for Program Understanding and Generation》 NAACL 2021
文章提出的PLBART是一种序列到序列模型,能够执行广泛的程序和语言理解和生成任务。 PLBART 通过denoising autoencoding对大量 Java 和 Python 函数以及相关的 NL 文本进行了预训练。代码摘要、代码生成和七种编程语言代码翻译的实验表明,PLBART 优于或与最先进的模型相媲美。此外,在判别任务上的实验,例如程序修复、克隆检测和易受攻击的代码检测,证明了 PLBART 在程序理解方面的有效性。此外,分析表明 PLBART 学习程序语法、样式(例如,标识符命名约定)、逻辑流程(例如,else 块内的 if 块等效于 else if 块)对程序语义至关重要,因此即使在有限的注释下也表现的很好。
去噪预训练
PLBART基于BARTbase架构,使用seq2seq去噪预训练来利用PL和NL中的未标记数据,这里有三种噪声策略:标记屏蔽、标记删除和标记填充,将有噪音的序列输入encoder,原始序列加上位置偏移输入decoder,目标是去除噪声恢复原序列。

其中token infilling是将 0~k 个token替换成 [MASK] ,k=0时就是添加一个 mask而已。
在预训练的时候 NL和 PL比例是1:14,所以需要上采样和下采样去偏。
下游任务

下游任务有根据代码生成描述,根据描述生成代码 和代码翻译,实质上都是seq2seq任务。
还有两个分类任务:克隆代码检测和脆弱代码检测,对于pair输入,将两段数据拼接起来,中间用一个 </s> token连接。decoder的最后一个输出送入线性分类器中分类。

PLBART是一种在NAACL2021上提出的序列到序列模型,专为程序理解和生成任务设计。它通过预训练在Java和Python函数及相关的自然语言文本上,展示了在代码摘要、生成、翻译以及程序修复、克隆检测和易受攻击的代码检测等任务上的优越性能。预训练采用了标记屏蔽、删除和填充等去噪策略。在下游任务中,PLBART不仅处理seq2seq任务,还涉及分类任务,如代码克隆和脆弱性检测。
2685

被折叠的 条评论
为什么被折叠?



