论文阅读_代码生成模型_CodeLlama

英文名称: Code Llama: Open Foundation Models for Code
中文名称: Code Llama:开放基础代码模型
链接: https://arxiv.org/abs/2308.12950
代码: https://github.com/facebookresearch/codellama
作者: Baptiste Rozière, Jonas Gehring, Fabian Gloeckle, Sten Sootla, Itai Gat, Xiaoqing Ellen Tan, Yossi Adi, Jingyu Liu, Romain Sauvestre, Tal Remez, Jérémy Rapin, Artyom Kozhevnikov, Ivan Evtimov, Joanna Bitton, Manish Bhatt, Cristian Canton Ferrer, Aaron Grattafiori, Wenhan Xiong, Alexandre Défossez, Jade Copet, Faisal Azhar, Hugo Touvron, Louis Martin, Nicolas Usunier, Thomas Scialom, Gabriel Synnaeve
机构: Meta AI
日期: 2023-08-24
引用次数: 319

1 读后感

Code Llama 是一个基于 llama2 模型进行训练得到的代码生成大模型。又针对代码填充、长上下文等特殊条件以及人类通常用法进行了优化,因此它集成了 llama2 对自然语言的理解,并针对代码生成场景进行了优化。

除了调用推理,我们一般主要利用微调模型来进行改进模型效果,因此选择一个好的基础模型作为工作基础非常重要,Code Llama 是当前代码生成模型中比较推荐的基础模型。

论文结构针对几项主要贡献进行了层层深入的讨论。在整理时,我把实现部分归纳了一下,把同一主题的内容放在一起了。

2 摘要

目标:发布 Code Llama 代码模型系列,基于 Llama 2 开发,提供了在开放模型中最先进的性能、填充能力、支持大型输入上下文,并具有 zero-shot 指令跟随能力,用于编程任务。

方法:提供多个版本以覆盖各种应用场景:基础模型(Code Llama)、Python 专业化模型(Code Llama-Python)和指令引导模型(Code Llama-Instruct),分别具有 7B、13B 和 34B 参数。

结论:这些模型在性能、填充能力、支持大型输入上下文以及 zero-shot 指令跟随能力方面表现出色。

3 引言

主要贡献

  • 基于 llama2 训练:所有 Code Llama 模型都使用 Llama2 模型权重进行初始化,实验证明它优于仅在代码上训练的相同架构。
  • 代码填充:生成代码时,需要考虑整个周围上下文的同时填充代码的缺失部分,因此通过多任务目标训练模型,包括自回归和因果填充预测。
  • 长上下文:将最大上下文长度从 4,096 token 扩展到 100,000 个 token。
  • 指令微调:在专有 Instruct 数据的混合上进行了进一步微调,以提高安全性和实用性。

4 Code Llama 实现

4.1 发布了三个版本

  • Code Llama:基础模型。
  • Code Llama - Python:用于 Python 版本。
  • Code Llama - Instruct:引导微调版本。

4.2 训练数据

从 Llama 2 的 7B、13B 和 34B 版本开始,在初始阶段使用 500B token 训练 Code Llama。

4.3 代码填充

代码填充的目标是在给定周围上下文情况下预测程序缺失部分。

使用因果掩蔽的概念来训练填充模型。将字符级别的训练文档拆分为前缀、中间部分和后缀,拆分位置独立于文档长度上的均匀分布进行采样。

4.4 长上下文微调

提出了一个专用的长上下文微调(LCFT)阶段,模型支持 16,384 个 token 的序列,高于 Llama 2 和初始代码训练阶段使用的 4,096 个 token。对旋转位置嵌入进行优化,将基周期从 10,000 增加到 1,000,000 以进行微调。使模型支持处理更大的序列,并减少短距离注意力的倾向。

4.5 指令微调

使用三种不同类型的数据训练:

4.5.1 专有数据集

使用 Llama 2 论文中的指令调整数据集 “RLHF V5” 微调模型,通过人类反馈和人类反馈注释的强化学习的几个阶段收集,它结合了数以千计的监督微调示例,每个示例都包含用户和工具之间的多轮对话。

4.5.2 自我指导

专有数据集包含几个与代码相关的任务示例。

使用执行反馈来选择数据来训练我们的指令模型,而不是人工反馈。我们按照以下方法构建自学数据集,得到约 14,000 个问题 - 测试 - 解决方案三元组。

  1. 通过提示生成 62,000 个访谈式编程问题 Llama 2 70B。详见附录中图 -9。
  2. 通过删除完全重复的问题来消除重复问题集,从而产生约 52,000 个问题。
  3. 对于每个问题:
    • 通过提示 Code Llama 7B 生成单元测试(图 10 中包含提示)。
    • 通过提示 Code Llama 7B 生成 10 个 Python 解决方案(图 11)。
    • 对十个解决方案运行单元测试。将通过测试的第一个解决方案(及其相应的问题和测试)添加到自指导数据集。

我们使用 Code Llama 7B 来生成测试和 Python 解决方案,因为作者发现,在相同的计算预算下,它比使用 34B 模型为每个问题生成更少的解决方案更有效。

4.5.3 排演

为了防止模型在一般编码和语言理解能力上倒退,Code Llama - Instruct 还使用来自代码数据集(6%)和自然语言数据集(2%)的一小部分数据进行训练。

4.6 训练方法

具体参数请见论文原文:Training details 部分。

4.7 结果

主实验结果如下,后面还有一些消融实验,用于展示文中几种优化的具体效果。

5 相关工作

相关工作中列出了其它主流的代码生成工具,也可以看一下。

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

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

相关文章

【前端素材】推荐优质在线花卉商城电商网页Flowery平台模板(附源码)

一、需求分析 1、系统定义 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台,用户可以在该平台上浏览、选择和购买各种花卉产品。 2、功能需求 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台,用户可以在该平台上浏览、选…

vscode在windows环境不能使用终端安装依赖

会报这样的错误提示 解决思路: 1、vscode用管理员打开 (非必须) 2、设置策略 打开 windows powerShell . 输入命令 set-ExecutionPolicy RemoteSigned 然后 Y . 查看是否设置成功 get-executionpolicy 3、下载总是超时,设置镜像源 查看镜像源 npm …

蓝桥杯-天数

//此题属于简单 #include <iostream> using namespace std; int main() { int n; cin>>n; if(n2) { cout<<28; return 0; } if(n1||n3||n5||n7||n8||n10||n12)//一定要记得写成n什么&#xff0c;每个都要写&#xff0c;不要漏掉 { cou…

常见漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出现一些特殊字符&#xff08;eg&#xff1a;单引号【‘】、双引号【“”】、括号【&#xff08;&#xff09;】、单引号括号【‘&#xff08;】、双引号括号【“&#xff08;】等一些常见的特殊的字符&#…

数通HCIE和云计算HCIE哪个好一点?

数通是网络的基础知识&#xff0c;也是入门人员必学的方向&#xff0c;相对也会简单些&#xff0c;学习数通&#xff0c;可以很好的学习其他的方向。数通的就业范围也比较广&#xff0c;运营商、企业、政府还是互联网公司&#xff0c;都需要大量的数通工程师来搭建和维护网络&a…

大数据毕业设计之前端04:管理系统为什么要自己实现图标组件

关键字&#xff1a;BuildAdmin、Icon、图标、Vue、ElementUI 前言 说到图标&#xff0c;在BuildAdmin中用到的地方很多。比如上一篇中的折叠图标&#xff0c;还有菜单栏图标、导航菜单栏图标等。常见的图标有&#xff1a;ElementUI图标、font-awesome、iconfont阿里图标以及本…

94. 递归实现排列型枚举 刷题笔记

思路 依次枚举 每个位置用哪个数字 要求按照字典序最小来输出 而每次搜索下一层时i都是从1开始 也就是说 如果有小的数可以填上 那么该方案会填上这个数字 例如 当n等于3 第一次搜索 1 2 3输出后返回 返回后此时i3 第二个位置填3 1 3 2 输出后返回 此时返回到第一层…

云计算 2月21号 (linux文件及用户管理)

一、文件管理 1.1快捷键 编辑命令&#xff1a; Ctrl a &#xff1a;移到命令行首 Ctrl e &#xff1a;移到命令行尾 Ctrl u &#xff1a;从光标处删除至命令行首 Ctrl k &#xff1a;从光标处删除至命令行尾 Ctrl w &#xff1a;从光标处删除至字首 Ctrl d &#x…

20240301-2-ZooKeeper面试题(二)

11. Chroot 特性 3.2.0 版本后&#xff0c;添加了 Chroot 特性&#xff0c;该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了 Chroot&#xff0c;那么该客户端对服务器的任何操作&#xff0c;都将会被限制在其自己的命名空间下。 通过设置 Chroot&#xff…

Win11远程桌面登陆教程

必备软件 Remote Desktop 这个软件用于便捷操作 Tailscale 这个用于创建虚拟局域网让两台设备处于同一个网段便于远程连接 详细步骤 0、打开电脑设置允许远程连接模式 把这里的开关打开就行。 1、设置允许登陆的用户以及密码 在管理员模式下的宿主电脑上面输入以下命令…

寒假作业Day 02

这是第二天的作业&#xff0c;fighting&#xff01; Day 02 一、选择题 首先char* s[6]是指针数组&#xff0c;也就是其存储的都是这些字符串的地址&#xff0c;其实际上的类型为char**&#xff0c;而fun函数传入了s数组的首地址。而后续fun函数中打印字符&#xff0c;p[i]即…

ad18学习笔记十六:如何放置精准焊盘到特定位置,捕抓功能的讲解

网上倒是一堆相关的指导 AD软件熟练度提升&#xff0c;如何设置板框捕捉&#xff1f;_哔哩哔哩_bilibili 关于Altium Designer 20 的捕抓功能的讲解_ad捕捉设置-CSDN博客 AD软件捕捉进阶实例&#xff0c;如何精确的放置布局元器件&#xff1f;_哔哩哔哩_bilibili AD绘制PCB…

项目-SERVER模块-Socket模块

Socket模块 一、Socket模块是什么&#xff1f;二、代码实现1.成员变量2.构造、析构函数3.获取套接字文件描述符4.创建套接字5.绑定地址信息6.开始监听连接请求7.向服务器发起连接8.获取新连接9.接收数据10.非阻塞接收数据11.发送数据12.非阻塞发送数据13.关闭套接字14.创建一个…

20240301作业

1.使用fwrite、fread将一张随意的bmp图片&#xff0c;修改成德国的国旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./gaoda.bmp","…

Java毕业设计 基于SpringBoot vue 社区团购系统

Java毕业设计 基于SpringBoot vue 社区团购系统 SpringBoot vue 社区团购系统 功能介绍 前端用户: 首页 图片轮播 商品信息 商品分类展示 搜索 商品详情 点我收藏 添加到购物车 立即购买 我要开团 去参团 评论 公告资讯 资讯详情 登录 注册 个人中心 更新信息 点我充值 我的订…

git之远程操作

一.分布式版本控制系统 分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑&#xff0c;但这个服务器的作⽤仅仅是⽤来⽅便“交换”⼤家的修改&#xff0c;没有它⼤家也⼀样⼲活&#xff0c;只是交换修改不⽅便⽽已。有了这个“中央服务器”的电脑&#xff0c;这样就不怕…

ChatGPT学习第四周

&#x1f4d6; 学习目标 ChatGPT实践操作 通过实际操作和练习&#xff0c;加深对ChatGPT功能的理解。 项目&#xff1a;创建一个ChatGPT应用案例 设计一个基于ChatGPT的小项目&#xff0c;将理论应用于实践。 ✍️ 学习活动 学习资料 《万字干货&#xff01;ChatGPT 从零完…

达梦数据库查询语句内存溢出问题解决

背景&#xff1a;达梦数据库使用过程中&#xff0c;某天突然服务宕机&#xff0c;导致各类后端服务无法注册到nacos上&#xff0c;重启之后nacos正常启动&#xff0c;可执行一条两千多条数据量的连表查询时间很长&#xff0c;甚至会报错&#xff0c;经查看日志发现在查询过程中…

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…

什么是前端框架中的数据绑定(data binding)?有哪些类型的数据绑定?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…