破解密码 LLM(代码LLM如何从 RNN 发展到 Transformer)

舒巴姆·阿加瓦尔

一、说明

        近年来,随着 Transformer 的引入,语言模型发生了显着的演变,它彻底改变了我们执行日常任务的方式,例如编写电子邮件、创建文档、搜索网络甚至编码方式。随着研究人员在代码智能任务中应用大型语言模型,神经代码智能的新领域已经出现。该领域旨在通过解决代码摘要、生成和翻译等任务来提高编程效率并最大限度地减少软件行业中的人为错误。

        随着 Code Llama 的最新版本(Meta AI 用于代码生成和理解的最先进模型),本文回顾了代码大型语言模型 (LLM) 从 RNN 到 Transformer 的演变。

图 1:大型代码语言模型的时间表。图片由作者提供。

二、代码2Vec,2018

        这是语言模型理解代码的首次尝试之一。Code2Vec旨在将代码片段表示为嵌入。这些嵌入从代码中捕获语义和结构信息,使其可用于各种软件工程任务,例如代码分类、检索和理解。

        模型尝试通过对命名良好的标记和 AST(抽象语法树)路径进行编码,并应用神经注意力来聚合成固定长度的向量表示,从而从代码片段中预测方法名称。

        图 2:Code2Vec 模型架构:程序首先分解为包含 token 和 AST 路径的上下文袋,然后通过全连接层和注意力层生成代码向量。图像灵感来自 Uri Alon 等人的原始论文。来自Code2Vec的 al

训练集: 14M Java 程序示例
模型架构:RNN + 前馈网络
新颖性

  • 基于路径的注意力模型- 作者提出了一种新颖的神经网络架构,该架构使用代码片段的抽象语法树(AST)中的语法路径作为输入特征。该模型学习为每条路径分配不同的注意力权重,并将它们聚合成单个代码向量。然后,代码向量可用于预测片段的标签分布,或测量片段之间的相似性和类比。

您可以在这里使用模型

三、代码BERT,2020

CodeBERT由微软研究团队开发,通过在基于 Transformer 的BERT 模型上引入多模态数据预训练、结合自然语言和编程语言 (NL + PL),代表了代码大型语言模型 (LLM) 领域的重大进步。该模型在包含双峰数据点对和单峰数据点的多样化数据集上进行训练,用于掩码语言建模 (MLM)和替换令牌检测 (RTD)任务。CodeBERT 在多个领域展示了卓越的性能,尤其是在自然语言代码搜索和代码到文档生成方面表现出色。

图 3:使用替换令牌检测 (RTD) 任务的 CodeBERT 模型预训练。自然语言生成和代码生成器用不同的标记替换标记,并且训练 CodeBERT 模型以将每个标记分类为替换的或原始的。图片来自 Feng 等人。等人,代码BERT

训练数据集:
Codesearch Net 数据集- 2.1M 双峰数据点 (NL + PL)、6.4M 单峰数据点(6 种语言 — Python、Java、Javascript、PHP、Ruby、Go) 参数大小:125M 模型架构
 RoBERTa
- base
Novelty :

  • 双模态训练:CodeBERT 引入了一种创新的训练方法,其中包含自然语言和编程语言标记。这种双模态训练技术通过考虑人类可读的描述和编程语言元素之间复杂的相互作用,增强了模型理解和生成代码的能力。
  • 代码的替换标记检测 (RTD) 任务:CodeBERT 预训练使用替换标记检测 (RTD) 代替下一句预测 (NSP),表现出卓越的性能。

四、Codex,2021 年

Codex是第一个成功地从文档字符串或自然语言提示生成高精度代码的 Code LLM 之一,也是广泛使用的Github Copilot的前身。Codex 由 OpenAI 团队开发,使用GPT3架构和分词器,并在大量 Github 代码上进行预训练。这个大型语言模型有 12B 个参数,是 2021 年最先进的模型,它在人类评估数据集上表现出最佳性能,一次性解决了 28.8% 的问题。

在独立的 python 函数(而不是包括配置、类实现等的整个代码)上进一步微调模型,显示出显着的改进,并且能够解决37.7% 的人类评估数据集问题。

图 4:用于 Codex GPT 模型的仅解码器 Transformer 架构。图像灵感来自 Vaswani 等人的原始Transformer 论文。等人。

训练数据集:来自 54M Github 存储库的 159GB python 文件。
参数大小: 12B (Codex-12B)
模型架构: GPT3
新颖性:

  • 第一个成功的模型,在自然语言提示下的代码编写能力方面表现出色。这会在大型 Github 存储库上训练 GPT-3 模型。
  • 该模型的作者还创建了一个新的数据集“ HumanEval ”来对代码生成任务的模型进行基准测试。该数据集包含 164 个带有单元测试的手写编程问题。

在这里尝试 OpenAI Playground 的 Codex 模型Code-T5,2021

Code-T5是基于 T5 架构的编码器-解码器模型,与 CodeBERT(仅编码器)和 Codex(仅解码器)模型不同。它引入了独特的标识符感知去噪预训练任务,帮助模型区分和恢复代码中的标识符,增强其对结构的理解。

Code-T5 通过多任务学习,在代码缺陷检测、克隆检测、代码翻译和细化等各种任务中表现出色,需要更少的数据来更快地进行微调。但是,它使用 CodeBleu 分数进行评估,而不是针对 HumanEval 数据集进行基准测试。

图 5:展示 CodeT5 如何在各种代码理解和生成任务中表现出色的插图。图片取自 Wang 等人的 Paper,CodeT5

训练数据集:Codesearch Net 数据集(与 CodeBERT 相同)
参数大小:220M
模型架构:T5(编码器-解码器架构)
新颖性:

  • 编码器-解码器模型l:第一个支持代码理解和代码生成任务的编码器-解码器代码 LLM 之一。
  • 提出了一种新颖的预训练目标标识符感知去噪,它可以学习标记类型信息和代码结构。这种方法训练模型区分标识符(变量名称、函数名称)和 PL 关键字(如 if、while 等),并在它们被屏蔽时恢复它们。
  • 微调阶段的多任务学习:同时微调各种与代码相关的任务,如代码缺陷检测、克隆检测、代码翻译、细化等。

五、PLBart,2021

PLBART(程序和语言 BART)模型利用 BART 模型架构来自动化一系列软件工程任务,包括 PLUG(程序和语言理解和生成)下的代码汇总、生成和翻译。

它引入了一种去噪序列到序列建模方法,以增强程序和语言理解,战略性地结合了 BERT 和 GPT 模型的优势。这是通过将双向编码器与自回归解码器相结合来实现的,从而可以更全面地掌握上下文和通用的生成过程。该模型采用令牌屏蔽、令牌删除和令牌填充三种去噪策略来有效地训练和微调其能力。

图 6:可视化 BART 模型(也在 PLBART 中使用)架构的图示,该架构具有双向编码器和自回归解码器。图片来自 Lewis 等人的原始BART 论文。等人。

训练数据集:从 Github、Stackoverflow 收集的 2M 个 Java 和 Python 函数及其自然语言描述(代码)。
参数大小:140M(6 个编码器层 + 6 个解码器层 + 编码器和解码器上的附加规范层)
模型架构:BART
新颖性

  • 去噪自动编码器方法:采用去噪自动编码器方法,通过有效利用编码器和解码器的双向和自回归特性,结合 BERT 和 GPT 模型的优势,增强代码理解和生成。
  • 多样化的去噪策略:提出了多种去噪策略,如token屏蔽、token删除、token填充等。这种噪声技术的多样性增强了模型从噪声数据中学习的稳健性和有效性,有助于改进代码理解和生成。

并非所有模型都使用相同的基准来评估性能。PLBART 作者不会在 HumanEval(大多数其他模型用于基准测试的数据集)上评估模型性能。

六、Code Llama,2023

Code Llama是 Meta 发布的最新 Code LLM,它在多个基准数据集中击败了所有现有的开源模型。它在HumanEval 数据集上得分为 53% ,在 MBPP 数据集上得分为 55%(只有 GPT-4 具有更好的性能)。这些收益可归因于 16K 的较长上下文长度(Llama2 的 4 倍)以及使用来自程序和自然语言的额外 500B 令牌对预训练的 Llama 2 进行训练。

该模型最适合代码生成和填充任务,并且可以在基于 IDE 的软件开发过程中充当最佳副驾驶。Code Llama模型家族有3种模型-

  1. 代码骆驼
  2. 代码 Llama Python
  3. 代码 Llama-指导

每款都有 3 种尺寸 - 7B、13B 和 34B

图 7:以预训练的 Llama-2 模型作为输入的代码 Llama 训练和微调管道。图片来自 Rozière 等人的原始Code Llama 论文。等人。

训练数据集:500B 代币 + 用于公共代码上的 Code llama Python 的额外 100B 代币
模型架构:Llama 2
参数大小:有 3 种大小可供选择 - 7B、13B 和 34B。
新颖性

  • 提出了一个处理长序列的微调步骤,称为“长上下文微调”,它将上下文长度增加到 16,384(Llama 2 上下文长度的 4 倍,即 4096)
  • 指令微调和自指令:执行指令微调的少数模型之一,在微调过程中使用显式指令或提示。作者提出了一种新颖的执行反馈方法来构建自指令数据集,而不是创建昂贵的人类反馈数据。

七、结论

        Open AI 创始人之一安德烈·卡拉帕蒂 (Andrej Karapathy) 最近称变形金刚是人工智能中最好的想法。他补充说,变压器就像一台通用的可微分计算机,它同时具有表现力、可优化性和高效性(X post)。从过去 3-4 年带来的转变来看,Transformer 模型具有巨大的潜力,可以进一步改变我们作为软件工程师的编码方式,而我认为这只是一个开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/134445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker概述

Docker概述 Docker概述Docker安装Docker命令 镜像命令容器命令操作命令 … Docker镜像容器数据卷DockerFileDocker网络管理IDEA整合DockerDocker ComposeDocker Swarm 简化版的K8s Docker为什么出现? 传统的项目部署,环境配置是十分麻烦,第…

如何利用JSON Schema校验JSON数据格式

最近笔者在工作中需要监控一批http接口&#xff0c;并对返回的JSON数据进行校验。正好之前在某前端大神的分享中得知这个神器的存在&#xff0c;调研一番之后应用在该项目中&#xff0c;并取得了不错的效果&#xff0c;特地在此分享给各位读者。<br style"box-sizing: …

STM32 IIC 实验

1. 可以选择I2C1&#xff0c;也可以选择I2C2&#xff0c;或者同时选择&#xff0c;同时运行 配置时钟信号 为节约空间&#xff0c;选择这两个&#xff0c;然后选择GENERATE CODE 二、HAL_I2C_Mem_Write I2C_HandleTypeDef *hi2c&#xff1a;I2C设备句柄 uint16_t DevAddress&am…

IDEA JAVA项目 导入JAR包,打JAR包 和 JAVA运行JAR命令提示没有主清单属性

一、导入JAR包 1、java项目在没有导入该jar包之前&#xff0c;如图&#xff1a;2、点击 File -> Project Structure&#xff08;快捷键 Ctrl Alt Shift s&#xff09;&#xff0c;点击Project Structure界面左侧的“Modules”如图&#xff1a;3.在 “Dependencies” 标签…

《006.Springboot+vue之旅游信息推荐系统》【有文档】

《006.Springbootvue之旅游信息推荐系统》【有文档】 项目简介 [1]本系统涉及到的技术主要如下&#xff1a; 推荐环境配置&#xff1a;DEA jdk1.8 Maven MySQL 前后端分离; 后台&#xff1a;SpringBootMybatis; 前台&#xff1a;vueElementUI; [2]功能模块展示&#xff1a; …

nodejs express uniapp 图书借阅管理系统源码

开发环境及工具&#xff1a; nodejs&#xff0c;mysql5.7&#xff0c;HBuilder X&#xff0c;vscode&#xff08;webstorm&#xff09; 技术说明&#xff1a; nodejs express vue elementui uniapp 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示轮播图&am…

为全志T507-H开发板配置Samba服务,高效实现跨系统的文件共享

作为一款经典的国产芯&#xff0c;全志T507-H芯片被广泛应用于车载电子、电力、医疗、工业控制、物联网、智能终端等诸多领域当中&#xff0c;而在各种复杂的嵌入式Linux应用场景当中&#xff0c;“打通ARM板卡与Windows设备间的壁垒以实现跨平台的文件共享”是一项不能被忽视的…

电脑风扇控制软件 Macs Fan Control Pro mac中文版功能介绍

Macs Fan Control mac是一款专门为 Mac 用户设计的软件&#xff0c;它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度&#xff0c;以提高设备的散热效果&#xff0c;减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温…

(三)Spring源码解析:自定义标签解析

一、使用示例 步骤1&#xff1a;创建User实体 步骤2&#xff1a;定义一个XSD文件描述组件内容 步骤3&#xff1a;创建BeanDefinitionParser接口的实现类&#xff0c;用来解析XSD文件中的定义和组件定义。 步骤4&#xff1a;创建NamespaceHandlerSupport实现类&#xff0c;目的…

多门店自助点餐+外卖二合一小程序源码系统 带完整搭建教程

随着餐饮业的快速发展和互联网技术的不断进步&#xff0c;越来越多的餐厅开始采用自助点餐和外卖服务。市场上许多的外卖小程序APP应运而生。下面罗峰来给大家介绍一款多门店自助点餐外卖二合一小程序源码系统。该系统结合了自助点餐和外卖服务的优势&#xff0c;为餐厅提供了一…

Redis极速上手开发手册【Redis全面复习】

文章目录 什么是RedisRedis的特点Redis的应用场景Redis安装部署Redis基础命令Redis多数据库特性Redis数据类型Redis数据类型之stringRedis数据类型之hashRedis数据类型之listRedis数据类型之setRedis数据类型之sorted set案例&#xff1a;存储高一班的学员信息 Redis封装工具类…

解决Java中https请求接口报错问题

1. 解决SSLException: Certificate for &#xff1c;域名&#xff1e; doesn‘t match any of the subject alternative报错问题 1.1 问题描述 最近在做一个智能问答客服项目&#xff0c;对接的是云问接口&#xff0c;然后云问接口对接使用的是https方式&#xff0c;之前一直…

「随笔」浅谈2023年云计算的发展趋势

在2023年&#xff0c;云计算的发展趋势将受到政治、经济、社会和科技四个维度的影响。以下是对这些维度的具体分析&#xff1a; 1.1 政治维度&#xff1a; 全球政策推动&#xff1a; 随着全球各国政策对云计算的重视程度不断提高&#xff0c;云计算服务将获得更广泛的市场准入…

浅谈指针函数、函数指针、指针数组、数组指针 简单明了!!!!

指针函数 形如&#xff1a;int* fun(int a, int b) 类比于&#xff1a;int fun(int x, int y)、char fun(int x, int y) 本质上是函数&#xff0c;只是返回值为int类型的指针&#xff0c;以此类推可以有void*、char*、unsigned char*类型等指针&#xff0c;类比于返回值是int …

产品经理墨刀学习----注册页面

我们做的产品是一个校园论坛学习开发系统&#xff0c;目前才开始学习。 &#xff08;一&#xff09;流程图 &#xff08;二&#xff09;简单墨刀设计--注册页面 &#xff08;1&#xff09;有账号 &#xff08;a&#xff09;直接登录&#xff1a; &#xff08;b&#xff09;忘…

什么是Target Plus EDI?

“Target Plus” 是美国知名零售商Target&#xff08;塔吉特&#xff09;推出的一个合作伙伴计划。这个计划允许第三方卖家在Target.com&#xff08;塔吉特官方网站&#xff09;上销售他们的商品。通过Target Plus&#xff0c;第三方卖家可以将他们的产品列在Target.com上&…

ZKP8.2 FRI (Univariate) Polynomial Commitment

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 8: FRI-based Polynomial Commitments and Fiat-Shamir (Justin Thaler) 8.2 FRI (Univariate) Polynomial Commitment Recall: Univariate Polynomial Commitments Initial Attempt from Lecture 4 (Merkle Tree) Fixing…

【LearnOpenGL基础入门——2】搭建第一个OpenGL窗口

目录 一.配置GLFW 二.配置GLAD 三.第一个OpenGL窗口 3.1 GLFW设置 3.2 GLAD设置 3.3 视口 3.4 输入 3.5渲染 在我们画出出色的效果之前&#xff0c;首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而&#xff0c;这些操作在每个系统上都是不一样…

远程调用,参数压缩问题

错误信息 { "msg": "Error while extracting response for type [XXX] and content type [application/json;charsetUTF-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Illegal charac…

Azure 机器学习 - 使用Python SDK训练模型

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…