🚀 CodeGemma
CodeGemmaは、Gemmaをベースに構築された軽量なオープンコードモデルのコレクションです。コードの補完や生成、チャットなど、様々なコード関連タスクに対応しています。
🔗 関連リンク
⚠️ 重要提示
llama.cppや、Ollama、LM Studioなどの関連ツールでは、特に repeat-penalty
を正しく設定してください。Georgi Gerganov(llama.cppの著者)は、https://huggingface.co/google/gemma-7b-it/discussions/38#65d7b14adb51f7c160769fa1 で彼の経験を共有しています。
✨ 主な機能
CodeGemmaは、3種類のバリアントがあり、それぞれ異なるコード関連タスクに特化しています。
📦 インストール
READMEに具体的なインストール手順が記載されていないため、このセクションをスキップします。
💻 使用例
基本的な使用法
$ 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-2b.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 {
for i in 2..n {
if n % i == 0 {
return true;
}
}
false
}
<|file_separator|>
📚 ドキュメント
入力と出力
- 入力:
- 事前学習モデルバリアントの場合:コードの補完や生成シナリオではコードのプレフィックスやサフィックス、または自然言語のテキストやプロンプト
- 命令調整モデルバリアントの場合:自然言語のテキストやプロンプト
- 出力:
- 事前学習モデルバリアントの場合:中間埋め込み型のコード補完、コードおよび自然言語
- 命令調整モデルバリアントの場合:コードおよび自然言語
モデルデータ
学習データセット
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)
- Q&A: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開発のために最初から設計された高性能なオープンコードに焦点を当てた大規模言語モデルの実装を提供します。
このドキュメントで説明されているコーディングベンチマーク評価指標を使用すると、これらのモデルは他の同サイズのオープンモデルの代替品よりも優れたパフォーマンスを示しています。
📄 ライセンス
このライブラリはgemmaライセンスの下で提供されています。詳細はこちらをご覧ください。