🚀 CodeGemma
CodeGemmaは、Gemmaをベースに構築された軽量なオープンコードモデルのコレクションです。コードの完成や生成、チャットなど、様々なコード関連タスクに対応しています。
🚀 クイックスタート
モデルページ
リソースと技術ドキュメント
利用規約
作者
✨ 主な機能
モデル情報
説明
CodeGemmaは、Gemmaをベースに構築された軽量なオープンコードモデルのコレクションです。CodeGemmaモデルは、テキスト-to-テキストおよびテキスト-to-コードのデコーダー専用モデルで、コードの完成と生成タスクに特化した70億パラメータの事前学習バリアント、コードチャットと命令追従用の70億パラメータの命令微調整バリアント、および高速コード完成用の20億パラメータの事前学習バリアントがあります。
入力と出力
入力
- 事前学習モデルバリアント: コードの完成と生成シナリオのためのコードのプレフィックスおよび/またはサフィックス、または自然言語のテキストまたはプロンプト
- 命令微調整モデルバリアント: 自然言語のテキストまたはプロンプト
出力
- 事前学習モデルバリアント: フィルインザミドルのコード完成、コードおよび自然言語
- 命令微調整モデルバリアント: コードおよび自然言語
📦 インストール
このセクションでは、Hugging FaceでCodeGemmaにアクセスする方法を説明します。
Hugging Faceでのアクセス
CodeGemmaにアクセスするには、Googleの利用ライセンスを確認して同意する必要があります。これを行うには、Hugging Faceにログインして以下のボタンをクリックしてください。リクエストは即座に処理されます。
[同意する](Acknowledge license)
💻 使用例
基本的な使用法
コードの完成
from transformers import GemmaTokenizer, AutoModelForCausalLM
model_id = "google/codegemma-1.1-2b"
tokenizer = GemmaTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
prompt = '''\
<|fim_prefix|>import datetime
def calculate_age(birth_year):
"""Calculates a person's age based on their birth year."""
current_year = datetime.date.today().year
<|fim_suffix|>
return age<|fim_middle|>\
'''
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0][prompt_len:]))
コードの生成
from transformers import GemmaTokenizer, AutoModelForCausalLM
tokenizer = GemmaTokenizer.from_pretrained("google/codegemma-1.1-2b")
model = AutoModelForCausalLM.from_pretrained("google/codegemma-1.1-2b")
input_text = "Write me a Python function to calculate the nth fibonacci number."
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
高度な使用法
コードの完成(終了トークン指定)
FIM_PREFIX = '<|fim_prefix|>'
FIM_SUFFIX = '<|fim_suffix|>'
FIM_MIDDLE = '<|fim_middle|>'
FIM_FILE_SEPARATOR = '<|file_separator|>'
terminators = tokenizer.convert_tokens_to_ids([FIM_PREFIX, FIM_MIDDLE, FIM_SUFFIX, FIM_FILE_SEPARATOR])
terminators += [tokenizer.eos_token_id]
outputs = model.generate(
**inputs,
max_new_tokens=100,
eos_token_id=terminators,
)
📚 ドキュメント
モデルデータ
学習データセット
Gemmaをベースモデルとして、CodeGemma 2Bおよび7Bの事前学習バリアントは、公開されているコードリポジトリ、オープンソースの数学データセット、および合成生成コードから主に英語のデータを追加で5000億から1兆トークンでさらに学習されました。
学習データの処理
以下のデータ前処理技術が適用されました。
- FIM事前学習CodeGemmaモデルは、フィルインザミドル(FIM)タスクに焦点を当てています。モデルは、PSMとSPMモードの両方で動作するように学習されています。私たちのFIM設定は、50-50のPSM/SPMで80%から90%のFIM率です。
- 依存関係グラフベースのパッキングと単体テストベースのレキシカルパッキング技術: 実世界のアプリケーションとのモデルのアライメントを改善するために、私たちはプロジェクト/リポジトリレベルで学習例を構造化して、各リポジトリ内で最も関連性の高いソースファイルを同じ場所に配置しました。具体的には、依存関係グラフベースのパッキングと単体テストベースのレキシカルパッキングの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 |
2B (1.1) |
7B |
7B-IT |
7B-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 Single Line |
78.4 |
79.3 |
76.1 |
68.3 |
77.4 |
HumanEval Multi Line |
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 |
自然言語ベンチマーク

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