🚀 CodeGen (CodeGen-Multi 2B)
CodeGenは、論文「A Conversational Paradigm for Program Synthesis」に基づく、プログラム合成用の自己回帰型言語モデルのファミリーです。論文の著者は、Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese、Caiming Xiongです。これらのモデルは、このリポジトリで公開されており、3種類の事前学習データバリアント (NL
、Multi
、Mono
) と4種類のモデルサイズバリアント (350M
、2B
、6B
、16B
) があります。
このリポジトリに含まれるチェックポイントは、論文ではCodeGen-Multi 2Bと表記されています。「Multi」は、モデルが CodeGen-NL 2B で初期化され、複数のプログラミング言語のデータセットでさらに事前学習されたことを意味し、「2B」は学習可能なパラメータの数を指します。
🚀 クイックスタート
このモデルは、AutoModelForCausalLM
機能を使用して簡単にロードできます。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-2B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-2B-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))
✨ 主な機能
- 自然言語とプログラミング言語のテキストから特徴を抽出し、それらの尤度を計算することができます。
- 英語のプロンプトを与えることで、実行可能なコードを生成することができます。
- 部分的に生成されたコードを完成させることもできます。
📦 インストール
このモデルは、transformers
ライブラリを使用して簡単にロードできます。以下のコマンドでインストールできます。
pip install transformers
💻 使用例
基本的な使用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-2B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-2B-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))
📚 ドキュメント
モデルの説明
CodeGenは、論文「A Conversational Paradigm for Program Synthesis」に基づく、プログラム合成用の自己回帰型言語モデルのファミリーです。論文の著者は、Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese、Caiming Xiongです。これらのモデルは、このリポジトリで公開されており、3種類の事前学習データバリアント (NL
、Multi
、Mono
) と4種類のモデルサイズバリアント (350M
、2B
、6B
、16B
) があります。
このリポジトリに含まれるチェックポイントは、論文ではCodeGen-Multi 2Bと表記されています。「Multi」は、モデルが CodeGen-NL 2B で初期化され、複数のプログラミング言語のデータセットでさらに事前学習されたことを意味し、「2B」は学習可能なパラメータの数を指します。
学習データ
このチェックポイント (CodeGen-Multi 2B) は、まず CodeGen-NL 2B で初期化され、その後、GitHubリポジトリからの複数のプログラミング言語の大規模データセットである BigQuery で事前学習されました。このデータは119.2Bトークンから構成され、C、C++、Go、Java、JavaScript、Pythonを含んでいます。
学習手順
CodeGenは、逐次入力の尤度を最大化するために交差エントロピー損失を使用して学習されました。このモデルファミリーは、Googleの複数のTPU-v4-512を使用して、データ並列とモデル並列を活用して学習されました。詳細については、論文 のセクション2.3を参照してください。
評価結果
私たちは、2つのコード生成ベンチマークであるHumanEvalとMTPBでモデルを評価しています。詳細については、論文 を参照してください。
想定される使用法と制限事項
自己回帰型言語モデルとして、CodeGenは、与えられた自然言語とプログラミング言語のテキストから特徴を抽出し、それらの尤度を計算することができます。ただし、このモデルは、プログラム合成に特化しており、英語のプロンプトを与えることで実行可能なコードを生成することが最適です。プロンプトはコメント文字列の形式である必要があります。また、部分的に生成されたコードを完成させることもできます。
倫理的な考慮事項
このリリースは、学術論文のサポートのための研究目的のみです。私たちのモデル、データセット、コードは、すべての下流の目的に特に設計または評価されていません。このモデルをデプロイする前に、ユーザーが精度、安全性、公正性に関連する潜在的な問題を評価し、対処することを強く推奨します。ユーザーは、AIの一般的な制限を考慮し、適用可能な法律を遵守し、ユースケースを選択する際にベストプラクティスを活用することをお勧めします。特に、エラーや誤用が人々の生活、権利、または安全に重大な影響を与える可能性のある高リスクシナリオでは、これらのことが重要です。ユースケースに関するさらなるガイダンスについては、私たちのAUPとAI AUPを参照してください。
🔧 技術詳細
CodeGenは、逐次入力の尤度を最大化するために交差エントロピー損失を使用して学習されました。このモデルファミリーは、Googleの複数のTPU-v4-512を使用して、データ並列とモデル並列を活用して学習されました。詳細については、論文 のセクション2.3を参照してください。
📄 ライセンス
このモデルは、BSD 3-Clauseライセンスの下で公開されています。
📚 引用情報
@article{Nijkamp2022ACP,
title={A Conversational Paradigm for Program Synthesis},
author={Nijkamp, Erik and Pang, Bo and Hayashi, Hiroaki and Tu, Lifu and Wang, Huan and Zhou, Yingbo and Savarese, Silvio and Xiong, Caiming},
journal={arXiv preprint},
year={2022}
}