🚀 CodeT5 (小型モデル)
CodeT5は事前学習されたコード関連のモデルです。Yue Wang、Weishi Wang、Shafiq Joty、Steven C.H. Hoiによる論文 CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation で紹介され、このリポジトリ で最初に公開されました。
なお、CodeT5をリリースしたチームはこのモデルのモデルカードを作成していないため、このモデルカードはHugging Faceチーム(具体的には nielsr)によって作成されています。
🚀 クイックスタート
このモデルは事前学習済みのCodeT5モデルで、以下のコード例のようにマスクされたスパンの予測に使用できます。ただし、主な用途は、コード要約、コード生成、コード翻訳、コード改善、コード欠陥検出、コードクローン検出などの下流タスクに微調整することです。
✨ 主な機能
- コードの意味情報をより良く活用するための統一的な事前学習エンコーダ・デコーダTransformerモデル。
- コード理解と生成タスクの両方をシームレスにサポートし、マルチタスク学習が可能。
- 新しい識別子認識事前学習タスクにより、コードトークンが識別子であることを区別し、マスクされたときに復元できる。
- バイモーダル双方向生成タスクを用いて、ユーザーが書いたコードコメントを活用し、自然言語とプログラミング言語のアライメントを改善。
📚 ドキュメント
モデルの説明
論文の概要から引用:
「我々はCodeT5を提案します。これは、開発者が割り当てた識別子から伝達されるコードの意味情報をより良く活用する、統一的な事前学習エンコーダ・デコーダTransformerモデルです。我々のモデルは、コード理解と生成タスクの両方をシームレスにサポートする統一的なフレームワークを採用し、マルチタスク学習を可能にします。さらに、我々は新しい識別子認識事前学習タスクを提案します。これにより、モデルはどのコードトークンが識別子であるかを区別し、マスクされたときにそれらを復元できます。さらに、我々は、自然言語とプログラミング言語のアライメントを改善するために、バイモーダル双方向生成タスクを用いてユーザーが書いたコードコメントを活用することを提案します。包括的な実験により、CodeT5は、コード欠陥検出やクローン検出などの理解タスク、およびPL-NL、NL-PL、PL-PLなどの様々な方向の生成タスクにおいて、従来の方法を大幅に上回ることが示されています。さらなる分析により、我々のモデルはコードからの意味情報をより良く捉えることができることが明らかになりました。」
想定される用途と制限
このリポジトリには事前学習モデルのみが含まれているため、以下のコード例のようにマスクされたスパンの予測に使用できます。ただし、このモデルの主な用途は、以下のような関心のある下流タスクに微調整することです。
- コード要約
- コード生成
- コード翻訳
- コード改善
- コード欠陥検出
- コードクローン検出
関心のあるタスクについて微調整されたバージョンを探すには、モデルハブ を参照してください。
使い方
このモデルの使い方は以下の通りです。
基本的な使用法
from transformers import RobertaTokenizer, T5ForConditionalGeneration
tokenizer = RobertaTokenizer.from_pretrained('Salesforce/codet5-small')
model = T5ForConditionalGeneration.from_pretrained('Salesforce/codet5-small')
text = "def greet(user): print(f'hello <extra_id_0>!')"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=10)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
訓練データ
CodeT5モデルは、CodeSearchNet Husain et al., 2019 で事前学習されました。さらに、著者らは BigQuery1 からC/CSharpの2つのデータセットを収集し、すべての下流タスクが事前学習データと重複するプログラミング言語を持つようにしました。合計で約835万のインスタンスが事前学習に使用されています。
訓練手順
前処理
このモデルは、コード固有のBPE(Byte-Pair Encoding)トークナイザーを使用しています。このリポジトリのファイルを使用して、RobertaTokenizerを用いてモデル用のテキスト(またはコード)を準備することができます。
評価結果
いくつかの下流ベンチマークにおける評価結果については、論文を参照してください。
倫理的な考慮事項
このリリースは、学術論文のサポートのための研究目的のみです。我々のモデル、データセット、およびコードは、すべての下流目的に特に設計または評価されていません。我々は、ユーザーがこのモデルをデプロイする前に、精度、安全性、および公平性に関連する潜在的な問題を評価し、対処することを強く推奨します。我々は、ユーザーがAIの一般的な制限を考慮し、適用可能な法律を遵守し、特にエラーや誤用が人々の生活、権利、または安全に重大な影響を与える可能性のある高リスクシナリオの場合には、ベストプラクティスを活用することを奨励します。ユースケースに関するさらなるガイダンスについては、我々のAUPおよびAI AUPを参照してください。
BibTeXエントリと引用情報
@misc{wang2021codet5,
title={CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation},
author={Yue Wang and Weishi Wang and Shafiq Joty and Steven C. H. Hoi},
year={2021},
eprint={2109.00859},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。