🚀 CodeT5 (基礎規模模型)
CodeT5是一個預訓練的代碼處理模型。它能更好地利用開發者指定標識符所傳達的代碼語義,支持代碼理解和生成任務,在多種代碼相關任務中表現出色。
🚀 快速開始
本倉庫僅包含預訓練模型。你可以將此模型用於掩碼跨度預測等任務,但該模型的主要用途是針對特定下游任務進行微調,例如代碼摘要、代碼生成、代碼翻譯等。
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
generated_ids = model.generate(input_ids, max_length=8)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
✨ 主要特性
- 統一框架:採用統一的預訓練編碼器 - 解碼器Transformer模型,無縫支持代碼理解和生成任務,允許進行多任務學習。
- 標識符感知:提出了一種新穎的標識符感知預訓練任務,使模型能夠區分哪些代碼標記是標識符,並在它們被掩碼時恢復它們。
- 雙模態雙生成任務:利用用戶編寫的代碼註釋,通過雙模態雙生成任務實現更好的自然語言 - 編程語言對齊。
- 性能優越:在代碼缺陷檢測、克隆檢測等理解任務以及PL - NL、NL - PL和PL - PL等各種生成任務中顯著優於先前的方法。
📦 安裝指南
暫未提及具體安裝命令,故跳過此章節。
💻 使用示例
基礎用法
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
generated_ids = model.generate(input_ids, max_length=8)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
高級用法
暫未提供高級用法的代碼示例,故不展示。
📚 詳細文檔
模型描述
從論文摘要可知:“我們提出了CodeT5,這是一個統一的預訓練編碼器 - 解碼器Transformer模型,它能更好地利用開發者指定標識符所傳達的代碼語義。我們的模型採用統一框架,無縫支持代碼理解和生成任務,並允許進行多任務學習。此外,我們提出了一種新穎的標識符感知預訓練任務,使模型能夠區分哪些代碼標記是標識符,並在它們被掩碼時恢復它們。此外,我們提出利用用戶編寫的代碼註釋,通過雙模態雙生成任務實現更好的自然語言 - 編程語言對齊。綜合實驗表明,CodeT5在代碼缺陷檢測和克隆檢測等理解任務以及包括PL - NL、NL - PL和PL - PL等各個方向的生成任務上顯著優於先前的方法。進一步分析表明,我們的模型能夠更好地從代碼中捕獲語義信息。”
預期用途與限制
本倉庫僅包含預訓練模型,你可以將此模型用於掩碼跨度預測等任務。不過,該模型的主要用途是針對感興趣的下游任務進行微調,例如:
- 代碼摘要
- 代碼生成
- 代碼翻譯
- 代碼優化
- 代碼缺陷檢測
- 代碼克隆檢測
代碼的監督數據集可在此處找到。你可以在模型中心查找針對你感興趣任務的微調版本。
訓練數據
CodeT5模型在CodeSearchNet Husain等人,2019上進行了預訓練。此外,作者從BigQuery1收集了兩個C/CSharp數據集,以確保所有下游任務的編程語言與預訓練數據有重疊。總共約835萬個實例用於預訓練。
訓練過程
預處理
該模型使用了一個特定於代碼的BPE(字節對編碼)分詞器,該分詞器使用HuggingFace Tokenizers庫進行訓練。可以使用RobertaTokenizer
和本倉庫中的文件為模型準備文本(或代碼)。
評估結果
關於幾個下游基準的評估結果,請參考論文。
倫理考量
此版本僅用於支持學術論文的研究目的。我們的模型、數據集和代碼並非專門為所有下游用途設計或評估。我們強烈建議用戶在部署此模型之前評估並解決與準確性、安全性和公平性相關的潛在問題。我們鼓勵用戶考慮人工智能的常見侷限性,遵守適用法律,並在選擇用例時採用最佳實踐,特別是在錯誤或濫用可能對人們的生活、權利或安全產生重大影響的高風險場景中。有關用例的進一步指導,請參考我們的AUP和AI AUP。
🔧 技術細節
暫未提供足夠具體的技術說明,故跳過此章節。
📄 許可證
本模型採用Apache - 2.0許可證。
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}
}
免責聲明
發佈CodeT5的團隊並未為此模型編寫模型卡片,因此此模型卡片由Hugging Face團隊(更具體地說是nielsr)編寫。