论文笔记--Evaluating Large Language Models Trained on Code

论文笔记--Evaluating Large Language Models Trained on Code

  • 1. 文章简介
  • 2. 文章概括
  • 3 文章重点技术
    • 3.1 评估
    • 3.2 模型训练--Codex
    • 3.3 微调模型--Codex-S
    • 3.4 微调模型--Codex-D
  • 4. 文章亮点
  • 5. 原文传送门
  • 6. References

1. 文章简介

  • 标题:Evaluating Large Language Models Trained on Code
  • 作者:Chen, Mark, et al.
  • 日期:2021
  • 期刊:arxiv preprint

2. 文章概括

  现存的GPT系列语言模型在自然语言中取得了不俗的表现,但实验表明其在代码方面的生成能力十分有限。本文提出了Codex,Codex-S和Codex-D三个大语言模型,在多个代码生成任务上表现远超GPT-3[1]。

3 文章重点技术

3.1 评估

  评估代码性能的方法大致分为两种:基于匹配的方法和函数正确率方法。比如BLEU就是一种基于匹配的方法,但文章数值实验证明,BLEU不能总是捕捉到函数的功能正确:分数很高的代码可能不正确。为此文章选择用函数正确率方法
  一种常用的评估函数正确率的指标叫pass@k指标,即模型随机生成k个回答(代码块),通过unit test(单元测试)的回答个数。但这样计算的指标方差很高,故文章每次生成 n ≥ k n\ge k nk个回答,其中通过测试的回答个数为 c c c,我们计算 p a s s @ k = E p r o b l e m [ 1 − ( n − c k ) ( n k ) ] pass@k = \mathbb{E}_{problem} \left[1 - \frac {\binom {n-c}k}{\binom nk}\right] pass@k=Eproblem[1(kn)(knc)]
  为了自动评估代码性能,文章手动构建了164个手写的编程问题,称为HumanEval数据集。每个问题都包含一个签名(返回)、说明、主题和几个单元测试。文章选择手动构建的原因是不希望训练语料库中包含HumanEval中的问题。
  下面给出了HumanEval中的三个问题示例,全部数据可在网址https://www.github.com/openai/human-eval 查看使用。
论文笔记--Evaluating Large Language Models Trained on Code_第1张图片
  评估时,只需要将上述问题转化成一个包含header、signature、docstring的prompt即可。

3.2 模型训练–Codex

  文章选择从GPT-3上微调得到代码模型,这样做虽然没有显著提升模型表现,但是加快了模型的收敛。文章从Github中收集了54million的公共库,包含1MB以下的Python文件共计179GB。为了保证训练集的质量,文章过滤了自动生成的文件、平均行数大于100的文件或仅包含一小部分字符数字的文件,过滤后的文件总计159GB。微调后的模型记作Codex模型(其中最大的模型为Codex-12B)。
  自动评估阶段,我们每次生成k个样例,然后评估其中通过单元测试的样例个数,得到pass@k;实际应用时,我们每次生成k个样例,选择其中mean token log-proba最大的输出即可。
  实验表明,Codex系列模型效果远超GPT-3。300M以上的Codex模型效果已经优于GPT-J 6B:
论文笔记--Evaluating Large Language Models Trained on Code_第2张图片

3.3 微调模型–Codex-S

  文章发现Github上很多代码包含很多类、说明等,会造成数据集不纯粹。为此,我们构建了一个训练数据集并使用它对Codex模型进行微调。
  训练数据集来自编程竞赛、面试准备网站和PyPI中的持续集成问题。为了过滤其中模糊的、太复杂的问题,我们首先用Codex-12B对上述问题进行回答,每个问题生成100个答案,如果没有一个答案通过单元测试,则认为该问题太难或太模糊,将其从微调数据集中移除。
  最后我们在上述数据集上微调Codex模型:将上述问题转化成标准代码格式,将prompt中的token掩码,最小化参考答案的负对数似然。
  评估结果显示Codex-S的性能超过Codex,且Codex-S的pass@1,即通过最大似然筛选出来的单个样例准确率高于Codex的pass@100。
论文笔记--Evaluating Large Language Models Trained on Code_第3张图片

3.4 微调模型–Codex-D

  另一方面,文章探索了从代码生成文本说明的反向过程。类似上一节中的微调方法,我们修改训练目标为“掩码代码(包括signature、header、body)部分,最小化说明(docstring)的负对数似然。得到的模型称为Codex-D。

4. 文章亮点

  文章给出了代码大语言模型Codex,Codex-S和Codex-D,可帮助开发者,尤其是初学者自动生成代码。但文章论证了Codex系列模型的局限性,现有模型还存在一些不正确的结论和misalianment(即模型有这个能力但是没回答)现象,同时模型可能存在一些敏感话题风险,后续可通过指令微调进行控制。

5. 原文传送门

Evaluating Large Language Models Trained on Code
HumanEval数据集

6. References

[1] 论文笔记–Language Models are Few-Shot Learners

你可能感兴趣的:(论文阅读,论文阅读,语言模型,Codex,gpt,github)