CodeGemma 模型卡片

模型页面CodeGemma

资源和技术文档

使用条款条款

作者:Google

模型信息

模型摘要

说明

CodeGemma 是基于 Gemma 构建的轻量级开放代码模型系列。CodeGemma 模型是仅包含文本到文本和文本到代码解码器的模型,目前提供 70 亿个预训练变体(专用于代码补全和代码生成任务)、70 亿个参数指令调优变体(用于代码聊天和指令跟踪),以及 20 亿个参数预训练变体(用于快速完成代码)。

输入和输出

  • 输入:对于预训练模型变体:代码补全和生成场景或自然语言文本/提示的代码前缀和(可选)后缀。对于指令调优的模型变体:自然语言文本或提示。

  • 输出:对于预训练模型变体:填充中间代码补全、代码和自然语言。对于指令调优的模型变体:代码和自然语言。

引用

@article{codegemma_2024,
    title={CodeGemma: Open Code Models Based on Gemma},
    url={https://goo.gle/codegemma},
    author={ {CodeGemma Team} and Hartman, Ale Jakse and Hu, Andrea and Choquette-Choo, Christopher A. and Zhao, Heri and Fine, Jane and Hui,
    Jeffrey and Shen, Jingyue and Kelley, Joe and Howland, Joshua and Bansal, Kshitij and Vilnis, Luke and Wirth, Mateo and Nguyen, Nam, and Michel, Paul and Choy, Peter and Joshi, Pratik and Kumar, Ravin and Hashmi, Sarmad and Agrawal, Shubham and Zuo, Siqi and Warkentin, Tris and Gong, Zhitao et al.},
    year={2024}
}

模型数据

训练数据集

使用 Gemma 作为基本模型,CodeGemma 2B 和 7B 预训练变体基于开源数学数据集和合成代码的 500 到 1, 000 亿个令牌(主要是英语)进行进一步训练。

训练数据处理

我们使用以下数据预处理技术来训练 CodeGemma:

  • FIM - 预训练的 CodeGemma 模型专注于填充中间 (FIM) 任务。这些模型经过训练,可以同时与 PSM 和 SPM 模式配合使用。我们的 FIM 设置为 80% 到 90% 的 FIM 比率和 50-50 PSM/SPM。
  • 基于依赖关系图的打包技术和基于单元测试的词法打包技术:为了提高模型与实际应用的一致性,我们在项目/代码库级别构建了训练示例,以便在每个代码库中共置最相关的源文件。具体来说,我们采用了两种启发式方法:基于依赖关系图的打包和基于单元测试的词法打包。
  • 我们开发了一种新技术,用于将文档拆分为前缀、中间和后缀,使后缀从语法上更自然的点开始,而不是从纯随机分布开始。
  • 安全:与 Gemma 类似,我们根据我们的政策部署了严格的安全过滤机制,包括过滤个人数据、儿童性虐待内容 (CSAM) 过滤以及基于内容质量和安全的其他过滤方法。

实现信息

训练期间使用的硬件和框架

与 Gemma 一样,CodeGemma 使用 JAX机器学习路径在最新一代的张量处理单元 (TPU) 硬件 (TPUv5e) 上进行了训练。

评估信息

基准测试结果

评估方法

编码基准结果

基准 2B 2B (1.1) 70 亿 7B-IT 7B-IT (1.1)
HumanEval 31.1 岁 37.8 岁 土耳其里拉 56.1 岁 土耳其里拉
MBPP 土耳其里拉 49.2 岁 56.2 岁 54.2 55.6 岁
HumanEval 单行 78.4 79.3 土耳其里拉 68.3 岁 土耳其里拉
HumanEval 多线 51.4 岁 土耳其里拉 土耳其里拉 20.1 23.7 岁
BC HE C++ 24.2 岁 土耳其里拉 土耳其里拉 土耳其里拉 土耳其里拉
BC HE C# 10.6 26.1 岁 22.4 岁 26.7 岁 54.7
BC HE Go 土耳其里拉 18.0 21.7 岁 28.6 34.2 岁
BC HE Java 29.2 29.8 岁 土耳其里拉 土耳其里拉 土耳其里拉
BC HE JavaScript 21.7 岁 28.0 39.8 岁 土耳其里拉 土耳其里拉
BC HE Kotlin 28.0 32.3 岁 39.8 岁 土耳其里拉 土耳其里拉
BC HE Python 21.7 岁 36.6 岁 土耳其里拉 土耳其里拉 土耳其里拉
BC HE Rust 26.7 岁 24.2 岁 34.1 土耳其里拉 37.3 岁
BC MBPP C++ 土耳其里拉 38.9 岁 土耳其里拉 土耳其里拉 土耳其里拉
BC MBPP C# 28.7 岁 土耳其里拉 32.5 岁 21.2 62.0
BC MBPP Go 土耳其里拉 38.9 岁 43.3 岁 土耳其里拉 53.2 岁
BC MBPP Java 土耳其里拉 土耳其里拉 土耳其里拉 57.3 岁 土耳其里拉
BC MBPP JavaScript 土耳其里拉 土耳其里拉 58.2 61.4 岁 61.4 岁
BC MBPP Kotlin 土耳其里拉 土耳其里拉 54.7 土耳其里拉 土耳其里拉
BC MBPP Python 38.6 岁 土耳其里拉 59.1 岁 62.0 60.2
BC MBPP Rust 土耳其里拉 土耳其里拉 土耳其里拉 土耳其里拉 52.3 岁

自然语言基准测试(基于 70 亿个模型)

基于各种语言功能指标比较 Gemma、CodeGemma PT 和 CodeGemma IT 的条形图。这三种模型大致相当,其中 CodeGemma 保留了较强的自然语言理解能力。

道德与安全

道德与安全评估

评估方法

我们的评估方法包括结构化评估和针对相关内容政策的内部红队测试。许多不同的团队实施了红队判研,每个团队都有不同的目标和人工评估指标。这些模型针对与道德和安全相关的一些不同类别进行了评估,包括:

  • 对涉及内容安全和代表性危害的提示进行人工评估。如需详细了解评估方法,请参阅 Gemma 模型卡片

  • 对网络攻击功能的具体测试,侧重于测试自主黑客功能并确保限制潜在危害。

评估结果

道德和安全评估的结果在符合内部政策(例如儿童安全、内容安全、表征伤害、记忆、大规模伤害等类别)的可接受阈值以内。如需了解详情,请参阅 Gemma 模型卡片

模型用量和限制

已知限制

大语言模型 (LLM) 存在局限性,具体取决于其训练数据和该技术的固有局限性。如需详细了解 LLM 的局限性,请参阅 Gemma 模型卡片

道德考虑和风险

大型语言模型 (LLM) 的发展引发了一些道德问题。在开发这些模型时,我们仔细考虑了多个方面。

如需了解模型详情,请参阅 Gemma 模型卡片中同一讨论

预期用途

应用

Code Gemma 模型的应用范围广泛,因 IT 模型和 PT 模型而异。下面列出的潜在用途并不详尽。此列表旨在提供模型创建者在模型训练和开发过程中考虑的可能用例的上下文信息。

  • 代码补全:PT 模型可用于通过 IDE 扩展程序完成代码
  • 代码生成:IT 模型可用于生成使用或不使用 IDE 扩展程序的代码
  • 代码对话:IT 模型可以为讨论代码的对话界面提供支持,
  • 代码教育:IT 模型支持交互式代码学习体验,有助于纠正语法或提供编码练习

优势

在发布时,此系列模型提供了以开放代码为中心的高性能大语言模型实现,与规模相似的模型相比,该实现完全针对 Responsible AI 开发而设计。

事实证明,使用本文档中所述的编码基准评估指标,这些模型的性能优于其他规模相当的开放模型替代方案。