自动代码Copilot背后的模型

发布时间:2023-05-12 10:17:08

  文章目录 1.引入 2.评估框架 3.评估数据集 4.模型方法 5.实验结果 6.总结 7.参考

  之前介绍过Github发布的自动代码Copilot的使用方法。有兴趣可以看这篇文章:Copilot要收费吗?

  今天主要介绍github 主要用于copilot的代码生成框架Codex。主要由Github和OpenAI联合开发的模型框架,具体链接如下:

  https://openai.com/blog/openai-codex/?utm_campaign=Connect%20the%20dotss&utm_medium=email&utm_source=Revue%20newsletter1.引入

  Codex主要使用GPT-3模型。为了评估模型的有效性,研究人员还设置了评估数据集:HumanEval。GPT-3模型在此评估数据集下无法解决任何问题,GPT-J模型能解决11.4%的问题,而Codex模型能解决28.8%的问题。

  同时,在模型中重复采样是一种有效的策略,可以多次为模型提供工作解决方案。这种方法可以解决70.2%的问题。2.评估框架

  代码的生成模型主要通过匹配样本和参考解来进行基准测试。匹配可以是准确的或模糊的(如BLEU分数)。然而,最近的工作暴露了基于匹配代码测量的缺陷。由此可见,BLUE是一个模糊的匹配过程,只要意思正确,BLUE的分数就会提高。但编程是一个特殊的问题,一个小的差异可能会带来灾难性的影响。

自动代码Copilot背后的模型_深度学习

因此,论文提出了自己的测量标准,表示从每个问题生成的代码样本中选择的答案。在论文中,生成同时计算代码样例一个代码可以通过单元测试:

自动代码Copilot背后的模型_机器学习_05

3.评估数据集

  评估数据集在论文中新建,称为Humaneval,数据地址如下:

  https://github.com/openai/human-eval

自动代码Copilot背后的模型_机器学习_06

  它包含164个手写编程问题,数据集中包含“评估语言理解”、“推理”、“算法”和“简单数学”如下图所示:

自动代码Copilot背后的模型_人工智能_07

  每个问题包括: 签名 代码功能分析 主体

  这些编程问题都是手写的,因为模型在训练过程中使用了大量的Github仓库代码,所以可能会包含很多答案,所以需要重新手写编程问题。4.模型方法 数据集

  2020年5月,从GitHub托管的5400万个公共软件库中收集训练数据,其中包括179 GB独特的Python文件。删除可能自动生成的平均行长度大于100、最大行长大于1000或包含少量字母数字符的代码文件。过滤后,最终数据集总共为159GB 方法

  由于Codex是根据自然语言提示进行评估的,Codex直接使用GPT-3模型进行训练。

  为了最大限度地利用GPT中的文本表示,基于GPT-3的文本分词器用于论文。由于GitHub代码中单词的分布与自然文本的分布不同,标记器在切割代码时不是很有效。低效率的最大来源是编码空间,因此论文添加了一组额外的标记来表示不同长度的空间。这种做法可以减少约30%的标记。

  同时,在生成代码时,遇到“\”nclass”, “\ndef”,“\n#”,"\nif”,“\nprint当时,停下来。5.实验结果

  模型参数与损失值之间的成指数关系:模型指数上升,损失线性下降:

自动代码Copilot背后的模型_数据集_08

  计算softmax时,除了一个T。T越大,候选词的概率值就越接近。T越小,候选词的概率值就越远。当生成的代码例子提取K时,K的数量越大,T就会相应地变大。另一方面,如果最近提取了一个例子,这个例子应该是最具代码性和最大概率值的代码例子。

自动代码Copilot背后的模型_人工智能_09

  为了验证BLUE的评估标准是否有效,论文在评估集中给出了正确和错误代码的BLUE分数。可以发现,正确代码与错误代码的BLUE分数差异不大,表明BLUE分数在代码生成中没有评估效果。

自动代码Copilot背后的模型_数据集_10

6.总结

总的来说,Codex本质上使用GPT-3模型作为预训练模型,然后进行微调。164个编程问题也被手动定义为评估数据集。同时,还提出了新的评估指标,并论证了BLUE指标对代码生成的局限性。 从数据层面来看,由于Github上的代码采集,可能存在代码作者追究专利的潜在问题。

上一篇 Spring与Struts的整合_使用ActionSupport代替Action
下一篇 百度地图开发示例:位置标注,标注点弹框

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题