|
--- |
|
license: bsd-3-clause |
|
tags: |
|
- codet5 |
|
datasets: |
|
- code_search_net |
|
inference: true |
|
--- |
|
|
|
# CodeT5-base for Code Summarization |
|
|
|
[CodeT5-base](https://huggingface.co/Salesforce/codet5-base) model fine-tuned on CodeSearchNet data in a multi-lingual training setting ( |
|
Ruby/JavaScript/Go/Python/Java/PHP) for code summarization. It was introduced in this EMNLP 2021 |
|
paper [CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation](https://arxiv.org/abs/2109.00859) |
|
by Yue Wang, Weishi Wang, Shafiq Joty, Steven C.H. Hoi. Please check out more |
|
at [this repository](https://github.com/salesforce/CodeT5). |
|
|
|
## How to use |
|
|
|
Here is how to use this model: |
|
|
|
```python |
|
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." |
|
``` |
|
|
|
## Fine-tuning data |
|
|
|
We employ the filtered version of CodeSearchNet data [[Husain et al., 2019](https://arxiv.org/abs/1909.09436)] |
|
from [CodeXGLUE](https://github.com/microsoft/CodeXGLUE/tree/main/Code-Text/code-to-text) benchmark for fine-tuning on |
|
code summarization. The data is tokenized with our pre-trained code-specific BPE (Byte-Pair Encoding) tokenizer. One can |
|
prepare text (or code) for the model using RobertaTokenizer with the vocab files from [codet5-base](https://huggingface.co/Salesforce/codet5-base). |
|
|
|
### Data statistic |
|
|
|
| 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 | |
|
|
|
## Training procedure |
|
|
|
We fine-tune codet5-base on these six programming languages (Ruby/JavaScript/Go/Python/Java/PHP) in the multi-task learning setting. We employ the |
|
balanced sampling to avoid biasing towards high-resource tasks. Please refer to the [paper](https://arxiv.org/abs/2109.00859) for more details. |
|
|
|
## Evaluation results |
|
|
|
Unlike the paper allowing to select different best checkpoints for different programming languages (PLs), here we employ one checkpoint for |
|
all PLs. Besides, we remove the task control prefix to specify the PL in training and inference. The results on the test set are shown as below: |
|
|
|
| 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 | |
|
| [RoBERTa](https://arxiv.org/pdf/1907.11692.pdf) | 11.17 | 11.90 | 17.72 | 18.14 | 16.47 | 24.02 | 16.57 | |
|
| [CodeBERT](https://arxiv.org/pdf/2002.08155.pdf) | 12.16 | 14.90 | 18.07 | 19.06 | 17.65 | 25.16 | 17.83 | |
|
| [PLBART](https://aclanthology.org/2021.naacl-main.211.pdf) | 14.11 |15.56 | 18.91 | 19.30 | 18.45 | 23.58 | 18.32 | |
|
| [CodeT5-small](https://arxiv.org/abs/2109.00859) |14.87 | 15.32 | 19.25 | 20.04 | 19.92 | 25.46 | 19.14 | |
|
| [CodeT5-base](https://arxiv.org/abs/2109.00859) | **15.24** | 16.16 | 19.56 | 20.01 | **20.31** | 26.03 | 19.55 | |
|
| [CodeT5-base-multi-sum](https://arxiv.org/abs/2109.00859) | **15.24** | **16.18** | **19.95** | **20.42** | 20.26 | **26.10** | **19.69** | |
|
|
|
# Ethical Considerations |
|
|
|
This release is for research purposes only in support of an academic paper. Our models, datasets, and code are not specifically designed or evaluated for all downstream purposes. We strongly recommend users evaluate and address potential concerns related to accuracy, safety, and fairness before deploying this model. We encourage users to consider the common limitations of AI, comply with applicable laws, and leverage best practices when selecting use cases, particularly for high-risk scenarios where errors or misuse could significantly impact people’s lives, rights, or safety. For further guidance on use cases, refer to our AUP and AI AUP. |
|
|
|
## Citation |
|
|
|
```bibtex |
|
@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}, |
|
} |
|
``` |