🚀 CodeGen2.5-7B-instruct
CodeGen2.5: Small, but mightyは、プログラム合成のための自動回帰型言語モデルです。CodeGen2をベースに、StarCoderDataで学習し、少ないパラメータで高い性能を達成します。
🚀 クイックスタート
このモデルはAutoModelForCausalLM
機能を使って簡単に読み込むことができます。
前提条件
トークナイザーにOpenAIのtiktoken
をインストールしてください。
pip install tiktoken==0.4.0
因果サンプリング(コード自動補完)
通常の因果サンプリングでは、与えられたコンテキストに基づいて補完を生成します。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-instruct", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-instruct")
text = "def hello_world():"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
インフィルサンプリング
インフィルサンプリングでは、CodeGen2の形式に従います。
<mask_N>
: マスクするN番目のスパン。実際には、インフィルをサンプリングしたい場所に<mask_1>
を使用します。
<sep>
: サフィックスとインフィルされたサンプルの間の区切りトークン。
<eom>
: インフィルの終わりにモデルが出力する「End-Of-Mask」トークン。このトークンを使って出力を切り捨てることができます。
例えば、関数の以下のカーソル位置にインフィルを生成する場合:
def hello_world():
|
return name
以下の手順でモデルへの入力を構築します。
- カーソル位置に
<mask_1>
トークンを挿入する。
- 境界を示すために
<sep>
トークンを追加する。
- インフィルするマスクを示すために別の
<mask_1>
を挿入する。
最終的なコードスニペットは以下のようになります。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-instruct", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-instruct")
def format(prefix, suffix):
return prefix + "<mask_1>" + suffix + "<|endoftext|>" + "<sep>" + "<mask_1>"
prefix = "def hello_world():\n "
suffix = " return name"
text = format(prefix, suffix)
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=False)[len(text):])
モデルの出力を<eom>
で切り捨てることができます。
✨ 主な機能
- CodeGen2.5は、プログラム合成のための自動回帰型言語モデルのファミリーです。
- CodeGen2をベースに、StarCoderDataで1.4Tトークン学習し、StarCoderBase-15.5Bと比較して半分以下のサイズで競争力のある結果を達成します。
- CodeGen2と同様に、インフィルが可能で、複数のプログラミング言語をサポートします。
- 以下のモデルが公開されています。
- CodeGen2.5-7B-multi: StarCoderDataで学習。Apache-2.0ライセンス。
- CodeGen2.5-7B-mono: 追加のPythonトークンでさらに学習。Apache-2.0ライセンス。
- CodeGen2.5-7B-instruct (このリポジトリ): CodeGen2.5-7B-monoから命令データでさらに学習。研究目的のみ。
📚 ドキュメント
評価結果
モデルはHumanEvalとHumanEval-Infillで評価されています。詳細はブログを参照してください。
想定される使用方法と制限
自動回帰型言語モデルとして、CodeGen2.5は与えられた自然言語とプログラミング言語のテキストから特徴を抽出し、それらの尤度を計算することができます。ただし、このモデルはプログラム合成を目的としており、英語のプロンプトから実行可能なコードを生成するのに最適です。プロンプトはコメント文字列の形式である必要があります。また、部分的に生成されたコードを完成させることもできます。
帰属とその他の要件
モデルの事前学習データセットは許容的なライセンスのみでフィルタリングされています。しかし、モデルはデータセットからそのままのソースコードを生成する可能性があります。コードのライセンスには帰属やその他の特定の要件が必要な場合があり、それらを尊重する必要があります。データプロバイダーのBigCodeは、検索インデックスを提供しており、事前学習データを検索して生成されたコードの出所を特定し、適切な帰属をコードに適用することができます。
倫理的な考慮事項
このリリースは学術論文をサポートするための研究目的のみです。当社のモデル、データセット、コードはすべての下流の目的に特に設計または評価されていません。ユーザーはこのモデルをデプロイする前に、精度、安全性、公平性に関する潜在的な懸念を評価し、対処することを強く推奨します。ユーザーはAIの一般的な制限を考慮し、適用可能な法律に準拠し、ベストプラクティスを活用して、特にエラーや誤用が人々の生活、権利、または安全に重大な影響を与える可能性のある高リスクシナリオのユースケースを選択することをお勧めします。ユースケースに関する詳細なガイダンスについては、当社のAUPとAI AUPを参照してください。
BibTeXエントリと引用情報
CodeGen2の論文を引用してください。
@article{Nijkamp2023codegen2,
title={CodeGen2: Lessons for Training LLMs on Programming and Natural Languages},
author={Nijkamp, Erik and Hayashi, Hiroaki and Xiong, Caiming and Savarese, Silvio and Zhou, Yingbo},
journal={arXiv preprint},
year={2023}
}
📄 ライセンス
Other