英文

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 中提出,并于 this repository 首次发布。

免责声明:CodeT5模型发布团队未为此模型撰写模型卡片,因此此模型卡片由Hugging Face团队(具体来说是 nielsr )编写。

模型描述

摘要:

"我们提出了CodeT5,这是一个统一的预训练编码器-解码器Transformer模型,更好地利用开发人员分配的标识符所传达的代码语义。我们的模型采用统一的框架,无缝支持代码理解和生成任务,并允许多任务学习。此外,我们提出了一种新颖的标识符感知预训练任务,使模型能够区分哪些代码标记是标识符,并在它们被屏蔽时能够恢复它们。此外,我们提出了一种双模态双生成任务来利用用户编写的代码注释,以实现更好的NL-PL对齐。全面的实验证明,CodeT5在理解任务(如代码缺陷检测和克隆检测)以及包括PL-NL、NL-PL和PL-PL在内的各种方向的生成任务上明显优于先前的方法。进一步分析表明,我们的模型可以更好地捕捉来自代码的语义信息。"

使用目的和限制

此存储库仅包含预训练模型,因此您可以使用此模型进行遮盖范围预测,如下面的代码示例所示。然而,此模型的主要用途是为感兴趣的下游任务进行微调,例如:

  • 代码摘要
  • 代码生成
  • 代码翻译
  • 代码改进
  • 代码缺陷检测
  • 代码克隆检测

可以在 here 中找到用于代码的监督数据集。请查看 model hub 以寻找您感兴趣的任务的微调版本。

使用方法

以下是如何使用此模型:

from transformers import RobertaTokenizer, T5ForConditionalGeneration

tokenizer = RobertaTokenizer.from_pretrained('Salesforce/codet5-base')
model = T5ForConditionalGeneration.from_pretrained('Salesforce/codet5-base')

text = "def greet(user): print(f'hello <extra_id_0>!')"
input_ids = tokenizer(text, return_tensors="pt").input_ids

# simply generate a single sequence
generated_ids = model.generate(input_ids, max_length=8)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
# this prints "{user.username}"

训练数据

CodeT5模型在CodeSearchNet上进行了预训练 Husain et al., 2019 。此外,作者还从 BigQuery1 收集了两个C/CSharp数据集,以确保所有下游任务与预训练数据具有重叠的编程语言。总共使用了约835万个实例进行预训练。

训练过程

预处理

该模型使用了一个使用 HuggingFace Tokenizers 库进行训练的代码特定的BPE(字节对编码)分词器。可以使用RobertaTokenizer准备文本(或代码)以供模型使用,使用此存储库中的文件。

评估结果

有关几个下游基准测试的评估结果,请参阅论文。

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