打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
秒杀千亿级模型!微软 | 提出代码扩散预训练模型:CODEFUSION,参数仅有75M
更多干货,第一时间送达

引言

扩散模型(Diffusion Models)在图像生成方面表现出了卓越的性能。今天给大家分享的这篇文章,微软研究人员将扩散模型(Diffusion Models)应用到了代码生成领域,提出了CODEFUSION架构,实验结果表明CODEFUSION-75M效果超过了ChatGPT、StarCoder、GPT-3等众多百亿、千亿级参数的模型。

Paper:https://arxiv.org/pdf/2310.14820.pdf

Code:https://github.com/microsoft/prose-benchmarks/tree/main/CodeFusion

背景介绍

NL-to-code 是一个具有挑战性的序列到序列问题。最早的NL-to-code技术主要使用了RNN 、语义解析器等技术,随着Transformer的提出发展,研究人员逐步将其应用至代码生成领域,并提出了CodeBERT、T5(编码器解码器)、GPT-3(解码器)等模型。

随着大型语言模型(LLM)的发展,人们又提出了CodeGen 、TransCoder等大模型,并利用Prompt来进一步提升LLM在代码生成上的性能,这些模型可以以自回归和非自回归方式进行解码。

然而,自回归代码生成模型在解码过程中,无法从容的应对早期生成的Token标记,这种限制会降低文本生成的多样性。为了解决生成文本的多样性和质量之间的矛盾,早前的主要研究思路是研究解码策略,例如分组波束搜索、核采样等。

随着扩散模型(Diffusion Models)在图像生成方面表现出了卓越的性能,最近研究人员们正逐步将其应用到文本生成领域。这些方法首先使用嵌入层将离散Token转换为连续embeddings,并且在此过程中添加Gaussian 噪声来模仿扩展过程;然后选择最接近嵌入的词汇Token来将去噪embeddings映射回离散文本。然而在代码生成领域中,由于Token之间存在许多语法和语义约束,仅仅是地将embeddings映射回Token可能会产生无效的程序。

CODEFUSION架构

基于以上背景,微软研究人员提出了:CODEFUSION,这是一种自然语言到代码(NL-to-code)模型,如下图所示:

其中,CODEFUSION的架构主要由编码器(E)、降噪器(N),解码器(D)三大Transformer组件组成,外加一个分类头。输入为自然语言,输出为预测的代码片段,分别用,这里的输入输出都会被扩展至一个固定维度

在编码过程中,主要是将自然语言转换成向量表示,

基于编码后的自然语言和时间,降噪器预测并从嵌入噪声程序中去除噪声,以获得预测的去噪程序嵌入 ,这里的N是一个Transformer块,在 之间具有交叉注意力,并且在上具有完全注意力。

在将去噪Embeddings映射到离散代码Toekn之前,使用解码器 (D),对应用交叉注意力,并对 应用全自注意力,以计算最终的隐藏表示。与之前独立生成标记的文本扩散方法相反,全自注意力允许使用有关其他维度的完整信息生成每个隐藏维度()。

最后,通过分类头映射到实际Token标记,分类头计算代码标记上的分布。这里不对这些Token执行搜索,而是为每个 选择

CODEFUSION训练

本文分两个阶段来对CODEFUSION进行训练,其中1)在代码片段上对降噪器和解码器进行无监督预训练;2)在(自然语言--代码片段)对上对编码器、降噪器和解码器进行有监督微调。

继文本扩散之后,使用可训练的嵌入层 将代码片段 嵌入到连续空间中,可以在时间 处添加、删除噪声。从文本扩散的工作中汲取灵感,并通过合并来自解码器的隐藏表示 ,将 GENIE的损失调整为CODEFUSION。在时间 处的损失计算为:

为了预训练 CODEFUSION代码生成模型,本文作者将连续段落去噪 (CPD) 任务扩展到了代码生成领域。具体来说:只对与代码中的标识符或目标语言中的内置关键字对应的Token添加噪声,在去噪任务中,让模型学习关键代码Token(如变量名、函数名和代码流程控制)之间的关系。

CODEFUSION推理

在推理过程中,作者采用高斯噪声初始化,并在个时间步长上迭代地去除一定比例的噪声,以获得 ,这里在迭代去噪过程中,不使用解码器。迭代过程之后,解码器产生最终的预测码

实验结果

作者评估了三种不同语言在NL-to-code上的CODEFUSION: Python、Bash和Microsoft Excel中的条件格式规则。

如下图所示,可以发现CODEFUSION-75M效果超过了ChatGPT、StarCoder、GPT-3等众多几十亿、上百亿参数的模型。

CODEFUSION 相比自回归模型,能够产生更多样化的代码(更高的 n 元语法分数、更低的嵌入相似性和更高的编辑距离)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
0代码训练GPT-5?MIT微软证实GPT-4涌现自我纠错能力,智能体循环根据反馈让代码迭代
目标检测再次革新!图灵奖得主团队提出Pix2Seq,将Detection变成了Image Captioning
怎样生成我想要的C代码系列 | 使用Simulink.AliasType数据对象
AlphaCode到底强在哪儿?清华博士后十分钟视频详细解析
分分钟实现C 到Java、Python的代码转换!Facebook 最新发布的 TransCod...
Simulink学习笔记(二)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服