英文

CodeT5-base用于代码摘要

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},
}