🚀 CodeGen2.5-7B-instruct
CodeGen2.5-7B-instruct 是一個用於程序合成的自迴歸語言模型家族。它基於較小的模型規模,在代碼生成任務上取得了具有競爭力的結果,能夠根據英文提示生成可執行代碼,還能完成部分生成的代碼。
🚀 快速開始
前提條件
請安裝 OpenAI 的 tiktoken
用於分詞器。
pip install tiktoken==0.4.0
因果採樣(代碼自動補全)
對於常規的因果採樣,只需根據上下文生成補全內容:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-instruct", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-instruct")
text = "def hello_world():"
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=True))
填充採樣
對於填充採樣,我們遵循 CodeGen2 的格式:
<mask_N>
:第 N 個要掩碼的跨度。在實踐中,使用 <mask_1>
來指定要填充的位置。
<sep>
:後綴和填充樣本之間的分隔符標記。
<eom>
:“掩碼結束”標記,模型在填充結束時會輸出該標記。您可以使用此標記來截斷輸出。
例如,如果我們想為以下函數的光標位置生成填充內容:
def hello_world():
|
return name
我們通過以下步驟構造模型的輸入:
- 在光標位置插入
<mask_1>
標記。
- 追加
<sep>
標記以指示邊界。
- 插入另一個
<mask_1>
以指示我們要填充的掩碼。
最終的代碼片段如下:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-instruct", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-instruct")
def format(prefix, suffix):
return prefix + "<mask_1>" + suffix + "<|endoftext|>" + "<sep>" + "<mask_1>"
prefix = "def hello_world():\n "
suffix = " return name"
text = format(prefix, suffix)
input_ids = tokenizer(text, return_tensors="pt").input_ids
generated_ids = model.generate(input_ids, max_length=128)
print(tokenizer.decode(generated_ids[0], skip_special_tokens=False)[len(text):])
您可能需要使用 <eom>
來截斷模型輸出。
✨ 主要特性
- 高效性能:基於 CodeGen2 構建,在 StarCoderData 上進行了 1.4T 標記的訓練,與 StarCoderBase-15.5B 相比,在不到其一半大小的情況下取得了有競爭力的結果。
- 多種功能:和 CodeGen2 一樣,該模型能夠進行填充操作,並支持多種編程語言。
- 多模型版本:
- CodeGen2.5-7B-multi:在 StarCoderData 上訓練,遵循 Apache-2.0 許可證。
- CodeGen2.5-7B-mono:在額外的 Python 標記上進一步訓練,遵循 Apache-2.0 許可證。
- CodeGen2.5-7B-instruct(本倉庫):在 CodeGen2.5-7B-mono 的基礎上,在指令數據上進一步訓練,僅用於研究目的。
📚 詳細文檔
模型描述
CodeGen2.5 是一個用於程序合成的自迴歸語言模型家族。該模型基於 CodeGen2 構建,在 StarCoderData 上進行了 1.4T 標記的訓練,與 StarCoderBase-15.5B 相比,在不到其一半大小的情況下取得了有競爭力的結果。和 CodeGen2 一樣,該模型能夠進行填充操作,並支持多種編程語言。之後,我們在 Python 上進一步訓練,然後在指令數據上訓練。我們發佈了以下所有模型:
- CodeGen2.5-7B-multi:在 StarCoderData 上訓練,遵循 Apache-2.0 許可證。
- CodeGen2.5-7B-mono:在額外的 Python 標記上進一步訓練,遵循 Apache-2.0 許可證。
- CodeGen2.5-7B-instruct(本倉庫):在 CodeGen2.5-7B-mono 的基礎上,在指令數據上進一步訓練,僅用於研究目的。
評估結果
我們在 HumanEval 和 HumanEval-Infill 上對模型進行了評估。更多詳細信息請參考 博客。
預期用途和侷限性
作為一個自迴歸語言模型,CodeGen2.5 能夠從給定的自然語言和編程語言文本中提取特徵,並計算它們的可能性。然而,該模型旨在並最擅長程序合成,即根據英文提示生成可執行代碼,提示應採用註釋字符串的形式。該模型也可以完成部分生成的代碼。
歸屬和其他要求
該模型的預訓練數據集僅過濾了允許使用的許可證。儘管如此,該模型可以從數據集中逐字生成源代碼。代碼的許可證可能要求歸屬和/或其他特定要求,必須予以遵守。數據提供者 BigCode 提供了一個 搜索索引,您可以通過該索引搜索預訓練數據,以確定生成的代碼來自何處,並對您的代碼進行適當的歸屬。
倫理考慮
此版本僅用於支持學術論文的研究目的。我們的模型、數據集和代碼並非專門為所有下游用途設計或評估。我們強烈建議用戶在部署此模型之前評估並解決與準確性、安全性和公平性相關的潛在問題。我們鼓勵用戶考慮人工智能的常見侷限性,遵守適用法律,並在選擇用例時採用最佳實踐,特別是在錯誤或濫用可能對人們的生活、權利或安全產生重大影響的高風險場景中。有關用例的更多指導,請參考我們的 AUP 和 AI AUP。
📄 許可證
該模型的許可證為其他類型。
📚 引用信息
請引用 CodeGen2 論文:
@article{Nijkamp2023codegen2,
title={CodeGen2: Lessons for Training LLMs on Programming and Natural Languages},
author={Nijkamp, Erik and Hayashi, Hiroaki and Xiong, Caiming and Savarese, Silvio and Zhou, Yingbo},
journal={arXiv preprint},
year={2023}
}