模型:
Salesforce/codet5-base-multi-sum
CodeT5-base 模型在多语言训练环境(Ruby / JavaScript / Go / Python / Java / PHP)中,使用CodeSearchNet数据进行了微调,用于代码摘要。这是由Yue Wang, Weishi Wang, Shafiq Joty, Steven C.H. Hoi在EMNLP 2021 paper中介绍的。请访问 this repository 了解更多信息。
以下是如何使用此模型:
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)) # this prints: "Convert a SVG string to a QImage."
我们使用CodeSearchNet数据的筛选版本 [ Husain et al., 2019 ] 来微调代码摘要。数据使用我们预训练的代码特定BPE(Byte-Pair Encoding)分词器进行分词。可以使用RobertaTokenizer和来自 codet5-base 的词汇文件为模型准备文本(或代码)。
Programming Language | Training | Dev | Test |
---|---|---|---|
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 |
我们在多任务学习环境中使用Codet5-base对这六种编程语言(Ruby / JavaScript / Go / Python / Java / PHP)进行微调。我们使用平衡采样来避免对高资源任务的偏倚。有关更多详细信息,请参阅 paper 。
与论文不同,允许为不同的编程语言(PL)选择不同的最佳检查点,这里我们使用一个检查点适用于所有PL。此外,我们在训练和推理中删除了任务控制前缀以指定PL。测试集的结果如下:
Model | Ruby | Javascript | Go | Python | Java | PHP | Overall |
---|---|---|---|---|---|---|---|
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 |
1239321 | 11.17 | 11.90 | 17.72 | 18.14 | 16.47 | 24.02 | 16.57 |
12310321 | 12.16 | 14.90 | 18.07 | 19.06 | 17.65 | 25.16 | 17.83 |
12311321 | 14.11 | 15.56 | 18.91 | 19.30 | 18.45 | 23.58 | 18.32 |
12312321 | 14.87 | 15.32 | 19.25 | 20.04 | 19.92 | 25.46 | 19.14 |
12313321 | 15.24 | 16.16 | 19.56 | 20.01 | 20.31 | 26.03 | 19.55 |
12314321 | 15.24 | 16.18 | 19.95 | 20.42 | 20.26 | 26.10 | 19.69 |
@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}, }