🚀 CodeT5-baseによるコード要約
CodeT5-baseモデルは、多言語学習環境(Ruby/JavaScript/Go/Python/Java/PHP)においてCodeSearchNetデータでファインチューニングされ、コード要約に使用されます。このモデルは、Yue Wang、Weishi Wang、Shafiq Joty、Steven C.H. HoiによるEMNLP 2021の論文CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generationで紹介されました。詳細はこのリポジトリをご覧ください。
🚀 クイックスタート
💻 使用例
基本的な使用法
from transformers import RobertaTokenizer, T5ForConditionalGeneration
if __name__ == '__main__':
tokenizer = RobertaTokenizer.from_pretrained('Salesforce/codet5-base-multi-sum')
model = T5ForConditionalGeneration.from_pretrained('Salesforce/codet5-base-multi-sum')
text = """def svg_to_image(string, size=None):
if isinstance(string, unicode):
string = string.encode('utf-8')
renderer = QtSvg.QSvgRenderer(QtCore.QByteArray(string))
if not renderer.isValid():
raise ValueError('Invalid SVG data.')
if size is None:
size = renderer.defaultSize()
image = QtGui.QImage(size, QtGui.QImage.Format_ARGB32)
painter = QtGui.QPainter(image)
renderer.render(painter)
return image"""
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=20)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
📚 ドキュメント
ファインチューニングデータ
コード要約のファインチューニングには、CodeXGLUEベンチマークからのCodeSearchNetデータのフィルター済みバージョン[Husain et al., 2019]を使用しています。このデータは、事前学習されたコード固有のBPE(Byte-Pair Encoding)トークナイザーでトークナイズされています。codet5-baseの語彙ファイルを持つRobertaTokenizerを使用して、モデル用のテキスト(またはコード)を準備することができます。
データ統計
プログラミング言語 |
トレーニング |
検証 |
テスト |
Python |
251,820 |
13,914 |
14,918 |
PHP |
241,241 |
12,982 |
14,014 |
Go |
167,288 |
7,325 |
8,122 |
Java |
164,923 |
5,183 |
10,955 |
JavaScript |
58,025 |
3,885 |
3,291 |
Ruby |
24,927 |
1,400 |
1,261 |
トレーニング手順
このモデルは、多タスク学習環境において、6つのプログラミング言語(Ruby/JavaScript/Go/Python/Java/PHP)でcodet5-baseをファインチューニングしています。高リソースのタスクに偏らないように、バランスの取れたサンプリングを採用しています。詳細は論文を参照してください。
評価結果
論文では、異なるプログラミング言語(PL)に対して異なる最適なチェックポイントを選択できますが、ここではすべてのPLに1つのチェックポイントを使用しています。また、トレーニングと推論でPLを指定するタスク制御プレフィックスを削除しています。テストセットでの結果は以下の通りです。
モデル |
Ruby |
Javascript |
Go |
Python |
Java |
PHP |
全体 |
Seq2Seq |
9.64 |
10.21 |
13.98 |
15.93 |
15.09 |
21.08 |
14.32 |
Transformer |
11.18 |
11.59 |
16.38 |
15.81 |
16.26 |
22.12 |
15.56 |
RoBERTa |
11.17 |
11.90 |
17.72 |
18.14 |
16.47 |
24.02 |
16.57 |
CodeBERT |
12.16 |
14.90 |
18.07 |
19.06 |
17.65 |
25.16 |
17.83 |
PLBART |
14.11 |
15.56 |
18.91 |
19.30 |
18.45 |
23.58 |
18.32 |
CodeT5-small |
14.87 |
15.32 |
19.25 |
20.04 |
19.92 |
25.46 |
19.14 |
CodeT5-base |
15.24 |
16.16 |
19.56 |
20.01 |
20.31 |
26.03 |
19.55 |
CodeT5-base-multi-sum |
15.24 |
16.18 |
19.95 |
20.42 |
20.26 |
26.10 |
19.69 |
📄 ライセンス
このプロジェクトは、BSD 3条項ライセンスの下で公開されています。
📖 引用
@inproceedings{
wang2021codet5,
title={CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation},
author={Yue Wang, Weishi Wang, Shafiq Joty, Steven C.H. Hoi},
booktitle={Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing, EMNLP 2021},
year={2021},
}