こんにちは!今回は、Googleが開発したコード生成AI「CodeGemma」の使い方について、初心者の方でも完璧に理解できるよう、丁寧に解説していきます。コード補完やコード生成に特化したCodeGemmaを活用して、開発者の生産性を向上させましょう!
CodeGemmaとは?
CodeGemmaは、Googleが開発したコード生成に特化した大規模言語モデル(LLM)です。コード補完やコード生成のタスクに優れたパフォーマンスを発揮します。
コード補完の使い方
CodeGemmaのコード補完機能は、コードエディタ内で使用できます。以下のトークンを使って、補完したい部分を指定します。
<|fim_prefix|>
: 補完前のコンテキストを指定<|fim_suffix|>
: 補完後のコンテキストを指定(カーソルの位置に相当)<|fim_middle|>
: モデルに補完を指示するプロンプト-
<|file_separator|>
: 複数ファイルのコンテキストを提供する際に使用以下は、Pythonでの使用例です。
from transformers import GemmaTokenizer, AutoModelForCausalLM # モデルとトークナイザーの読み込み model_id = "google/codegemma-7b" 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:]))
生成された出力から、不要な部分を取り除くために、以下のようにターミネータを指定することをおすすめします。
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, )
コード生成の使い方
CodeGemmaを使ってコードを生成するには、以下のようにします。
from transformers import GemmaTokenizer, AutoModelForCausalLM
# モデルとトークナイザーの読み込み
tokenizer = GemmaTokenizer.from_pretrained("google/codegemma-7b")
model = AutoModelForCausalLM.from_pretrained("google/codegemma-7b")
# 入力テキストの作成
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]))
入力と出力
- 入力:
- 事前学習済みモデル:コード補完や生成シナリオのためのコードの接頭辞や接尾辞、自然言語のテキストやプロンプト
- 命令学習済みモデル:自然言語のテキストやプロンプト
- 出力:
- 事前学習済みモデル:fill-in-the-middleコード補完、コード、自然言語
- 命令学習済みモデル:コード、自然言語
以上が、CodeGemmaの使い方についての解説です。初心者の方も、この記事を参考に、CodeGemmaを活用してコード補完やコード生成を行ってみてください。CodeGemmaを使いこなして、開発効率を上げていきましょう!
ノートブック
Google Colab
参考サイト
google/codegemma-7b · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.
《JP》AIMO CodeGemma baseline
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources
コメント