【AI4Code】《Unified Pre-training for Program Understanding and Generation》 NAACL 2021

《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,目标是去除噪声恢复原序列。

【AI4Code】《Unified Pre-training for Program Understanding and Generation》 NAACL 2021_第1张图片

其中token infilling是将 0~k 个token替换成 [MASK] ,k=0时就是添加一个 mask而已。

在预训练的时候 NL和 PL比例是1:14,所以需要上采样和下采样去偏。

下游任务

【AI4Code】《Unified Pre-training for Program Understanding and Generation》 NAACL 2021_第2张图片

下游任务有根据代码生成描述,根据描述生成代码 和代码翻译,实质上都是seq2seq任务。

还有两个分类任务:克隆代码检测和脆弱代码检测,对于pair输入,将两段数据拼接起来,中间用一个 token连接。decoder的最后一个输出送入线性分类器中分类。

你可能感兴趣的:(论文解读,代码智能,机器学习,机器学习,人工智能,数据挖掘)