模型:
flax-community/gpt-neo-125M-code-clippy
请参阅我们的 新文档,详细记录了我们在创建GitHub Copilot开源版本方面的努力
GPT-Neo-125M-Code-Clippy是一个在我们的Code Clippy Data数据集上使用因果语言建模进行微调的模型,该数据集包含了来自公共GitHub存储库的重复内容(更多信息请参阅提供的链接)。此模型专门用于自动完成多种编程语言中的方法。如OpenAI的 Codex paper 所讨论的那样,我们修改了GPT-Neo模型和分词器,以适应额外的空格字符。具体来说,我们添加了以下标记 ["\t\t", " ", " ", " "],由于它们都与缩进有关系,我们使用与模型中已存在的\t标记相同的权重来初始化这些标记的嵌入层,希望模型能够更快地将这些空格字符与缩进关联起来。可通过 here 找到自动完成此操作的脚本。
训练此模型所使用的训练脚本可以在 here 处找到。
要重现训练过程,可以使用上述脚本执行以下命令:
./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
 该模型是在来自GitHub存储库的文本文件上进行微调的(主要是编程语言,但也包括标记和其他项目相关文件)。
您可以通过文本生成管道直接使用此模型。以下示例每次运行时生成一个不同的序列:
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:]))
 该模型旨在用于研究目的,不对生成的代码质量提供任何保证。
OpenAI的 "Evaluating Large Language Models Trained on Code" 论文对训练于代码的大型语言模型可能产生的影响进行了良好的讨论。因此,下面突出了论文的一些讨论,特别是与该数据集和可能从中训练的模型相关的法律影响的不同观点。
GPT-Neo-125M-Code-Clippy是从GPT-Neo进行微调的,可能会继承其存在的偏见和限制。有关详细信息,请参见 GPT-Neo model card 。
即将推出...