🚀 CodeT5+ 2B
CodeT5+ 2B是一個強大的代碼大語言模型,採用編碼器 - 解碼器架構,支持多種模式,能有效處理代碼理解和生成任務。它在預訓練任務和模型初始化方法上進行了創新,在多個代碼任務中取得了顯著的性能提升。
🚀 快速開始
本模型可以使用AutoModelForSeq2SeqLM
輕鬆加載,並採用與 CodeGen 相同的分詞器。
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
checkpoint = "Salesforce/codet5p-2b"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint,
torch_dtype=torch.float16,
trust_remote_code=True).to(device)
encoding = tokenizer("def print_hello_world():", return_tensors="pt").to(device)
encoding['decoder_input_ids'] = encoding['input_ids'].clone()
outputs = model.generate(**encoding, max_length=15)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
✨ 主要特性
- 多模式架構:CodeT5+ 具有編碼器 - 解碼器架構,可靈活運行於不同模式(即僅編碼器、僅解碼器和編碼器 - 解碼器),以支持廣泛的代碼理解和生成任務。
- 多樣化預訓練任務:與原始的 CodeT5 家族相比,CodeT5+ 通過包括 跨度去噪、因果語言建模、對比學習 和 文本 - 代碼匹配 等多樣化的預訓練任務進行預訓練,從而從單模態代碼數據和雙模態代碼 - 文本數據中學習豐富的表示。
- 高效預訓練方法:採用簡單而有效的 計算高效預訓練 方法,使用凍結的現成大語言模型(如 CodeGen)初始化模型組件,以高效擴展模型規模(如 2B、6B、16B),並採用“淺編碼器和深解碼器”架構。
- 指令微調:按照 Code Alpaca 進行指令微調,以與自然語言指令對齊。
📦 安裝指南
文檔中未提及具體安裝步驟,可參考 transformers 庫的安裝方法來安裝依賴。
📚 詳細文檔
模型描述
CodeT5+ 是一個新的開源代碼大語言模型家族,相關介紹發表在論文 CodeT5+: Open Code Large Language Models for Code Understanding and Generation 中,作者包括 Yue Wang 等。
預訓練數據
本模型檢查點在 github-code 數據集 的去重版本的更嚴格許可子集上進行訓練。數據預處理時僅保留許可寬鬆的代碼(如“mit” “apache - 2” “bsd - 3 - clause” “bsd - 2 - clause” “cc0 - 1.0” “unlicense” “isc”)。支持的語言共有 9 種,分別為:c
、c++
、c - sharp
、go
、java
、javascript
、php
、python
、ruby
。
訓練過程
本檢查點從現成的大語言模型初始化,其編碼器從 CodeGen - 350M - mono 初始化,解碼器從 CodeGen - 2B - mono 初始化。在第一階段預訓練中,它在單模態代碼數據上進行訓練,包括 跨度去噪 和兩種變體的 因果語言建模 等多樣化的預訓練任務。之後,在 Python 子集上以因果語言建模為目標再訓練幾個週期,以更好地適應 Python 代碼生成。更多詳細信息請參考論文。
評估結果
CodeT5+ 模型在各種設置(零樣本、微調、指令微調)下的廣泛代碼理解和生成任務中進行了全面評估。具體而言,與現有最優基線相比,CodeT5+ 在許多下游任務上取得了顯著的性能提升,例如:8 個文本到代碼檢索任務(平均 MRR 提高 3.2)、2 個行級代碼補全任務(平均精確匹配提高 2.1)和 2 個檢索增強代碼生成任務(平均 BLEU - 4 提高 5.8)。在 MathQA - Python 和 GSM8K - Python 上的 2 個數學編程任務中,參數低於 10 億的 CodeT5+ 模型顯著優於許多參數高達 137B 的大語言模型。特別是在 HumanEval 基準的零樣本文本到代碼生成任務中,InstructCodeT5+ 16B 針對其他開源代碼大語言模型創造了新的最優結果,pass@1 為 35.0%,pass@10 為 54.5%,甚至超過了閉源的 OpenAI code - cushman - 001 模型。更多詳細信息請參考 論文。
🔧 技術細節
CodeT5+ 採用“淺編碼器和深解碼器”架構,通過多樣化的預訓練任務和計算高效的預訓練方法,從單模態和雙模態數據中學習豐富的表示。在初始化時,利用現成的大語言模型進行參數初始化,以提高訓練效率和模型性能。
📄 許可證
本項目採用 BSD 3 - 條款許可證(BSD 3 - Clause License)。
📖 引用信息
@article{wang2023codet5plus,
title={CodeT5+: Open Code Large Language Models for Code Understanding and Generation},
author={Wang, Yue and Le, Hung and Gotmare, Akhilesh Deepak and Bui, Nghi D.Q. and Li, Junnan and Hoi, Steven C. H.},
journal={arXiv preprint},
year={2023}
}
⚠️ 重要提示
本版本僅用於支持學術論文的研究目的。我們的模型、數據集和代碼並非專門為所有下游目的而設計或評估。強烈建議用戶在部署此模型之前,評估並解決與準確性、安全性和公平性相關的潛在問題。鼓勵用戶考慮人工智能的常見侷限性,遵守適用法律,並在選擇用例時採用最佳實踐,特別是在錯誤或濫用可能對人們的生活、權利或安全產生重大影響的高風險場景中。有關用例的更多指導,請參考我們的 AUP 和 AI AUP。