大模型测评常用benchmark对应原始论文介绍(三)——代码能力

Code

HumanEval


1. 研究背景
  • 随着大型语言模型在自然语言处理中的成功,研究者开始探索将其应用于代码生成。
  • 传统的代码生成面临挑战,如代码的功能正确性和复杂任务的推理需求。
  • 本研究开发了Codex模型,并设计了一个新的测试集HumanEval,用于评估模型从自然语言生成代码的能力。

2. Codex模型的特点
  1. 训练数据
    • 使用来自GitHub的公开代码库训练,包含179 GB的Python代码。
    • 数据经过筛选,剔除了自动生成文件、超长行代码和低质量文件。
  2. 评估目标
    • 模型需根据注释生成正确的Python函数。
    • 使用单元测试(unit tests)验证生成代码的功能正确性,而非仅匹配参考解答。
  3. 模型优化
    • 在GPT-3基础上微调以提升代码生成能力。
    • 采用高温和多样化采样策略生成多种代码解答。

3. HumanEval数据集
  1. 数据集内容
    • 包含164道手写编程问题,每个问题包含函数签名、自然语言描述(docstring)、完整函数体和单元测试。
    • 问题涵盖算法、数学运算和语言理解任务。
  2. 评估指标
    • 使用pass@k指标评估模型生成代码的功能正确性:
      • pass@1:单次生成的正确率。
      • pass@k:从k个生成样本中至少有一个通过测试的概率。

4. 实验结果
  1. 模型性能
    • Codex在HumanEval上的pass@1表现显著优于未训练于代码任务的GPT模型:
      • Codex-12B的pass@1为28.8%,而GPT-3为0%。
  2. 多样化生成的效果
    • 对每个问题生成100个样本,Codex能在77.5%的问题上找到至少一个通过测试的代码。
  3. 与其他模型比较
    • Codex在pass@k上的表现优于GPT-Neo和TabNine等其他代码生成模型。

5. 模型的局限性
  1. 功能性错误
    • Codex有时生成表面上正确但功能错误的代码。
    • 对长链式操作描述(如复杂任务注释)或变量绑定可能失败。
  2. 训练数据的依赖
    • 由于训练数据来自GitHub,模型可能对特定的编程风格或库存在偏差。
  3. 效率问题
    • Codex的生成方法需要大量样本以提高正确率,可能不适合实时或高效部署。

6. 社会和技术影响
  1. 潜在用途
    • 提高程序员生产力,支持代码自动补全。
    • 为非程序员提供代码生成工具,降低编程门槛。
  2. 潜在风险
    • 可能生成不安全或偏差代码,导致安全问题。
    • 在某些情况下,过于依赖生成代码可能引发对AI工具的过度信任。

7. 未来研究方向
  • 优化模型以减少功能错误。
  • 扩展模型以支持更多编程语言和复杂任务。
  • 研究如何更高效地生成高质量代码以适应实际应用。

HumanEval+

文章提出了一种名为EvalPlus的框架,用于评估由大型语言模型(LLMs)生成代码的功能正确性。研究的重点是现有基准(HUMANEVAL)在测试充分性上的不足,以及EvalPlus在生成高质量测试用例以捕获更多错误代码上的改进能力。


1. 研究背景与动机
  • 编程任务的复杂性:代码生成是LLMs的重要应用场景,但现有的测试方法难以捕捉生成代码中的潜在错误。
  • HUMANEVAL的局限性:每个任务仅包含少量测试用例(平均不到10个),不足以捕捉边界情况。自然语言描述模糊,可能导致模型对任务目标的错误解释。
2. EvalPlus框架
  1. 核心方法
  • 自动测试用例生成:使用ChatGPT生成高质量的种子测试输入,涵盖复杂和边界情况。基于种子测试用例,应用类型感知(type-aware)的变异方法生成大规模测试用例。
  • 差分测试:通过对比生成代码与基准代码的输出,检测潜在错误。
  • 测试用例优化:利用集合覆盖算法减少测试用例数量,同时保留测试效果。
  1. HUMANEVAL+ 数据集
  • EvalPlus将原始HUMANEVAL扩展了80倍,生成了HUMANEVAL+
  • 添加了更全面的测试用例,覆盖边界情况并修正了原始数据集中的逻辑错误。
3. 实验结果
  1. 测试准确性提升
  • 在EvalPlus改进的测试集上,LLMs的功能正确性(pass@k)下降了19%-28%,表明原有测试不足以捕捉错误。
  • 示例:ChatGPT在HUMANEVAL上的pass@1为73.2%,而在HUMANEVAL+上仅为63.4%。
  1. 模型排名变化
  • 在原始HUMANEVAL中表现较差的模型(如WizardCoder-CodeLlama),在HUMANEVAL+上超过了ChatGPT。
  1. 发现新的缺陷
  • 原始HUMANEVAL中有11%的任务存在不正确的参考解答,EvalPlus通过自动生成测试用例发现并修复了这些缺陷。
4. EvalPlus的贡献
  1. 增强评估标准
  • EvalPlus通过生成更多测试用例,显著提高了LLMs评估的准确性。
  1. 数据集扩展
  • HUMANEVAL+提供了更全面的测试基准,可用于未来的代码生成研究。
  1. 测试用例优化
  • HUMANEVAL±MINI仅使用原测试数量的1/47,却达到了类似的测试效果。
5. 未来方向
  • 扩展EvalPlus至更多编程语言和实际场景。
  • 研究如何结合正式验证方法提升测试的覆盖率和准确性。
  • 将EvalPlus集成至代码生成工具(如Copilot)以实时提醒潜在错误。

MBPP

作者提出并评估了两个新的基准数据集,并探讨了模型在不同规模、提示和微调设置下的性能。


1. 研究背景

程序合成是人工智能领域的重要任务,旨在通过自然语言描述生成符合功能要求的代码。传统的程序合成多基于有限的领域特定语言(DSL),而这项研究探索了LLMs在通用编程语言中的潜力。

目标

  • 评估LLMs能否从自然语言描述中生成短程序。
  • 探讨模型规模和微调对程序合成性能的影响。
  • 研究模型与人类交互提升代码质量的潜力。

2. 数据集介绍
  1. MBPP(Mostly Basic Programming Problems)
    • 包含974道编程问题,适合初级程序员解决。
    • 每个问题包括自然语言描述、目标Python函数和三个测试用例。
    • 数据集中426道问题经过人工验证以确保准确性。
  2. MathQA-Python
    • 基于MathQA数据集改编,包含23914道数学问题及其Python实现。
    • 问题更复杂,侧重自然语言描述转化为代码。

3. 实验与结果
  1. Few-shot学习
    • 在MBPP上,使用提示的最大模型(137B参数)能正确解决59.6%的问题。
    • MathQA-Python的Few-shot准确率为33.4%。
  2. 微调的效果
    • 在MBPP上微调后,性能提高约10个百分点,达到69.6%。
    • 在MathQA-Python上,微调后准确率提高到83.8%。
  3. 模型规模的影响
    • 合成性能与模型规模呈对数线性关系增长。
    • 更大的模型对复杂任务具有显著优势。
  4. 错误分析
    • 错误类型包括语法错误、运行时错误和功能性错误。
    • 随着模型规模增大,语法和运行时错误显著减少,但功能性错误仍占大多数。

4. 模型与人类交互
  1. 对话增强
    • 在少样本学习中,加入人类反馈(如自然语言提示)能显著提高性能。
    • 准确率从无反馈时的30%提升至有反馈时的65%。
  2. 示例案例
    • 模型生成初始代码,人类通过对话指出错误并提供改进建议。
    • 示例表明模型能通过人类提示修正错误,但多轮对话可能导致模型失去上下文。

5. 主要贡献
  1. 基准数据集:提出MBPP和MathQA-Python,为程序合成研究提供了新的评估标准。
  2. 模型性能分析:展示了模型规模、提示设计和微调对代码生成性能的显著影响。
  3. 人机协作探索:表明模型通过人类反馈可以显著改善代码质量。

6. 局限性与未来方向
  1. 测试覆盖不足:部分测试用例未能覆盖所有边界情况,可能高估性能。
  2. 复杂任务不足:MBPP任务较为基础,未来可扩展至更复杂的实际编程场景。
  3. 模型局限:模型对多步推理任务仍存在挑战,需进一步提升逻辑推理能力。

MultiPL-E

文章提出了一个名为MultiPL-E的框架,专注于多编程语言代码生成模型的评估,探索了如何将现有的Python代码生成基准扩展到其他18种编程语言,从而创建了首个大规模并行多语言代码生成基准。


1. 研究背景
  • 现有代码生成研究主要集中在单一编程语言(如Python),缺乏对多语言环境中性能的全面了解。
  • MultiPL-E框架的目标是研究多语言代码生成模型的能力,并评估模型如何从一种语言的知识中泛化到其他语言。

2. MultiPL-E框架的核心内容
  1. 目标

    • 提供一个通用框架,将现有的代码生成基准从Python翻译到多种编程语言。
    • 通过翻译单元测试和Python特定术语来实现跨语言的并行代码生成评估。
  2. 支持的编程语言

    • 包括18种语言,如C++、JavaScript、Rust、TypeScript等,涵盖了多种编程范式和语言特性。
    • 语言被分为高频(如Python、Java)、中频(如Go、PHP)和低频(如Lua、Bash)类别。
  3. 方法

    • 使用一组“轻量编译器”将Python基准翻译为其他语言。
    • 通过单元测试来验证代码生成的正确性,确保评估的一致性和可复现性。
  4. 数据集扩展

    扩展了两个著名的Python基准数据集:

    • HumanEval:包含164个测试问题,用于检查函数输出的正确性。
    • MBPP(Mostly Basic Programming Problems):以简单编程任务为主,适合初学者。

3. 实验结果
  1. 模型表现
    • 测试了Codex、CodeGen和InCoder三种先进的代码生成模型。
    • Codex在某些语言(如JavaScript、TypeScript)上的表现超过了Python,表明模型在多语言环境中的潜在能力。
    • CodeGen在其微调数据集中包含的语言(如Python、JavaScript)上表现优异。
    • InCoder在低频语言上的表现相对较弱。
  2. 语言频率与模型表现
    • 模型在高频语言上的表现普遍优于低频语言,但Codex在一些低频语言(如Lua)上的表现出人意料地好。
    • 语言特性(如静态类型与动态类型)对生成性能的影响较小。
  3. 错误分析
    • 常见错误包括语法错误、类型错误以及语言特定的语义错误。
    • 特定语言(如Racket)中出现模型生成非目标语言代码的情况,可能是训练数据分布的结果。

4. 主要贡献
  1. 通用框架
    • MultiPL-E通过翻译基准和单元测试,为多语言代码生成模型的研究提供了一个高效、可扩展的框架。
  2. 新数据集
    • 创建了第一个覆盖19种语言的并行多语言基准,为未来研究提供了重要的测试资源。
  3. 深度分析
    • 探讨了语言频率、类型注释、提示设计等因素对代码生成模型性能的影响。

5. 局限性与未来方向
  • 局限性
    • 生成的基准主要基于Python的任务,不一定能完全反映目标语言的实际使用场景。
    • 现有翻译策略无法覆盖所有Python特性,例如复杂类型或动态行为。
  • 未来方向
    • 扩展到更多语言和基准(如SQL、C)。
    • 研究如何改进模型以减少多语言生成中的语法和语义错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值