模型:
Salesforce/codet5-small
任务:
文生文许可:
apache-2.0预训练的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模型,更好地利用开发者分配的标识符所传达的代码语义。我们的模型采用统一的框架,无缝支持代码理解和生成任务,并允许多任务学习。此外,我们提出了一种新颖的以标识符为导向的预训练任务,使模型能够区分哪些代码令牌是标识符,并在这些标识符被掩码时恢复它们。此外,我们提出了使用双模态双重生成任务利用用户编写的代码注释,以实现更好的自然语言-编程语言对齐。广泛的实验证明,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准备模型的文本(或代码),使用此存储库中的文件。
有关几个下游基准测试的评估结果,请参阅论文。
@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} }