论文阅读_代码生成模型_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.hqwc.cn/news/506388.html

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

相关文章

USLE模型-P因子的计算

首先需要下载土地利用类型数据集,查看我的相关文章 对于已有的10种土地类型代码,需要按水土保持措施P值表进行重分类。 10是耕地,且庆阳市坡度10-15度左右,所以赋给了3(最好再下个DEM计算一下,这里就统一用…

ue4.27 发现 getRandomReachedLocation 返回 false

把这个玩意儿删掉,重启工程,即可 如果还不行 保证运动物体在 volum 内部,也就是绿色范围内确保 project setting 里面的 navigation system 中 auto create navigation data 是打开的(看到过博客说关掉,不知道为啥) 如果还不行&…

Redis 协议与异步方式

redis pipeline 模式 redis pipeline 是一个客户端提供的机制,与 redis 无关。pipeline 不具备事务性。目的:节约网络传输时间。通过一次发送多条请求命令,从而减少网络传输时间。 时间窗口限流 系统限定某个用户的某个行为在指定的时间范围…

基于Java SSM框架实现众筹平台网站系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现众筹平台网站系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写,受到很多的追捧,“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架,通常更简单的数据源。Spring…

【C++】string 类 ( 上)

标准库中的string类 注意: 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 比特就业课 3. string在底层实际是:basic_string模板类的别名,typedef basi…

Java集合-Map接口

在Java中,Map接口表示键值对的集合,其中每个键都是唯一的,并且每个键映射到一个值。Map接口是集合框架中的一部分,位于java.util包中。它定义了一系列操作来管理键值对,例如添加键值对、删除键值对、获取键对应的值等。…

leetcode 热题 100_盛最多水的容器

题解一: 双指针遍历:容量计算公式为min(左高度,右高度)*底部距离,我们可以令底部距离逐步递减(左右两边的指针向中部移动)。此时对于min(左高度,右高度),假设较高的线向中部移动&…

SpringBoot+Redis 解决海量重复提交问题,yyds!

在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重复处理。如何保证其…

中国电子学会2019年12月份青少年软件编程Scratch图形化等级考试试卷四级真题。

第 1 题 【 单选题 】 1.以下模块,可以“说”出“我喜欢Apple”的是? A: B: C: D: 2.某学校为教师外出提供车辆服务,当外出人数小于5人时,派轿车;当外出人数为5至7人的话…

C++ 前缀和

目录 例1 例2 例3 例4 例5 例6 例7 例8 例1 DP34 【模板】前缀和 分析:dp和arr的大小并不是固定的,就是有没有偏移量,这里的n是从1开始,不如直接放到下标1处,在最后的减法时,如果用第一个参考代码会…

C语言中的字符魔法:大小写转换的艺术

引言 在C语言的世界里,字符处理是一项基础且重要的任务。字符作为编程中最基本的元素之一,承担着信息展示、数据交互等多重角色。特别是在处理文本信息时,字符的转换和识别显得尤为重要。大小写字母的转换就是其中一个常见的需求&#xff0c…

P4913 【深基16.例3】二叉树深度题解

题目 有一个n(n≤) 个结点的二叉树。给出每个结点的两个子结点编号(均不超过n),建立一棵二叉树(根节点的编号为1),如果是叶子结点,则输入0 0。 建好这棵二叉树之后,请求出它的深度…