🚀 CodeT5+ 220M (Pythonでさらに微調整)
エンコーダー・デコーダーアーキテクチャを持つオープンコードの大規模言語モデルで、コード理解と生成タスクをサポートします。
🚀 クイックスタート
CodeT5+は、エンコーダー・デコーダーアーキテクチャを持つ新しいオープンコードの大規模言語モデルのファミリーです。このモデルは、様々なコード理解と生成タスクをサポートするために、異なるモード(エンコーダーのみ、デコーダーのみ、エンコーダー・デコーダー)で柔軟に動作することができます。
✨ 主な機能
- 多様な事前学習タスク(スパンノイジング、因果言語モデリング、対照学習、テキスト・コードマッチング)で事前学習され、単モーダルコードデータとバイモーダルコード・テキストデータから豊富な表現を学習します。
- コンピュート効率の良い事前学習方法を採用し、オフザシェルフのLLMでモデルコンポーネントを初期化し、効率的にモデルを拡張します。
- 「浅いエンコーダーと深いデコーダー」のアーキテクチャを採用しています。
- 自然言語命令に沿うようにインストラクションチューニングされています。
📦 インストール
このモデルは、T5ForConditionalGeneration
機能を使用して簡単にロードでき、元のCodeT5と同じトークナイザーを使用します。
💻 使用例
基本的な使用法
from transformers import T5ForConditionalGeneration, AutoTokenizer
checkpoint = "Salesforce/codet5p-220m-py"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = T5ForConditionalGeneration.from_pretrained(checkpoint).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=10)
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などのオフザシェルフのLLMを凍結してモデルコンポーネントを初期化する、簡単で効果的なコンピュート効率の良い事前学習方法を採用しており、モデルを効率的に拡張することができます(例: 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
学習手順
このチェックポイントは、最初の段階の事前学習では、多言語の単モーダルコードデータで学習され、スパンノイジングや因果言語モデリングの2つのバリエーションなどの多様な事前学習タスクが含まれています。
その後、Pythonサブセットで因果言語モデリングの目的でさらに1エポック学習され、Pythonコード生成により適応するようになっています。詳細については、論文を参照してください。
評価結果
CodeT5+モデルは、ゼロショット、ファインチューニング、インストラクションチューニングなどの様々な設定で、幅広いコード理解と生成タスクで包括的に評価されています。
具体的には、CodeT5+は、多くの下流タスクで、SoTAベースラインと比較して大幅なパフォーマンス向上をもたらします。例えば、
8つのテキストからコードへの検索タスク(平均MRR +3.2)、2つの行レベルのコード補完タスク(平均正解率 +2.1)、2つの検索拡張コード生成タスク(平均BLEU-4 +5.8)です。
MathQA-PythonとGSM8K-Pythonの2つの数学プログラミングタスクでは、10億パラメータ未満のCodeT5+モデルは、最大137Bパラメータの多くのLLMを大幅に上回ります。
特に、HumanEvalベンチマークのゼロショットテキストからコードへの生成タスクでは、InstructCodeT5+ 16Bは、他のオープンコードLLMに対して35.0% pass@1と54.5% pass@10の新しいSoTA結果を達成し、クローズドソースのOpenAI code-cushman-001モードさえ上回ります。
詳細については、論文を参照してください。
具体的にこのチェックポイントについては、ゼロショット設定でHumanEvalで12.0% pass@1を達成しており、Incoder 1.3Bの8.9%、GPT-Neo 2.7Bの6.4%、GPT-J 6Bの11.6%など、はるかに大きなLLMを上回っています。
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条項ライセンスの下で提供されています。