🚀 CodeGen2.5-7B-multi
CodeGen2.5-7B-multi是一個用於程序合成的自迴歸語言模型,基於CodeGen2構建,在StarCoderData上訓練,規模更小但性能具有競爭力,支持多種編程語言,還可進行代碼填充。
🚀 快速開始
前提條件
請安裝OpenAI的tiktoken
用於分詞器。
pip install tiktoken==0.4.0
因果採樣(代碼自動補全)
對於常規的因果採樣,只需根據上下文生成補全內容:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen25-7b-multi", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi")
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-multi", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen25-7b-multi")
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構建:CodeGen2.5基於CodeGen2構建,在StarCoderData上訓練了1.4T個標記。
- 規模小但性能強:與StarCoderBase - 15.5B相比,規模不到其一半卻能取得有競爭力的結果。
- 支持代碼填充:和CodeGen2一樣,該模型能夠進行代碼填充。
- 多語言支持:支持多種編程語言。
📚 詳細文檔
模型描述
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。
📄 許可證
本模型遵循Apache - 2.0許可證。
📖 引用信息
請引用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}
}