🚀 CodeT5+ 16B
CodeT5+ 16Bは、エンコーダー・デコーダーアーキテクチャを持つオープンコードの大規模言語モデルです。様々なコード理解と生成タスクをサポートし、多様な事前学習タスクで事前学習されています。また、計算効率の高い事前学習方法を用いてモデルを拡張しています。
🚀 クイックスタート
このモデルは、AutoModelForSeq2SeqLM
機能を使用して簡単にロードでき、CodeGenと同じトークナイザーを採用しています。
✨ 主な機能
- 多様なモード対応:エンコーダーのみ、デコーダーのみ、エンコーダー・デコーダー の異なるモードで柔軟に動作し、幅広いコード理解と生成タスクをサポートします。
- 多様な事前学習タスク:スパンノイジング、因果言語モデリング、対照学習、テキスト・コードマッチング などの多様な事前学習タスクで事前学習され、単一モーダルのコードデータと二モーダルのコード・テキストデータから豊富な表現を学習します。
- 計算効率の高い事前学習:CodeGenなどの既存の大規模言語モデルを凍結してモデルコンポーネントを初期化し、効率的にモデルを拡張します。
- 自然言語命令への適合:Code Alpacaに従って自然言語命令に適合するように命令微調整されています。
💻 使用例
基本的な使用法
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
checkpoint = "Salesforce/codet5p-16b"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
trust_remote_code=True).to(device)
encoding = tokenizer("def print_hello_world():", return_tensors="pt").to(device)
encoding['decoder_input_ids'] = encoding['input_ids'].clone()
outputs = model.generate(**encoding, max_length=15)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
📚 詳細ドキュメント
モデルの説明
CodeT5+は、エンコーダー・デコーダーアーキテクチャを持つ新しいオープンコードの大規模言語モデルファミリーです。異なるモード(エンコーダーのみ、デコーダーのみ、エンコーダー・デコーダー)で柔軟に動作し、幅広いコード理解と生成タスクをサポートします。このモデルは以下の論文で紹介されています。
CodeT5+: Open Code Large Language Models for Code Understanding and Generation
著者: Yue Wang*, Hung Le*, Akhilesh Deepak Gotmare, Nghi D.Q. Bui, Junnan Li, Steven C.H. Hoi (* は同等の貢献を示す)
元のCodeT5ファミリー(ベース: 220M
、ラージ: 770M
)と比較して、CodeT5+は スパンノイジング、因果言語モデリング、対照学習、テキスト・コードマッチング などの多様な事前学習タスクで事前学習され、単一モーダルのコードデータと二モーダルのコード・テキストデータから豊富な表現を学習します。また、CodeGenなどの既存の大規模言語モデルを凍結してモデルコンポーネントを初期化する簡単で効果的な 計算効率の高い事前学習 方法を採用し、モデルを効率的に拡張(2B
、6B
、16B
)しています。さらに、"浅いエンコーダーと深いデコーダー" のアーキテクチャを採用しています。また、Code Alpacaに従って自然言語命令に適合するように命令微調整されています(InstructCodeT5+ 16Bを参照)。
事前学習データ
このチェックポイントは、github-codeデータセットの重複排除バージョンの厳格な許容サブセットで学習されています。データは、許容ライセンスのコード("mit"、"apache-2"、"bsd-3-clause"、"bsd-2-clause"、"cc0-1.0"、"unlicense"、"isc")のみを残すように前処理されています。サポートされる言語は合計9種類で、c
、c++
、c-sharp
、go
、java
、javascript
、php
、python
、ruby
です。
学習手順
このチェックポイントは、既存の大規模言語モデルから初期化されています。エンコーダーは CodeGen-350M-mono から、デコーダーは CodeGen-16B-mono から初期化されています。第一段階の事前学習では、単一モーダルのコードデータで学習され、スパンノイジング と 因果言語モデリング の2つのバリエーションを含む多様な事前学習タスクが行われます。その後、Pythonサブセットで因果言語モデリングの目的でさらに1エポック学習され、Pythonコード生成により適合するように調整されています。詳細は論文を参照してください。
評価結果
CodeT5+モデルは、ゼロショット、微調整、命令微調整 などの様々な設定で、幅広いコード理解と生成タスクで包括的に評価されています。具体的には、多くの下流タスクでSoTAベースラインと比較して大幅な性能向上を達成しています。例えば、8つのテキスト・コード検索タスク(平均MRR +3.2)、2つの行レベルのコード補完タスク(平均正確一致率 +2.1)、2つの検索強化コード生成タスク(平均BLEU-4 +5.8)です。MathQA-PythonとGSM8K-Pythonの2つの数学プログラミングタスクでは、10億パラメータ未満のCodeT5+モデルが最大137Bパラメータの多くの大規模言語モデルを大幅に上回っています。特に、HumanEvalベンチマークのゼロショットテキスト・コード生成タスクでは、InstructCodeT5+ 16Bが他のオープンコードの大規模言語モデルに対して35.0%のpass@1と54.5%のpass@10という新しいSoTA結果を達成し、閉ソースのOpenAI code-cushman-001モードを上回っています。詳細は論文を参照してください。
BibTeXエントリと引用情報
@article{wang2023codet5plus,
title={CodeT5+: Open Code Large Language Models for Code Understanding and Generation},
author={Wang, Yue and Le, Hung and Gotmare, Akhilesh Deepak and Bui, Nghi D.Q. and Li, Junnan and Hoi, Steven C. H.},
journal={arXiv preprint},
year={2023}
}
倫理的な考慮事項
このリリースは学術論文のサポートのための研究目的のみです。当社のモデル、データセット、コードは、すべての下流目的に特に設計または評価されていません。ユーザーは、このモデルをデプロイする前に、精度、安全性、公平性に関する潜在的な懸念事項を評価し、対処することを強くお勧めします。ユーザーは、AIの一般的な制限を考慮し、適用可能な法律に準拠し、特にエラーや誤用が人々の生活、権利、または安全に重大な影響を与える可能性のある高リスクシナリオのユースケースを選択する際には、ベストプラクティスを活用することをお勧めします。ユースケースに関するさらなるガイダンスについては、当社のAUPとAI AUPを参照してください。
📄 ライセンス
このモデルはBSD 3条項ライセンスの下で提供されています。