🚀 CodeGemma
CodeGemmaは、Gemmaをベースに構築された軽量なオープンコードモデルのコレクションです。コードの補完や生成、チャットなど、様々なコード関連タスクに対応しています。
🚀 クイックスタート
Hugging FaceでCodeGemmaにアクセスするには、Googleの利用許諾書を確認して同意する必要があります。これを行うには、Hugging Faceにログインして以下をクリックしてください。リクエストは即座に処理されます。
承認する
✨ 主な機能
- コード補完:PTモデルはIDE拡張機能を使ってコードを補完できます。
- コード生成:ITモデルはIDE拡張機能の有無に関わらずコードを生成できます。
- コード会話:ITモデルはコードに関する会話インターフェースを提供できます。
- コード教育:ITモデルはインタラクティブなコード学習体験をサポートし、構文修正やコーディング練習を支援します。
📚 ドキュメント
モデルページ
リソースと技術ドキュメント
利用規約
著者
重要な注意事項
⚠️ 重要提示
llama.cppや、OllamaやLM Studioなどの関連ツールでは、特に repeat-penalty
などのフラグを正しく設定してください。Georgi Gerganov (llama.cppの作者) は、https://huggingface.co/google/gemma-7b-it/discussions/38#65d7b14adb51f7c160769fa1 で彼の経験を共有しています。
💻 使用例
基本的な使用法
$ cat non_prime
/// Write a rust function to identify non-prime numbers.
///
/// Examples:
/// >>> is_not_prime(2)
/// False
/// >>> is_not_prime(10)
/// True
pub fn is_not_prime(n: i32) -> bool {
$ main -m codegemma-7b-it.gguf --temp 0 --top-k 0 -f non_prime --log-disable --repeat-penalty 1.0
/// Write a rust function to identify non-prime numbers.
///
/// Examples:
/// >>> is_not_prime(2)
/// False
/// >>> is_not_prime(10)
/// True
pub fn is_not_prime(n: i32) -> bool {
if n <= 1 {
return true;
}
for i in 2..=(n as f64).sqrt() as i32 {
if n % i == 0 {
return true;
}
}
false
}
🔧 技術詳細
モデル情報
説明
CodeGemmaは、Gemmaをベースに構築された軽量なオープンコードモデルのコレクションです。CodeGemmaモデルは、テキストからテキスト、テキストからコードのデコーダー専用モデルであり、コード補完とコード生成タスクに特化した70億の事前学習バリアント、コードチャットと命令追従のための70億パラメータの命令調整バリアント、および高速コード補完のための20億パラメータの事前学習バリアントとして利用可能です。
入力と出力
入力
- 事前学習モデルバリアントの場合:コード補完と生成シナリオのためのコード接頭辞および/または接尾辞、または自然言語テキストまたはプロンプト
- 命令調整モデルバリアントの場合:自然言語テキストまたはプロンプト
出力
- 事前学習モデルバリアントの場合:中間埋め込みコード補完、コードおよび自然言語
- 命令調整モデルバリアントの場合:コードおよび自然言語
モデルデータ
学習データセット
Gemmaをベースモデルとして、CodeGemma 2Bおよび7Bの事前学習バリアントは、公開されているコードリポジトリ、オープンソースの数学データセット、および合成生成されたコードから主に英語のデータである追加の5000億トークンでさらに学習されます。
学習データ処理
以下のデータ前処理技術が適用されました。
- FIM事前学習CodeGemmaモデル:中間埋め込み (FIM) タスクに焦点を当てています。モデルはPSMとSPMモードの両方で動作するように学習されています。私たちのFIM設定は、80%のFIM率で50-50のPSM/SPMです。
- 依存関係グラフベースのパッキングと単体テストベースの字句パッキング技術:実世界のアプリケーションとのモデルのアライメントを改善するために、各リポジトリ内で最も関連性の高いソースファイルを配置するように、プロジェクト/リポジトリレベルで学習例を構造化しました。具体的には、依存関係グラフベースのパッキングと単体テストベースの字句パッキングという2つのヒューリスティック技術を採用しました。
- ドキュメント分割技術:接尾辞が純粋なランダム分布ではなく、より構文的に自然なポイントから始まるように、ドキュメントを接頭辞、中間、接尾辞に分割する新しい技術を開発しました。
- 安全性:Gemmaと同様に、当社のポリシーに沿って、個人データのフィルタリング、CSAMフィルタリング、およびコンテンツ品質と安全性に基づくその他のフィルタリングを含む厳格な安全性フィルタリングを実施しました。
実装情報
ハードウェア
CodeGemmaは、最新世代のTensor Processing Unit (TPU)ハードウェア (TPUv5e) を使用して学習されました。
ソフトウェア
学習は、JAXとML Pathwaysを使用して行われました。
評価情報
評価アプローチ
CodeGemmaは、いくつかのドメインにまたがるさまざまな学術的ベンチマークで評価されます。
- コード補完ベンチマーク:HumanEval Single LineおよびMultiple Line Infilling
- コード生成ベンチマーク:HumanEval、MBPP、BabelCode (C++, C#, Go, Java, JavaScript, Kotlin, Python, Rust)
- 質問応答:BoolQ、PIQA、TriviaQA
- 自然言語:ARC-Challenge、HellaSwag、MMLU、WinoGrande
- 数学的推論:GSM8K、MATH
評価結果
コーディングベンチマーク
ベンチマーク |
2B |
7B |
7B-IT |
HumanEval |
31.1 |
44.5 |
56.1 |
MBPP |
43.6 |
56.2 |
54.2 |
HumanEval Single Line |
78.41 |
76.09 |
68.25 |
HumanEval Multi Line |
51.44 |
58.44 |
20.05 |
BC HE C++ |
24.2 |
32.9 |
42.2 |
BC HE C# |
10.6 |
22.4 |
26.7 |
BC HE Go |
20.5 |
21.7 |
28.6 |
BC HE Java |
29.2 |
41.0 |
48.4 |
BC HE JavaScript |
21.7 |
39.8 |
46.0 |
BC HE Kotlin |
28.0 |
39.8 |
51.6 |
BC HE Python |
21.7 |
42.2 |
48.4 |
BC HE Rust |
26.7 |
34.1 |
36.0 |
BC MBPP C++ |
47.1 |
53.8 |
56.7 |
BC MBPP C# |
28.7 |
32.5 |
41.2 |
BC MBPP Go |
45.6 |
43.3 |
46.2 |
BC MBPP Java |
41.8 |
50.3 |
57.3 |
BC MBPP JavaScript |
45.3 |
58.2 |
61.4 |
BC MBPP Kotlin |
46.8 |
54.7 |
59.9 |
BC MBPP Python |
38.6 |
59.1 |
62.0 |
BC MBPP Rust |
45.3 |
52.9 |
53.5 |
自然言語ベンチマーク

倫理と安全性
評価アプローチ
私たちの評価方法には、構造化された評価と関連するコンテンツポリシーの内部レッドチーミングテストが含まれます。レッドチーミングは、それぞれ異なる目標と人間による評価指標を持ついくつかの異なるチームによって実施されました。これらのモデルは、倫理と安全性に関連するいくつかの異なるカテゴリに対して評価されました。
- コンテンツの安全性と表現上の害をカバーするプロンプトに対する人間による評価:評価アプローチの詳細については、Gemmaモデルカードを参照してください。
- サイバー攻撃能力の特定のテスト:自律的なハッキング能力のテストに焦点を当て、潜在的な害を制限することを確保します。
評価結果
倫理と安全性の評価結果は、子どもの安全、コンテンツの安全、表現上の害、記憶、大規模な害などのカテゴリに関する内部ポリシーを満たすための許容範囲内にあります。詳細については、Gemmaモデルカードを参照してください。
モデルの使用と制限
意図された使用法
Code Gemmaモデルには幅広い用途があり、ITモデルとPTモデルで異なります。以下の潜在的な使用例のリストは網羅的ではありません。このリストの目的は、モデルの作成者がモデルの学習と開発の一環として考慮した可能なユースケースに関するコンテキスト情報を提供することです。
- コード補完:PTモデルはIDE拡張機能を使ってコードを補完できます。
- コード生成:ITモデルはIDE拡張機能の有無に関わらずコードを生成できます。
- コード会話:ITモデルはコードに関する会話インターフェースを提供できます。
- コード教育:ITモデルはインタラクティブなコード学習体験をサポートし、構文修正やコーディング練習を支援します。
既知の制限
大規模言語モデル (LLM) は、その学習データと技術の固有の制限に基づく制限があります。LLMの制限の詳細については、Gemmaモデルカードを参照してください。
倫理的考慮事項とリスク
大規模言語モデル (LLM) の開発にはいくつかの倫理的な懸念が生じます。私たちは、これらのモデルの開発において複数の側面を慎重に考慮しました。モデルの詳細については、同じ議論をGemmaモデルカードで参照してください。
メリット
リリース時点で、このモデルファミリーは、同じサイズのモデルと比較して、責任あるAI開発のために最初から設計された高性能なオープンコードに焦点を当てた大規模言語モデルの実装を提供します。
このドキュメントで説明されているコーディングベンチマーク評価指標を使用すると、これらのモデルは他の同様のサイズのオープンモデルの代替品よりも優れたパフォーマンスを示すことがわかりました。
📄 ライセンス