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 的预训练变体 额外训练了 5000 到 1,000 亿个主要英语词元, 来自开源数学数据集和合成的 代码。

训练数据处理

训练 CodeGemma 时应用了以下数据预处理技术:

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

实现信息

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

例如 Gemma, CodeGemma 接受过训练,是 张量处理单元 (TPU) 硬件 (TPUv5e)、 使用 JAX机器学习 开发者在线课程

评估信息

基准测试结果

评估方法

编码基准测试结果

基准 2B 20 亿 (1.1) 70 亿 70 亿 IT 70 亿 IT (1.1)
HumanEval 31.1 37.8 44.5 56.1 60.4
MBPP 43.6 49.2 56.2 54.2 55.6
HumanEval 单行 78.4 79.3 76.1 68.3 77.4
HumanEval 多行 51.4 51.0 58.4 20.1 23.7
BC HE C++ 24.2 19.9 32.9 42.2 46.6
BC HE C# 编号 10.6 26.1 22.4 26.7 54.7
BC HE Go 20.5 18.0 21.7 28.6 34.2 岁
BC HE Java 29.2 29.8 41.0 48.4 50.3
BC HE JavaScript 21.7 28.0 39.8 46.0 48.4
BC HE Kotlin 28.0 32.3 39.8 51.6 47.8
BC HE Python 21.7 36.6 42.2 48.4 54.0
BC HE Rust 26.7 24.2 34.1 36.0 37.3
BC MBPP C++ 47.1 38.9 岁 53.8 56.7 63.5
BC MBPP C# 28.7 45.3 32.5 岁 41.2 62.0
BC MBPP Go 45.6 38.9 岁 43.3 46.2 53.2
BC MBPP Java 41.8 49.7 50.3 57.3 62.9
BC MBPP JavaScript 45.3 45.0 58.2 61.4 61.4
BC MBPP Kotlin 46.8 49.7 54.7 59.9 62.6
BC MBPP Python 38.6 52.9 59.1 62.0 60.2
BC MBPP Rust 45.3 47.4 52.9 53.5 52.3

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

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

道德与安全

道德与安全评估

评估方法

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

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

  • 网络犯罪功能的具体测试,重点测试自主 黑客攻击的能力,并确保潜在危害有限。

评估结果

道德和安全评估的结果在可接受的阈值范围内 针对会议 内部政策 例如儿童安全、内容安全、代表性伤害、 大规模的伤害。请参阅 Gemma 模型卡片 了解详情。

模型用法和限制

已知限制

大语言模型 (LLM) 因其训练数据和 技术的固有局限性。请参阅 Gemma 模型卡片 详细了解 LLM 的局限性。

道德考量和风险

大型语言模型 (LLM) 的发展引起了一些道德方面的担忧。 我们在开发这些技术时从多个方面仔细考虑了 模型。

请参阅同一个讨论 了解模型详细信息。

预期用途

应用

Code Gemma 模型的应用范围很广,IT 和团队之间 PT 模型。以下列表并不详尽。通过 此列表旨在提供可能的背景信息, 模型创建者在模型训练过程中考虑的使用场景, 开发。

  • 代码补全:借助 IDE 扩展程序,可使用 PT 模型补全代码
  • 代码生成:IT 模型可用于生成代码,有无 IDE 扩展程序
  • 代码对话:IT 模型可以为讨论 代码
  • 代码培训:IT 模型支持交互式代码学习体验, 进行语法更正或进行编码练习

优势

在发布时,这一系列模型提供高性能的开放式 从头开始设计的以代码为中心的大语言模型实现 Responsible AI 开发效率。

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