🚀 CodeGen (CodeGen-Multi 16B)
CodeGen是一系列用於程序合成的自迴歸語言模型,它能夠從給定的自然語言和編程語言文本中提取特徵,並計算其可能性。該模型尤其擅長根據英文提示生成可執行代碼,提示應以註釋字符串的形式給出,也能補全部分生成的代碼。
🚀 快速開始
這個模型可以使用 AutoModelForCausalLM
功能輕鬆加載:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-16B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-16B-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))
✨ 主要特性
CodeGen是來自論文 A Conversational Paradigm for Program Synthesis 的一系列用於程序合成的自迴歸語言模型,論文作者包括Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese、Caiming Xiong。這些模型最初發布在 此倉庫 中,有3種預訓練數據變體(NL
、Multi
、Mono
)和4種模型大小變體(350M
、2B
、6B
、16B
)。
本倉庫中包含的檢查點在論文中被表示為 CodeGen-Multi 16B,其中“Multi”表示該模型以 CodeGen-NL 16B 初始化,並在多種編程語言的數據集上進一步預訓練;“16B”指的是可訓練參數的數量。
📦 安裝指南
暫未提及安裝步驟,跳過此章節。
💻 使用示例
基礎用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-16B-multi")
model = AutoModelForCausalLM.from_pretrained("Salesforce/codegen-16B-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))
高級用法
暫未提及高級用法代碼示例,跳過此部分。
📚 詳細文檔
訓練數據
此檢查點(CodeGen-Multi 16B)首先以 CodeGen-NL 16B 初始化,然後在 BigQuery 上進行預訓練,這是一個來自GitHub倉庫的多種編程語言的大規模數據集。數據包含1192億個標記,包括C、C++、Go、Java、JavaScript和Python。
訓練過程
CodeGen使用交叉熵損失進行訓練,以最大化序列輸入的可能性。該系列模型由Google使用多個TPU - v4 - 512進行訓練,利用了數據和模型並行性。更多細節請參閱 論文 的第2.3節。
評估結果
我們在兩個代碼生成基準測試上評估了我們的模型:HumanEval和MTPB。更多細節請參閱 論文。
預期用途和限制
作為自迴歸語言模型,CodeGen能夠從給定的自然語言和編程語言文本中提取特徵,並計算其可能性。然而,該模型旨在並最擅長程序合成,即根據英文提示生成可執行代碼,提示應以註釋字符串的形式給出。該模型也可以補全部分生成的代碼。
道德考量
此版本僅用於支持學術論文的研究目的。我們的模型、數據集和代碼並非專門為所有下游用途設計或評估。我們強烈建議用戶在部署此模型之前評估並解決與準確性、安全性和公平性相關的潛在問題。我們鼓勵用戶考慮AI的常見侷限性,遵守適用法律,並在選擇用例時採用最佳實踐,特別是在錯誤或濫用可能對人們的生活、權利或安全產生重大影響的高風險場景中。有關用例的進一步指導,請參閱我們的AUP和AI AUP。
🔧 技術細節
CodeGen使用交叉熵損失進行訓練,以最大化序列輸入的可能性。該系列模型由Google使用多個TPU - v4 - 512進行訓練,利用了數據和模型並行性。更多細節請參閱 論文 的第2.3節。
📄 許可證
本項目採用BSD 3 - 條款許可證。
📖 引用信息
@article{Nijkamp2022ACP,
title={A Conversational Paradigm for Program Synthesis},
author={Nijkamp, Erik and Pang, Bo and Hayashi, Hiroaki and Tu, Lifu and Wang, Huan and Zhou, Yingbo and Savarese, Silvio and Xiong, Caiming},
journal={arXiv preprint},
year={2022}
}