Advertisement

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

阅读量:

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

  • 1. 文章概述
    • 2. 文章综述

    • 3 关键技术分析

      • 3.1 评估分析
      • 模型训练采用Codex方案
      • 微调优化采用Codex-S策略
      • 微调优化采用Codex-D策略
    • 4. 文章亮点

    • 5. 原文传送门

    • 6. References

1. 文章简介

  • 标题:Assessing the Performance of Large Language Models Trained on Code
    • 作者:Chen et al., along with Mark
    • Date: 2021
    • Journal: arxiv preprint submission

2. 文章概括

现有的GPT系列语言模型在自然语言上的应用取得了较为显著的效果;然而实验结果表明,在代码生成方面这些模型的能力仍有较大提升空间。本研究提出了一种新的架构方案,并构建了三个先进的大型语言模型——Codex、Codex-S以及Codex-D;这些模型不仅能够高效处理复杂编程语法,并且能在多种实际应用场景中展现出卓越的能力——其性能明显超越了现有的主流开源大语言模型(如GPT-3)[1]。

3 文章重点技术

3.1 评估

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

HumanEval

在评估阶段中,只需构建一个同时包含header部分、签名部分以及文档字符串的prompt即可完成上述问题的转化。

3.2 模型训练–Codex

该研究采用GPT-3开源代码作为基础模型,并通过特定方法对其进行微调以获得最终版本代码。尽管该微调策略未能显著提升模型性能,在多数情况下仍能维持现有水平优势。研究团队从GitHub平台获取了包含54,000万个公共代码仓库的数据集资源,并筛选出约179GB的相关Python项目文件资源。其中约179GB的文件资源来自大小不超过1MB的Python项目代码。为了确保训练数据质量的研究团队排除了自动生成、行数超过100或内容过于简短(仅含少量字符和数字)的所有项目文件。经过微调优化后得到Codex系列新版本模型(其中最高性能版本为Codex-12B)。

在评估阶段中我们每次生成k个样例然后统计其中通过单元测试的比例达到pass@k指标在此基础上选择具有最高平均token log-proba值的答案作为最终输出选项在实际应用中我们则采用相同的方式进行输出选择以最大化系统效能。

exp-Codex

3.3 微调模型–Codex-S

研究发现,在GitHub平台上存在大量代码样本中包含过多类定义及注释内容。为此,在现有数据基础上筛选出高质量的代码样本,并基于此构建了新的训练数据集。通过将这些样本输入到Codex-12B模型中进行推理生成每个问题会生成100个候选解决方案。如果所有候选方案都无法通过后续的验证测试,则将这类问题从最终的数据集中剔除。接着,在经过筛选后的高质量代码样本基础上对Codex模型进行了进一步的微调优化。在prompt输入中设置了特定的位置掩码位置,并计算了候选方案与参考答案之间的负对数似然值作为评价指标。经过实验对比分析发现,在开发效率等多维度指标上均有显著提升的基础上量化评估结果显示 Codex-S在性能指标上优于原始版本的Codex

exp-Codex-S

3.4 微调模型–Codex-D

在另一部分中,文章探讨了从代码生成文本说明这一逆向过程.与上一小节中的微调方法相似,在这里我们调整训练目标为"隐藏编码(包括signature(header, body))的部分",并以最小化docstring(即解释性的说明)的负对数似然为目标.这样得到的新模型被命名为Codex-D.

4. 文章亮点

该文章介绍了名为 Codex、Codex-S 以及 Codex-D 的代码大型语言模型。这些代码大语言模型旨在为开发者提供便利,并尤其针对新手用户而言提供自动编码功能。然而该研究指出,在现有技术条件下,在某些特定场景下现有技术仍存在明显不足与缺陷(这些问题表现为虽然具备某种能力但无法得到明确的回答)。此外这些模型在潜在应用中可能涉及敏感话题的风险因此需要通过适当的指令微调手段进行风险管理

5. 原文传送门

评估经过代码训练的大型语言模型
HumanEval官方评估数据集

6. References

本文深入研究了语言模型作为零样本学习工具的可能性。Zero-shot learning涉及能够基于少量实例进行学习的知识模型。该方法通过训练数据有限但表现良好的模型特性实现了对新数据的学习能力提升。这使得语言模型特别适合在标注数据稀缺的情况下表现出色。参考文献:[1] 论文笔记–Language Models are Few-Shot Learners

全部评论 (0)

还没有任何评论哟~