英文

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 )编写的。

模型描述< h2>

来自摘要:

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

预期用途和局限性

此存储库仅包含预训练模型,因此您可以像下面的代码示例中显示的那样,使用此模型进行掩码跨度预测。然而,此模型的主要用途是为感兴趣的下游任务进行微调,例如:

  • 代码摘要
  • 代码生成
  • 代码翻译
  • 代码优化
  • 代码缺陷检测
  • 代码克隆检测

请参阅 model hub 以查找您感兴趣的任务的微调版本。

如何使用

以下是如何使用此模型的步骤:

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

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

训练数据

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

训练过程

预处理

该模型使用特定于代码的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}
}