🚀 GPT-Neo-125M-Code-Clippy
GPT-Neo-125M-Code-Clippy是一個專門用於多編程語言方法自動補全的模型。它基於GPT-Neo-125M模型微調而來,能為開發者在代碼編寫過程中提供高效的輔助。
🚀 快速開始
請參考我們新的 GitHub Wiki,其中詳細記錄了我們創建GitHub Copilot開源版本的工作。
✨ 主要特性
GPT-Neo-125M-Code-Clippy是基於 GPT-Neo-125M模型 進行微調的。它使用因果語言建模,在包含重複項的Code Clippy Data數據集上進行訓練,該數據集是從公共GitHub倉庫中抓取的(更多信息見提供的鏈接)。此模型專門用於對多種編程語言的方法進行自動補全。
如OpenAI的 Codex論文 中所討論的,我們對GPT-Neo模型和分詞器進行了修改,以適應額外的空白字符。具體來說,我們添加了以下標記 ["\t\t", " ", " ", " "]
,由於它們都與縮進相關,我們用與模型中已有的 \t
標記相同的權重初始化這些標記的嵌入層,希望模型能更快地學會將這些空白字符與縮進關聯起來。自動執行此操作的腳本可在 此處 找到。
📦 安裝指南
訓練過程
用於訓練此模型的訓練腳本可在 此處 找到。
要重現訓練過程,可以使用以下命令結合上述腳本:
./run_clm_streaming_flax.py \
--output_dir $HOME/gpt-neo-125M-code-clippy \
--model_name_or_path="flax-community/gpt-neo-125M-code-clippy" \
--dataset_name $HOME/gpt-code-clippy/data_processing/code_clippy.py \
--data_dir /home/shared/code_clippy_data \
--text_column_name="text" \
--do_train --do_eval \
--block_size="2048" \
--per_device_train_batch_size="8" \
--per_device_eval_batch_size="16" \
--preprocessing_num_workers="8" \
--learning_rate="1e-4" \
--max_steps 100000 \
--warmup_steps 2500 \
--decay_steps 25000 \
--adam_beta1="0.9" \
--adam_beta2="0.95" \
--weight_decay="0.1" \
--overwrite_output_dir \
--logging_steps="100" \
--eval_steps="500" \
--push_to_hub="False" \
--report_to="all" \
--dtype="bfloat16" \
--skip_memory_metrics="True" \
--save_steps="500" \
--save_total_limit 10 \
--gradient_accumulation_steps 16 \
--report_to="wandb" \
--run_name="125m_1e-4lr_1024bs" \
--max_eval_samples 2000 \
--save_optimizer true
💻 使用示例
基礎用法
你可以直接使用此模型進行文本生成。以下示例每次運行時都會生成不同的序列:
from transformers import AutoModelForCausalLM, AutoTokenizer, FlaxAutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("flax-community/gpt-neo-125M-code-clippy")
tokenizer = AutoTokenizer.from_pretrained("flax-community/gpt-neo-125M-code-clippy")
prompt = """def greet(name):
'''A function to greet user. Given a user name it should say hello'''
"""
input_ids = tokenizer(prompt, return_tensors='pt').input_ids.to(device)
start = input_ids.size(1)
out = model.generate(input_ids, do_sample=True, max_length=50, num_beams=2,
early_stopping=True, eos_token_id=tokenizer.eos_token_id, )
print(tokenizer.decode(out[0][start:]))
📚 詳細文檔
預期用途和限制
該模型是在GitHub倉庫的文本文件(主要是編程語言文件,但也包括Markdown和其他項目相關文件)上進行微調的。
限制和偏差
此模型僅用於研究目的,不保證生成代碼的質量。
OpenAI的論文 "Evaluating Large Language Models Trained on Code" 對在代碼上訓練的大語言模型的影響進行了很好的討論。因此,這裡突出了他們討論中與該數據集和可能從該數據集訓練的模型相關的部分。以及與論文觀點的一些差異,特別是在法律影響方面。
- 過度依賴:此模型可能會生成看似合理但不一定正確的解決方案。如果不恰當地評估生成的代碼,可能會導致負面後果,例如引入錯誤或安全漏洞。因此,用戶必須瞭解使用此語言模型的侷限性和潛在的負面後果。
- 經濟和勞動力市場影響:在如此大規模代碼數據集上訓練的、能夠生成高質量代碼的大語言模型,有可能自動化部分軟件開發過程。這可能會對軟件開發人員產生負面影響。然而,正如論文中所討論的,根據 O*NET OnLine 的軟件開發人員總結報告所示,開發人員不僅僅是編寫軟件。
- 安全影響:在訓練此模型的數據集上,沒有對漏洞或有缺陷的代碼進行過濾或檢查。這意味著數據集可能包含惡意代碼或存在漏洞的代碼。因此,此模型可能會生成有漏洞、有缺陷或惡意的代碼。在安全關鍵型軟件中,這可能導致軟件運行不正常,並可能根據軟件的不同導致嚴重後果。此外,此模型可能會被用於故意生成惡意代碼,以進行勒索軟件或其他此類攻擊。
- 法律影響:沒有對許可代碼進行過濾。這意味著數據集可能包含受限制許可的代碼。正如論文中所討論的,公共GitHub倉庫可能屬於“合理使用”。然而,此前幾乎沒有此類使用許可的公開可用代碼的案例。因此,使用此模型生成的任何代碼可能需要遵守與訓練它的軟件一致的許可條款,例如GPL - 3.0。目前尚不清楚使用在此數據集上訓練的語言模型的法律後果。
- 偏差:此模型訓練數據集裡最具代表性的編程語言是Javascript和Python。因此,其他仍然流行的語言,如C和C++,代表性較低,因此該模型在這些語言上的性能相對較差。此外,此數據集僅包含公共倉庫,因此模型可能無法生成代表私人開發者編寫的代碼。沒有對潛在的種族主義、冒犯性或其他不適當內容進行過濾。因此,此模型在生成代碼時可能會反映出此類偏差。
GPT-Neo-125M-Code-Clippy是從GPT-Neo微調而來的,可能繼承了它的偏差和限制。詳情請參閱 GPT-Neo模型卡片。
評估結果
即將推出...
📄 許可證
文檔未提及相關內容,故跳過該章節。
🔧 技術細節
訓練數據
Code Clippy Data數據集。
模型修改
對GPT-Neo模型和分詞器進行了修改,以適應額外的空白字符。添加了 ["\t\t", " ", " ", " "]
標記,並使用與 \t
標記相同的權重初始化其嵌入層。自動執行此操作的腳本可在 此處 找到。
訓練腳本
訓練腳本可在 此處 找到。通過特定命令可重現訓練過程,命令示例見上文“安裝指南”部分。