🚀 CodeT5+ 770M(在Python上進一步微調)
CodeT5+ 是一個新的開源代碼大語言模型家族,採用編碼器 - 解碼器架構,能夠靈活地在不同模式(即 僅編碼器、僅解碼器 和 編碼器 - 解碼器)下運行,以支持廣泛的代碼理解和生成任務。它為代碼相關任務提供了強大的支持,具有很高的靈活性和實用性。
🚀 快速開始
本模型可以使用 T5ForConditionalGeneration
功能輕鬆加載,並採用與原始 CodeT5 相同的分詞器。
from transformers import T5ForConditionalGeneration, AutoTokenizer
checkpoint = "Salesforce/codet5p-770m-py"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = T5ForConditionalGeneration.from_pretrained(checkpoint).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=10)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
✨ 主要特性
- 多模式靈活運行:採用編碼器 - 解碼器架構,可在 僅編碼器、僅解碼器 和 編碼器 - 解碼器 模式下靈活操作,支持廣泛的代碼理解和生成任務。
- 多樣化預訓練任務:與原始 CodeT5 家族相比,CodeT5+ 通過包括 跨度去噪、因果語言建模、對比學習 和 文本 - 代碼匹配 等多樣化的預訓練任務進行預訓練,能夠從單模態代碼數據和雙模態代碼 - 文本數據中學習豐富的表示。
- 高效預訓練方法:採用簡單而有效的 計算高效預訓練 方法,使用凍結的現成大語言模型(如 CodeGen)初始化模型組件,以有效地擴展模型規模(如
2B
、6B
、16B
),並採用“淺編碼器和深解碼器”架構。
- 指令微調:按照 Code Alpaca 進行指令微調,以與自然語言指令對齊。
📦 安裝指南
文檔未提及具體安裝步驟,可參考上述快速開始部分的代碼示例進行模型加載。
💻 使用示例
基礎用法
from transformers import T5ForConditionalGeneration, AutoTokenizer
checkpoint = "Salesforce/codet5p-770m-py"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = T5ForConditionalGeneration.from_pretrained(checkpoint).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=10)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
📚 詳細文檔
預訓練數據
此檢查點在 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
。
訓練過程
此檢查點首先在第一階段預訓練中對多語言單模態代碼數據進行訓練,其中包括一系列多樣化的預訓練任務,如 跨度去噪 和兩種變體的 因果語言建模。之後,為了更好地適應 Python 代碼生成,它在 Python 子集上以因果語言建模為目標再訓練一個週期。更多詳細信息請參考論文。
評估結果
CodeT5+ 模型在各種設置(零樣本、微調 和 指令微調)下的廣泛代碼理解和生成任務中進行了全面評估。具體而言,與現有最優基線相比,CodeT5+ 在許多下游任務上取得了顯著的性能提升,例如:8 個文本到代碼檢索任務(平均 MRR 提高 3.2)、2 個行級代碼補全任務(平均精確匹配提高 2.1)和 2 個檢索增強代碼生成任務(平均 BLEU - 4 提高 5.8)。在 MathQA - Python 和 GSM8K - Python 上的 2 個數學編程任務中,參數小於十億的 CodeT5+ 模型顯著優於許多參數高達 137B 的大語言模型。特別是在 HumanEval 基準的零樣本文本到代碼生成任務中,InstructCodeT5+ 16B 相對於其他開源代碼大語言模型創造了新的最優結果,pass@1 達到 35.0%,pass@10 達到 54.5%,甚至超過了閉源的 OpenAI code - cushman - 001 模型。
具體到這個檢查點,它在零樣本設置下的 HumanEval 上達到了 15.5% 的 pass@1,與更大的大語言模型(如 Incoder 6B 的 15.2%、GPT - NeoX 20B 的 15.4% 和 PaLM 62B 的 15.9%)相當。
🔧 技術細節
CodeT5+ 模型採用編碼器 - 解碼器架構,可在不同模式下運行。在預訓練過程中,使用了多樣化的預訓練任務和高效的預訓練方法,以學習豐富的代碼表示。具體的技術細節可參考論文:CodeT5+: Open Code Large Language Models for Code Understanding and Generation。
📄 許可證
本項目採用 bsd - 3 - clause 許可證。
📖 引用信息
@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。