模型:

flax-community/gpt-neo-1.3B-apps-all

英文

GPT-Neo-1.3B-APPS-all

请参考我们的新文档,详细介绍了我们创建GitHub Copilot开源版本的努力

模型描述

GPT-Neo-1.3B-APPS-all是在APPS数据集上微调的GPT-Neo-1.3B模型。该模型专门用于解决编程任务。

训练数据

该模型是在 Automated Programming Progress Standard (APPS) dataset 上训练的。数据集总共包含10,000个编程问题,其中包括131,836个用于检查解决方案的测试用例和232,444个由人类编写的正确解决方案。问题可能比较复杂,因为平均问题长度为293.2个单词。数据被均匀分为训练集和测试集,每个集合包含5,000个问题。

该模型使用包括训练集和测试集在内的大部分APPS数据集进行微调,以探索该训练任务对模型在其他代码综合评估指标上的影响。只在训练集上进行微调的模型可以在 here 上找到。

训练过程

用于训练该模型的训练脚本可以在 here 找到。

使用AdamW优化器和线性衰减学习率计划以800个预热步骤,在5个时期内进行训练。要复现训练过程,可以使用上述脚本中的以下命令:

python run_clm_apps.py \
    --output_dir ./gpt-neo-1.3B-apps \
    --model_name_or_path EleutherAI/gpt-neo-1.3B \
    --dataset_name ./apps.py \
    --dataset_config_name formatted \
    --do_train --do_eval \
    --block_size="1024" \
    --per_device_train_batch_size="3" \
    --per_device_eval_batch_size="3" \
    --preprocessing_num_workers="16" \
    --learning_rate="8e-5" \
    --warmup_steps="800" \
    --adam_beta1="0.9" \
    --adam_beta2="0.98" \
    --weight_decay="0.1" \
    --overwrite_output_dir \
    --num_train_epochs="5" \
    --logging_steps="50" \
    --eval_steps="2000" \
    --report_to="wandb" \
    --dtype="bfloat16" \
    --save_strategy epoch \
    --gradient_accumulation_steps 1 \
    --all_data true \

预期用途和限制

该模型微调用于在给定文本描述和可选的起始代码的情况下解决编程问题。

如何使用

您可以直接使用文本生成的流程使用此模型。下面的示例每次运行时都会生成不同的序列:

from transformers import AutoModelForCausalLM, AutoTokenizer, FlaxAutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("flax-community/gpt-code-clippy-1.3B-apps-alldata")

tokenizer = AutoTokenizer.from_pretrained("flax-community/gpt-code-clippy-1.3B-apps-alldata")

prompt = """

A function to greet user. Given a user name it should say hello

def greet(name):

ANSWER:

""" 

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" 对训练代码的大型语言模型可能带来的影响进行了良好的讨论。因此,这里重点强调一些他们讨论的部分,特别是与这个数据集和可能从中训练的模型相关的法律问题。

  • 过度依赖:该模型可能生成似乎正确但实际上不是正确解决方案的可行解决方案。不适当地评估生成的代码可能会导致负面后果,如引入错误或安全漏洞。因此,用户需意识到使用这种语言模型的限制和潜在负面后果的重要性。

  • 经济和劳动力市场影响:在大型代码数据集上训练的大型语言模型(如本模型)能够生成高质量代码,有可能自动化部分软件开发流程。这可能对软件开发人员产生负面影响。然而,正如论文中所讨论的,来自 O*NET OnLine 的软件开发者的总结报告显示开发人员不仅仅是编写软件。

  • 偏见:该模型是在包含以特定方式格式化的提示问题的数据上进行训练的。如果提示的格式与APPS数据集中使用的格式不同,模型的性能可能较差。

  • GPT-CC是对GPT-Neo进行微调,可能继承了一些它的偏见和限制。详细信息请参阅 GPT-Neo model card

    评估结果

    即将到来...