🚀 CodeGen (CodeGen-HTML 350M)
CodeGen是用於程序合成的自迴歸語言模型家族,能夠解決從自然語言提示生成可執行代碼的問題,為程序開發提供了高效的解決方案。
🚀 快速開始
這個模型可以使用AutoModelForCausalLM
輕鬆加載:
基礎用法
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("Salesforce/codegen-350M-multi")
model = AutoModelForCausalLM.from_pretrained("alecsharpie/codegen_350m_html")
text = "<body>"
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 。
- 模型最初在 此倉庫 發佈,有3種預訓練數據變體(
NL
、Multi
、Mono
)和4種模型大小變體(350M
、2B
、6B
、16B
)。
- 本倉庫中的檢查點是在CodeGen-Multi 350M基礎上微調得到的,“Multi” 表示模型用 CodeGen-NL 350M 初始化,並在多種編程語言的數據集上進一步預訓練,“350M” 指可訓練參數的數量。
- 該模型在Hugging Face上的bigcode/the-stack數據集中的HTML代碼上進行了微調。
📚 詳細文檔
模型描述
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 350M基礎上微調得到的,“Multi” 表示模型用 CodeGen-NL 350M 初始化,並在多種編程語言的數據集上進一步預訓練,“350M” 指可訓練參數的數量。
它在Hugging Face上的bigcode/the-stack數據集中的HTML代碼上進行了微調。
訓練數據
此檢查點(CodeGen-Multi 350M)首先用 CodeGen-NL 350M 初始化,然後在 BigQuery 上進行預訓練,這是一個來自GitHub倉庫的大規模多編程語言數據集。數據包含1192億個標記,包括C、C++、Go、Java、JavaScript和Python。
最後,它在Hugging Face上的 bigcode/the-stack 數據集中的HTML代碼上進行了微調。
訓練過程
初始訓練
CodeGen使用交叉熵損失進行訓練,以最大化順序輸入的可能性。
該模型家族由Google使用多個TPU - v4 - 512進行訓練,利用了數據和模型並行性。
更多詳細信息請參閱 論文 的第2.3節。
微調
我在單個40GB RAM的A100上對350M模型進行了微調,批量大小為10,輸入長度為512個標記,使用了80 - 90%的RAM。
預期用途和侷限性
作為一個自迴歸語言模型,CodeGen能夠從給定的自然語言和編程語言文本中提取特徵,並計算它們的可能性。
然而,該模型旨在並最擅長程序合成,即根據英文提示生成可執行代碼,提示應採用註釋字符串的形式。該模型也可以完成部分生成的代碼。
🔧 技術細節
CodeGen最初使用交叉熵損失進行訓練,以最大化順序輸入的可能性。模型家族由Google使用多個TPU - v4 - 512進行訓練,利用了數據和模型並行性。在微調階段,350M模型在單個40GB RAM的A100上進行微調,批量大小為10,輸入長度為512個標記,使用了80 - 90%的RAM。
📄 許可證
本項目採用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}
}