🚀 CodeGen2.5-7B-multi
CodeGen2.5-7B-multiは、プログラム合成に特化した自己回帰型言語モデルです。CodeGen2をベースに構築され、StarCoderDataで学習されており、サイズが半分以下でStarCoderBase-15.5Bと匹敵する結果を達成しています。
🚀 クイックスタート
このモデルは、AutoModelForCausalLM
機能を使用して簡単にロードできます。
前提条件
トークナイザーにOpenAIのtiktoken
をインストールしてください。
pip install tiktoken==0.4.0
因果サンプリング(コード自動補完)
通常の因果サンプリングでは、コンテキストを指定して補完を生成します。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi")
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>
: インフィルの終わりにモデルが出力する「マスクの終わり」トークン。このトークンを使用して出力を切り捨てることができます。
例えば、関数の以下のカーソル位置にインフィルを生成したい場合:
def hello_world():
|
return name
以下の手順でモデルへの入力を構築します。
- カーソル位置に
<mask_1>
トークンを挿入する
- 境界を示すために
<sep>
トークンを追加する
- インフィルしたいマスクを示すために別の
<mask_1>
を挿入する
最終的なコードスニペットは以下のようになります。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi")
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をベースに構築され、StarCoderDataで学習された自己回帰型言語モデル
- サイズが半分以下でStarCoderBase-15.5Bと匹敵する結果を達成
- インフィル機能を備え、複数のプログラミング言語をサポート
📦 インストール
トークナイザーにOpenAIのtiktoken
をインストールしてください。
pip install tiktoken==0.4.0
💻 使用例
基本的な使用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi")
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))
高度な使用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi")
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):])
📚 ドキュメント
評価結果
モデルをHumanEvalとHumanEval-Infillで評価しています。詳細はブログを参照してください。
想定される使用方法と制限
自己回帰型言語モデルとして、CodeGen2.5は与えられた自然言語とプログラミング言語のテキストから特徴を抽出し、それらの尤度を計算することができます。ただし、このモデルはプログラム合成を目的としており、英語のプロンプトを与えて実行可能なコードを生成することに最適です。プロンプトはコメント文字列の形式である必要があります。また、部分的に生成されたコードを完成させることもできます。
帰属とその他の要件
モデルの事前学習データセットは、許容的なライセンスのみでフィルタリングされています。ただし、モデルはデータセットからソースコードをそのまま生成する可能性があります。コードのライセンスには帰属やその他の特定の要件が必要な場合があり、それらを尊重する必要があります。データプロバイダーのBigCodeは、事前学習データを検索して生成されたコードの出所を特定し、適切な帰属をコードに適用するための検索インデックスを提供しています。
倫理的な考慮事項
このリリースは学術論文のサポートのための研究目的のみです。当社のモデル、データセット、コードは、すべての下流の目的に特に設計または評価されていません。ユーザーは、このモデルをデプロイする前に、精度、安全性、公正性に関する潜在的な懸念事項を評価し、対処することを強くお勧めします。ユーザーは、AIの一般的な制限を考慮し、適用される法律を遵守し、特にエラーや誤用が人々の生活、権利、または安全に重大な影響を与える可能性のある高リスクシナリオのユースケースを選択する際には、ベストプラクティスを活用することをお勧めします。ユースケースに関するさらなるガイダンスについては、当社のAUPおよびAI AUPを参照してください。
🔧 技術詳細
CodeGen2.5は、プログラム合成用の自己回帰型言語モデルのファミリーです。CodeGen2をベースに構築され、StarCoderDataで1.4Tトークン分学習されており、サイズが半分以下でStarCoderBase-15.5Bと匹敵する結果を達成しています。CodeGen2と同様に、このモデルはインフィル機能を備え、複数のプログラミング言語をサポートしています。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で公開されています。
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}
}