Codex: 使用GPT-3完成代码自动生成任务

供稿:hz-xin.com     日期:2025-01-16
在评估大型语言模型时,我们发现这些模型能够生成代码以解决编程问题。评估主要通过使用评估指标如pass@k来衡量模型性能。pass@k是一种指标,它要求模型生成的候选答案中只要有一个是正确的就认为答案通过。这种指标在代码补全任务中尤为适用,因为代码中的细微差别可能导致严重的后果。

评估数据集选择的是HumanEval,这是一个由人工设计的编程问题集合,包括函数名、注释、函数体和多个单元测试。通过这个数据集,作者收集了大量的代码实例,用于训练模型。

使用来自GitHub的179GB Python代码数据集,作者在GPT-3预训练模型上进行了进一步训练,生成了Codex模型。为了增强模型对代码补全任务的适应性,作者还收集了一个与HumanEval更相似的数据集,训练了Codex-S模型。实验结果显示,无论是基于预训练模型训练还是从头开始训练,模型的性能差异不大,但在预训练模型上的训练速度更快。

在评估模型时,作者采用了p=0.95的核采样方法,以确保在生成的候选答案中选取的有足够概率覆盖最佳答案。此外,作者在HumanEval的四个随机任务上使用BLUE score对Codex模型进行了评估,发现BLUE score并不能准确反映模型的正确性,因为它只考虑了答案的相似性,并没有考虑到答案的实际正确性。

与Codex性能对比的模型包括GPT-NEO、GPT-J和Tabnine。实验结果显示,Codex在代码生成任务上的表现优于这些模型。

为了拓展Codex的应用范围,作者还探索了生成文档(Codex-D)的方法,通过调整数据集中的文档字符串(docstrings)位置来训练模型。这种方法可以生成合格的文档字符串,提高代码的可读性和可维护性。

总结起来,Codex模型通过在大量代码数据上进行训练,成功地解决了代码生成任务,并通过进一步的优化和数据集调整增强了模型在特定任务上的性能。尽管在模型创新方面可能不是特别突出,但Codex在代码生成领域的贡献是显著的,为后续研究提供了有价值的基础。