介绍
近年来,随着变压器(Transformers)技术的引入,语言模型取得了显著的发展,这彻底改变了我们执行日常任务的方式,比如编写电子邮件、创建文档、搜索网页,甚至改变了我们编写代码的方式。研究人员在将大型语言模型应用于代码智能任务中,一个新的领域——神经代码智能已经出现。这个领域旨在通过解决代码摘要、生成和翻译等任务,提高编程效率并减少软件行业中的人为错误。
随着Meta AI最新发布的状态艺术模型Code Llama——一个用于代码生成和理解的模型,本文回顾了从循环神经网络(RNNs)到变压器的大型语言模型(LLMs)在代码领域的发展历程。
代码2Vec,2018
Code2Vec是早期尝试让语言模型理解代码的一次尝试。Code2Vec旨在将代码片段转换为嵌入向量。这些嵌入向量捕捉了代码中的语义和结构信息,使它们对于各种软件工程任务如代码分类、检索和理解等都非常有用。
该模型尝试从代码片断中预测方法名称,方法是对命名良好的标记和AST(抽象语法树)路径进行编码,并应用神经注意力机制来聚合成固定长度的向量表示。
训练集:14MJava程序示例
模型架构:循环神经网络(RNN) + 前馈网络
新颖性:
代码BERT,2020
由微软研究团队开发的CodeBERT在代码大型语言模型(LLM)领域代表了一个重大进步,它引入了多模态数据的预训练,结合自然语言和编程语言(NL + PL)在基于Transformer的BERT模型上。该模型训练了包含双模态数据点对和单模态数据点的多样化数据集,用于掩蔽语言建模(MLM)和替换令牌检测(RTD)任务。CodeBERT在多种领域表现出卓越的性能,特别是在自然语言代码搜索和代码生成文档方面表现突出。
训练数据集:
CodeSearchNet 数据集 - 2.1M条双模态数据点(NL+PL),6.4M条单模态数据点(包括6种语言 - Python、Java、Javascript、PHP、Ruby、Go)
参数大小:125M
模型架构:RoBERTa-base
新颖性:
Codex,2021
Codex 是首批成功的代码生成大型语言模型之一,它能够通过文档字符串或自然语言提示,以高准确性生成代码,是广泛使用的 GitHub Copilot 的前身。由 OpenAI 团队开发,Codex 使用了 GPT3 架构和词分器,并在大量的 GitHub 代码上进行了预训练。这个大型语言模型拥有120亿参数,在2021年是一款最先进的模型,在人类评估数据集上通过第一次尝试解决了28.8%的问题。
对模型进行进一步的微调,专注于独立的Python函数(而非包括配置、类实现等的整体代码),显示出显著的改善,能够解决37.7%的人类评估数据集问题。
训练数据集:159GB的Python文件,来自于54M个Github仓库。
参数大小:12B(Codex-12B)
模型架构:GPT3
新颖性:
Code-T5,2021
Code-T5是基于T5架构的编码器-解码器模型,与CodeBERT(只包含编码器)和Codex(只包含解码器)模型都不同。它引入了一种独特的标识符意识型去噪预训练任务,有助于模型区分和恢复代码中的标识符,增强其对结构的理解。
Code-T5在多项任务上表现出色,例如代码缺陷检测、克隆检测、代码翻译和改善,通过多任务学习能够要求较少的数据进行更快的微调。然而,它使用CodeBleu分数进行评估,而不是针对HumanEval数据集进行基准测试。
训练数据集:Codesearch Net 数据集(与CodeBERT相同)
参数大小:220M
模型架构:T5(编码器-解码器架构)
新颖性:
PLBart,2021
PLBART(程序和语言BART)模型利用BART模型架构来自动化一系列软件工程任务,包括代码总结、生成和翻译,它属于PLUG(程序和语言理解与生成)的范畴。
它引入了一种去噪序列到序列建模方法,用于增强程序和语言理解,策略性地结合了BERT和GPT模型的优势。这是通过结合双向编码器和自回归解码器实现的,允许更全面的上下文理解和多才多艺的生成过程。该模型采用三种去噪策略,包括令牌掩盖、令牌删除和令牌填充,以有效地训练和微调其能力。
训练数据集:从Github, Stackoverflow 收集的2M个Java和Python函数及其自然语言描述(代码)。
参数大小:1.4亿(6个编码器层 + 6个解码器层 + 在编码器和解码器上的额外规范层)
模型架构:BART
新颖性:
并非所有模型都使用相同的基准来评估性能。PLBART的作者没有使用大多数其他模型用于基准测试的HumanEval数据集来评估模型性能。
Code Llama,2023
Code Llama 是 Meta 最新发布的代码语言模型(LLM),在几个基准数据集中战胜了所有现有的开源模型。它在HumanEval数据集上的得分为53%,在MBPP数据集上的得分为55%(仅有GPT-4的表现更好)。这些成绩可以归功于更长的上下文长度16K(是Llama2的4倍)以及在程序和自然语言的额外5000亿令牌上训练预训练的Llama 2。
该模型最适合用于代码生成和填充任务,在基于IDE的软件开发中可以作为最好的助手。Code Llama模型家族有三种类型的模型:
每种都有三种大小 — 7B、13B 和 34B。
训练数据集:500B 令牌加上额外的 100B 令牌,用于公开可获得的代码上的Llama Python
模型架构:Llama 2
参数大小:提供三种尺寸 —— 7B、13B 和 34B。
新颖性:
结论
Open AI 的联合创始人之一 Andrej Karapathy 最近称 Transformers 为 AI 中的最佳创意。他补充说,变换器就像是一个通用的、可微分的计算机,它同时具有表达性、可优化性和效率性(X post)。