CodeGemmaの使い方

LLM

こんにちは!今回は、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

コメント

タイトルとURLをコピーしました