Google推出开源代码大模型CodeGemma:AI编程新纪元,代码自动完成和生成技术再升级

3590083c968c00200581df38dc6d7fa4.jpeg

  • 论文标题: CodeGemma: Open Code Models Based on Gemma
  • 机构: Google LLC
  • 论文链接: https://arxiv.org/pdf/2406.11409.pdf

CodeGemma模型概述

CodeGemma是基于Google DeepMind的Gemma模型系列(Gemma Team et al., 2024)开发的一系列开放代码模型。这些模型继承了Gemma预训练模型的基础,并在此基础上进一步训练,使用的数据主要是代码,训练数据量在5000亿到1000亿token之间。CodeGemma模型在代码完成和生成任务中达到了最先进的性能,同时在大规模情况下仍保持强大的理解和推理能力。

dab075bd2951e40abb81be598799b844.jpeg

CodeGemma发布了三种模型:一个7B的代码预训练模型,一个7B的指令调优代码模型,以及一个专门为代码填充和开放式生成训练的2B模型。这些模型的系谱在文中的图1中有所展示。

在发布的第一个版本(v1.0)中,包括了所有三种模型,随后在一个月后的第二个版本(v1.1)中,对预训练的2B模型和指令调优的7B模型进行了更新。如果速度不是关键考虑因素,建议使用v1.1版本,因为它在质量上有较好的平衡提升。

模型训练和数据处理

1. 数据处理和预训练

所有CodeGemma v1.0模型都是在主要由英语网页文档、数学和代码组成的5000亿token数据上进一步训练的。2B v1.1模型则在1万亿token上训练。所有2B模型都是100%使用代码训练的,而7B模型则是80%代码和20%自然语言的混合。我们的代码语料库来源于公开可用的代码仓库。数据集经过去重和过滤,以移除评估代码中的污染以及某些个人和敏感数据。除了Gemma的处理步骤外,我们还为代码数据执行了额外的预训练步骤。

2. 指令调优

指令调优的7B v1.1模型与其1.0版本不同之处在于使用的强化学习算法(基于Gemma 1.1)和合成数据生成的具体细节。这些模型都遵循以下的一般方向。

为了提高模型与现实世界应用的一致性,我们通过将代码仓库中最相关的源文件共同定位,并尽最大努力将它们分组到相同的训练示例中来创建训练示例。具体来说,我们采用了两种启发式方法:基于依赖图的打包和基于单元测试的词汇打包。

为了构建依赖图,我们首先按仓库对文件进行分组。对于每个源文件,我们从顶部N行中提取导入,并执行后缀匹配以确定在仓库结构中最长的匹配路径。我们确定文件之间的边缘重要性(一种启发式测量),并移除不重要的边缘以打破循环依赖(在Python中常见)。然后,我们计算图中所有对的最短路径,其中较短的距离表示文件关系更强。最后,我们使用拓扑排序对文件图进行线性化,选择基于到已排序节点的最小距离的下一个无父节点,并使用字典顺序来打破平局。

b335d4efc7f1d7d9d485767e4fd79caa.jpeg

模型性能评估

1. 代码完成和生成任务的性能

CodeGemma模型在代码完成和生成任务中表现出色。特别是,2B预训练模型在代码完成任务中表现突出,其低延迟特性对于需要快速响应的用例非常关键。此外,7B模型在代码生成任务中也显示了强大的性能,尤其是在多语言代码生成方面,如BabelCode测试所示(表4)。这些模型在HumanEval和Mostly Basic Python Problems基准测试中的表现(表3)进一步验证了其优越性。

f5cfd6be094d3553891cc21143b30224.jpeg

4080862122d10b49cad7a01e3858e793.jpeg

2. 自然语言理解能力

CodeGemma模型保留了基础Gemma模型的自然语言处理能力。在自然语言理解方面,CodeGemma的表现优于多个同类模型,例如Mistral 7B和Llama-2 13B模型。这一优势体现在多个自然语言处理基准测试中,如BoolQ和PIQA(Clark et al., 2019; Bisk et al., 2019)。这些能力使得CodeGemma模型不仅在代码相关任务,也在需要理解和生成自然语言的任务中表现出色。


a8ba23f51a8adba58b7ceecb85331841.jpeg

3. 数学推理能力

CodeGemma模型在数学推理能力方面也显示出卓越的性能。通过在多个数学数据集上进行训练,如Math Dataset和MathQA,模型的数学问题解决能力得到了显著提升。这些数据集包括从数学竞赛中收集的问题以及基于程序生成的代数问题,这些训练帮助模型在复杂的数学推理任务中表现优异(表5)。

f06dedc8229c59dc9ab4a5b4e706ca81.jpeg

实际应用和部署

CodeGemma模型的设计使其非常适合在实际应用和部署中使用。2B模型由于其快速的代码填充能力,特别适合集成到集成开发环境(IDE)和本地环境中。这一模型在内存和响应速度方面的优化,使其成为开发者的有力工具。

7B模型则因其在代码任务和自然语言理解任务中的强大表现,更适合部署在托管环境中,如云计算平台。这些模型在处理大规模和复杂的代码生成和理解任务时,能够提供高质量的输出。

在部署这些模型时,需要注意的是,应选择合适的输出停止策略以适应部署环境。例如,可以使用生成FIM哨兵令牌的方法来截断输出,以确保生成的代码质量和一致性。

总之,CodeGemma模型系列通过在代码生成、自然语言理解和数学推理等多个方面的出色表现,为各种实际应用场景提供了强大的支持。

模型的优势和局限性

1. 模型的优势

CodeGemma模型在代码生成和理解方面展现出了显著的优势。这些模型不仅在自然语言处理任务中保持了强大的性能,而且在数学推理方面也显示出了卓越的能力。例如,CodeGemma 7B模型在多种编程语言的代码生成任务中表现优异,这一点在BabelCode的评估中得到了验证(见表4)。此外,这些模型在处理大规模代码数据集时,能够有效地进行代码补全和生成,特别是2B预训练模型在低延迟场景下表现出了极高的效率,这对于集成开发环境(IDEs)等应用场景非常关键。

2. 模型的局限性

尽管CodeGemma模型在多个方面表现出色,但它们也存在一些局限性。首先,尽管7B模型在代码任务中表现优异,但其在推理时需要较大的内存,这可能限制了它们在资源受限的环境中的应用。此外,根据Gemma团队的报告,所有模型都在处理某些特定类型的代码或语言结构时存在一定的局限性,尤其是在跨文件代码依赖关系的自动补全方面。此外,虽然模型在数学问题解决方面表现良好,但在一些高难度的数学问题上,模型的解决能力仍有待提高。

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

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

相关文章

Flutter - Material3适配

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 Flutter - Material3适配 对比图具体实现一些组件的变化 代码实现Material2的ThemeDataMaterial3的ThemeData Material3适配官方文档 flutter SDK升级到3.16.0之后 …

exports和module.exports使用误区

在Node.js中,exports和module.exports是用于从模块中导出功能的关键概念。然而,它们之间存在一些常见的使用误区,以下是对这些误区的详细解释: 误区一:exports和module.exports没有区别 事实:虽然exports…

AI在线免费视频工具2:视频配声音

1、视频配声音 https://deepmind.google/discover/blog/generating-audio-for-video/ https://www.videotosoundeffects.com/ (免费在线使用)

企业内网是如何禁用U盘的?电脑禁用U盘有哪些方法?

在当今企业环境中,数据安全和信息保护至关重要。 为了防止数据泄露和恶意软件传播,很多企业选择在内网中禁用U盘,以控制数据的物理传输。 小编这就来给大家总结一份详细指南!! 关于企业内网如何禁用U盘的指南&#x…

mysql分析常用锁

这里写自定义目录标题 1.未提交事物,阻塞DDL,继而阻塞所有同表的后续操作,查看未提交事务的进程2.存着正在进行的线程数据。3.根据processlist表中的id杀掉未释放的线程4.查看正在使用的表5.mysql为什么state会有waiting for handler commit6.什么情况导…

【Spring Cloud应用框架】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

异步爬虫:aiohttp 异步请求库使用:

使用requests 请求库虽然可以完成爬虫业务,但是对于异步任务来说,它是做不到的, 这时候我们需要借助 aiohttp 异步请求库来完成异步爬虫的编写: 话不多说,直接看示例: 注意:楼主使用的python版…

还在为找不到工作发愁?来看看嵌入式行业

嵌入式系统的就业方向非常广泛,涵盖了许多不同的行业和领域。以下是一些常见的嵌入式系统就业方向: 消费电子产品:这包括智能手机、平板电脑、智能电视、智能家居设备等。嵌入式系统工程师可以参与设计、开发和测试这些产品的硬件和软件。 汽…

电脑有线无线一起用怎么设置

要在电脑上同时使用有线和无线网络,可以通过以下几种方法进行设置: 调整网络高级设置: 进入“网络和共享中心”。点击“更改适配器设置”。按键盘Alt键调出菜单栏,然后点击“高级→高级设置”。在“适配器和绑定”标签页下可以对可…

mysql-线上常用运维sql-2

在MySQL中,直接查询当前正在执行的事务可能不是非常直观,因为MySQL并没有提供直接的命令或系统视图来列出所有正在运行的事务。但是,你可以通过几种方法间接地获取这些信息。 1. **查看进程列表** 使用SHOW PROCESSLIST;或SHOW FULL PROCESSL…

触发器的结构

1、修改分隔符符号 delimiter $$ 可以修改成$$//都行 2、创建触发器函数名称 create trigger格式的函数名 3、什么样的触发,操作那个表 after:......之后触发 before:........之前触发 insert:插入被触发 update:修改…

超简洁的待办事项自托管便签todo

什么是todo todo 是一个自托管的 todo web 应用程序,可让您以简单且最少的方式跟踪您的 todo。 搭建 使用Docker命令行方式进行搭建 docker run -d -p 8000:8000 -v todo_db:/usr/local/go/src/todo/todo.db prologic/todo Docker-compose.yml version: 3 ​ se…

工程项目全生命周期管理系统企智汇一站式解决方案!

在当今竞争激烈的工程行业,实现工程项目的全生命周期管理已成为企业提升效率、降低成本、确保质量并赢得市场竞争的关键。企智汇的工程项目管理系统解决方案致力于助力工程企业实现全面、精细化的项目全生命周期管理,确保从项目启动到竣工交付的每一个环…

微信小程序 - 出于性能原因,对长行跳过令牌化。长行的长度可通过 “editor.maxTokenizationLineLength” 进行配置

问题描述 出于性能原因,对长行跳过令牌化。长行的长度可通过 “editor.maxTokenizationLineLength” 进行配置。 解决方案 设置 - 编辑器设置 - 更多编辑器设置... 搜索:maxtoken,原来是 20000,我改成了 200000 即可~

NVIDIA Jetson AI边缘计算盒子

这里写自定义目录标题 烧录系统安装Jetpack安装cuda安装Pytorch安装onnxruntime安装qv4l2 烧录系统 选择一台Linux系统,或者VMware的电脑作为主机,烧录系统和后面安装Jetpack都会用到。 根据供应商的指令烧录的,暂时还没验证官方烧录&#x…

持续总结中!2024年面试必问 20 道设计模式面试题(四)

上一篇地址:持续总结中!2024年面试必问 20 道设计模式面试题(三)-CSDN博客 七、观察者模式(Observer Pattern)是如何工作的? 观察者模式(Observer Pattern)&#xff0c…

数据库-查询语句习题

SELECT Sname 姓 名,year of birth: 出生年,YEAR(GETDATE())-Sage BIRTHYEAR,LOWER(SNAME) SNAME --起别名 没有特殊字符不需要引号,有特殊字符要加引号;别名(解释作用显示给用户看)用空格或as连接 FROM STUDENT; --消除重复行 DI…

unity简单数字拼图小游戏(源码)

代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement;public class DragImage : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {pub…

代码规范性思考

表命名和设计 业务模块前缀;下划线分隔,体现业务含义;数据库字符集、字段名、类型、长度、默认值;一对一、一对多、多对多建表;注释清晰;良好的索引; 接口文档 swagger增强工具swagger-boots…

2. Revit API UI 之 IExternalCommand 和 IExternalApplication

2. Revit API UI 之 IExternalCommand 和 IExternalApplication 上一篇我们大致看了下 RevitAPI 的一级命名空间划分,再简单讲了一下Attributes命名空间下的3个类,并从一个代码样例,提到了Attributes和IExternalCommand ,前者是指…