文章的全名叫做CodeT5:Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generstion。

原文链接

论文StrucCoder给出了一个概念叫做Struct-aware,译过来就是结构感知能力,意思就是在训练的时候给模型的各个模块如embedding、attention、tasks等等中加入能够和代码结构相关的信息,这样模型就能够很好地区别于普通的Seq to seq模型从而学到比较好的代码表征。目前在处理代码翻译代码生成的任务上具有结构感知能力的表现优秀的模型有GraphCodeBert,CodeT5和StructCoder,在之前我已经向大家介绍过GraphCodeBert和StructCoder,借这篇文章表达我对CodeT5的理解。

通过文章标题,CodeT5是一个集成的、经过预训练的、对标识符有感知能力的编解码器模型,这个集成的意思就是CodeT5既可以处理代码理解的任务如克隆检测、也能处理代码生成的任务如代码摘要,代码修复,代码翻译等等。CodeT5这篇文章没有特别复杂的数学计算,当然是基于大家之前对Transformer和bert的理解的基础上,里面更多的体现了作者在设计和测试模型时的一个实验思想。

目录

设计思想

预训练

(a)MSP(Masked Span Predicion)

(b)IT(Identifier Taggng)

(c)MIP(Masked Identifier Prediction)

(d)Bimodal Dual Generation

Fine-tuning

单任务迁移学习

多任务学习

实验

下游任务

代码摘要

代码生成(NL-PL)

代码翻译和代码修复(PL-PL)

理解任务

预训练任务分析

总结


设计思想

CodeT5是基于T5改进的,T5在自然语言的理解和生成任务上有很好的表现;

在CodeT5能够很好承载代码结构信息的是标识符。首先标识符因为名字的不同可以区别于其他标识。然后从开发者的角度来看,标识符的名字在一定程度上代表了它的功能。比如一个函数的名字叫做binarySearch,那么我们很容易想到这个函数应该是用来实现一个二分查找的功能的。再比如,i、j、k通常作为循环的迭代变量;

CodeT5的输入中加入了注释序列,一方面,函数的功能或者变量的含义可以从注释中获取,另一方面,加入注释序列,模型可以很好处理多模态训练任务。

预训练

上图概括了预训练的所有过程。

首先输入是双模态的,即注释和代码拼接起来再编码的。模型能够对标识符有感知能力也是在预训练阶段通过预训练任务训练出来的:

(a)MSP(Masked Span Predicion)

主要的思想对于输入序列,采样15%的token给mask掉,在mask的过程中确保是掩盖整个单词。这也是大部分的模型在预训练阶段选用的任务来提高模型的理解能力。MSP的损失函数如下:

不做深入解释了,大致解释基于已被mask的输入序列和已经预测出来的被mask词去最小化下一个词的预测损失。

(b)IT(Identifier Taggng)

因为标识符在本本模型中有着很高的地位,为了让模型能够识别哪个是标识符,因此开发者设计标识符打标任务。需要注意的是这个任务仅仅由编码器完成。

IT的损失如下,同传统的序列打标的损失函数一样,使用的是交叉熵:

(c)MIP(Masked Identifier Prediction)

基于“对一个变量,改变它的名字并不会改变它在代码中作用”这一个思想,开发者设计了这个任务。首先把输入的代码中所有标识符都mask掉,但是要注意同一个名字的标识符要用同一个mask,如上图名字为mid的标识都用mask5来掩盖。

开发者认为这个任务是具有挑战性的,因为模型需要根据代码的上下文和注释来预测这个标识符的名字。损失函数如下:

(d)Bimodal Dual Generation

在之前几项任务中,解码器只能够看到离散的mask,而实际的生成任务是需要生成一个流畅的代码或者自然语言描述,为了拉近预训练与实际任务的距离,开发者设计了这项任务。在输入序列中mask掉整个代码或者自然语言,并且让解码器复原。

Fine-tuning

在大规模无标注的数据集上预训练后,就需要通过下游任务来微调模型。这里通过迁移学习和多任务学习来微调模型。

单任务迁移学习

迁移学习指的是用来处理某一个任务的模型去学习另一个任务,以提高模型的泛化能力和表征能力。和代码相关的任务通常被划分代码生成和代码理解任务。在把理解任务的输出看作是一个单一元素的序列后,CodeT5基于本身的seq2seq模型就能够很好驾驭生成任务和理解任务。

多任务学习

如果把单任务迁移学习看作是模型对不同任务串行训练的话,那么多任务学习就可以看作多任务并行训练。多任务学习指的是多个任务公用一个模型,只在输出的时候有自己的一些网络层,在一定程度可以提高训练效率,减少训练多个模型权重的开销。

通常,对要训练的任务的不同数据集按照一定的分布(通常是多样分布)采样,然后以特定的标识让模型知道自己正在学习什么任务,最后输入模型进行训练。

实验

下游任务

代码摘要

只与训练编码器的模型(RoBERTa,CodeBERT,DOBF)在项任务中效果差于编码器解码器都训练的模型(PLBART,CodeT5) 。

代码生成(NL-PL)

GPT是只训练解码器的模型。

代码翻译和代码修复(PL-PL)

从代码修复任务上,直接拷贝源代码也能够获得很高的BLEU评分,说明BLEU并不是用来评价代码生成任务的完美的准则。

理解任务

理解任务包括了瑕疵检测和克隆检测。

从以上几项下游任务的对比看出,编解码器都预训练的模型效果优于其他模型,CodeT5可以适用于各项下游任务。

预训练中,加入双模态生成任务对于代码摘要和代码生成任务有帮助,但是在有时候也会降低PL-PL生成任务的评分,这或许是因为双模态生成学习到的是自然语言与代码语言的一个对齐关系。因此加入双模态生成任务后,模型更加侧重于同时含有代码语言和自然语言的任务。

预训练任务分析

对MIP,MSP和IT作消融实验:

从中可以发现移除任意一个组件都会或多或少降低各项任务的评分,除了移除MSP反而升高了瑕疵检测任务的评分。 这说明了MSP对于生成任务是比较重要的。

移除MIP对瑕疵检测的任务损伤是最大的,也说明了MIP更侧重于代码语义的理解。

此外,由于MIP和MSP都是对输入序列中的一些token掩盖掉,为了探究这两项任务是否会有重合,开发者还做了一项对比实验。

在这项实验中,开发者使用在预训练阶段移除了MIP或者MSP的CodeT5去处理MSP和MIP任务。从Acc一栏发现只预训练该任务的模型只能很好的处理本项任务,并不能很好的处理另一项任务。“#Pred M”代表了预测出来的数量同掩盖时用的不同mask数量的相同的准确率,从这一栏发现在预训练阶段只训练MIP的模型在处理MSP任务时“#Pred M”也有很高的准确率,这可能是因为:在MIP中,相同的标识符使用的是同一个Mask,是一个多对一的关系,而MSP是一对一的关系,多对一的关系预测包含了一对一关系的预测。

总结

CodeT5是一个对标识符有感知力的模型,其原型是T5。在经过编解码器预训练、具有迁移学习和多任务学习的微调后,CodeT5能够很好的处理多项任务并且相比于之前的Baseline模型都达到了SOTA效果。

代码智能属于自然语言处理的一个分支,目前仍然是一个新兴的研究领域并且受到学术界和公业界的广泛关注。代码智能旨在提高程序质量和软件开发流程的效率,让程序员告别繁复的工作。虽然CodeT5目前有一个很高的性能,但是仍然具有以下几个需要谨慎考量的点:

偏见:因为数据集绝大部分来源于github上的仓库,里面的变量名,注释、函数名、类名形形色色,难免会有名族和性别上的歧视;

计算消耗:训练CodeT5的成本巨大,训练过程中产生了49.25kgCO2,对环境产生一定威胁;

过度依赖:CodeT5提供了一个自动化编写代码工具,这可能会让程序员对此产生依赖。如果程序员过分依赖此工具,对其生成的代码缺乏思辨,一旦CodeT5生成了某个隐藏的bug,那么对于后期的debug的开销和对于安全的威胁都是巨大的;

安全隐患:由于数据集来源于github,那么其中可能包含一些敏感信息,比如政治和个人隐私。虽然训练数据已经经过多轮清洗,但是仍然会有一些信息残留。此外,由于CodeT5这样的生成模型的不确定性,它可能会产生一些易受攻击的代码会对软件产生有害影响。

论文笔记 CodeT5相关推荐

  1. ORB-SLAM3 论文笔记

    ORB-SLAM3 论文笔记 这篇博客 ORB-SLAM3系统 相机模型的抽象(Camera Model) 重定位的问题 图片矫正的问题 视觉惯性SLAM的工作原理 相关公式 IMU初始化 跟踪和建图 ...

  2. 【论文笔记】 LSTM-BASED DEEP LEARNING MODELS FOR NONFACTOID ANSWER SELECTION

    一.简介 这篇论文由IBM Watson发表在2016 ICLR,目前引用量92.这篇论文的研究主题是answer selection,作者在这篇论文基础上[Applying Deep Learnin ...

  3. 最新图神经网络论文笔记汇总(附pdf下载)

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 [导读]近年来,图神经网络变得非常火热,每年顶会在该领域内都会出现大量的研究论文,本文为大家提 ...

  4. [论文笔记] Fast Quality Driven Selection of Composite Web Services (ECOWS, 2006)

    Time: 4.0 hours Jae-Ho Jang, Dong-Hoon Shin, Kyong-Ho Lee, "Fast Quality Driven Selection of Co ...

  5. 论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning

    论文笔记之:Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning  2017-06-06  21: ...

  6. 光流 速度_[论文笔记] FlowNet 光流估计

    [论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...

  7. 论文笔记 《Maxout Networks》 《Network In Network》

    原文出处:http://zhangliliang.com/2014/09/22/paper-note-maxout-and-nin/ 论文笔记 <Maxout Networks> & ...

  8. 论文笔记:HKMF-T: Recover From Blackouts in TaggedTime Series With Hankel Matrix Factorization

    论文笔记:Hankel Matrix Factorization for Tagged Time Series to Recover Missing Values during Blackouts_U ...

  9. 论文笔记 A Spatial-Temporal Decomposition Based Deep Neural Network for TimeSeries Forecasting

    0 abstract 空间时间序列预测问题出现在广泛的应用中,如环境和交通问题.由于存在特定的空间.短期和长期模式,以及维度的诅咒,这些问题具有挑战性. 在本文中,我们提出了一个用于大规模空间时间序列 ...

最新文章

  1. Elasticsearch学习记录
  2. 【VMware vSphere】VMware vSphere简单了解
  3. 基于阿里云日志服务快速打造简版业务监控看板
  4. 如何在 C# 平台调用云开发?
  5. mysql题目_MySQL练习题
  6. HttpClient 实现爬取百度搜索结果(自动翻页)
  7. 三网 —— 计算机网络、电信网络、广播电视网络(移动网络)
  8. Pr 入门教程,如何创建序列?
  9. Echarts多条折线可拖拽
  10. 思科 mds 虚拟服务器,Cisco MDS系列交换机VSAN功能简介
  11. win2008服务器系统玩红警,win8系统电脑下不能兼容红警2游戏的解决方法【图文】...
  12. C 语言中MDI有什么作用,Qt MDI及其使用方法(详解版)
  13. 嵌入式linux机械臂,一款基于ARM嵌入式的机械臂的设计与实现
  14. 交换机常用命令及console口配置
  15. 均值、方差、标准差的理解
  16. python学习需要多长时间
  17. 生化奇兵: 无限 设置简体中文和显示对白字幕
  18. 萌宠过春节成消费新热点 广西宠物寄养一“窝”难求
  19. JPEG 简易文档 V2.11
  20. visual sourcesafe 的下载,vss2005管理vs2010项目,安装方法,配置及用法教程

热门文章

  1. Java网络编程学习——简单模拟在线聊天
  2. Windows 11 官方正式版原版镜像【附下载】
  3. 张朝阳先生,您能不能踏实一点?
  4. Advanced Installer打包
  5. J-Link仿真器与JTAG和SWD下载与接线介绍
  6. 安装ubuntu后的系统优化
  7. 教育培训机构数字化指标-续班率
  8. 子线程创建Handler
  9. 文件上传工具--dropzone.js
  10. ffmpeg合并文件报错Unsafe file name Operation not permitted