ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

HumanEval-X详解:CodeGeeX打造的多语言代码生成评测基准与无偏pass@k指标

HumanEval-X详解:CodeGeeX打造的多语言代码生成评测基准与无偏pass@k指标 HumanEval-X详解CodeGeeX打造的多语言代码生成评测基准与无偏passk指标【免费下载链接】CodeGeeXCodeGeeX: An Open Multilingual Code Generation Model (KDD 2023)项目地址: https://gitcode.com/zai-org/CodeGeeXHumanEval-X 是 CodeGeeXKDD 2023开源的一套多语言代码生成评测基准包含 820 个人工编写的编程题每题附测试用例覆盖 Python、C、Java、JavaScript、Go 五种语言。与以往基于语义相似度的评测不同HumanEval-X 直接运行生成的代码来检验功能正确性并采用 Codex 提出的无偏 passk 指标量化代码大模型在多个编程语言上的真实水平。本文将带你快速理解这个评测基准的数据结构、指标原理与使用方法。为什么需要多语言代码生成评测基准早期的多语言代码生成评测如 CodeBLEU依赖生成代码与参考代码在语义上的相似度打分这种方式存在明显局限两份代码即使功能完全不同只要写法接近就会拿到高分。HumanEval-X 的思路更直接——把生成的代码编译/运行起来用测试用例判断它对不对从而消除看起来像但实际跑不通的误判。此外同一道题被人工翻译成 5 种编程语言因此它既能评测️代码生成输入函数声明 文档描述输出完整实现代码翻译输入两种语言的函数声明 源语言实现输出目标语言实现注意翻译任务会去掉文档描述防止模型绕过翻译直接解题。每条样本由声明、描述、解答三部分组成通过不同组合即可派生生成、翻译、摘要等多种任务扩展性很强。HumanEval-X 的数据结构每条样本长什么样样本以压缩的 JSON Lines 格式按语言存放在仓库中例如 Python 题集数据文件codegeex/benchmark/humaneval-x/python/data/humaneval_python.jsonl.gz其他语言cpp/、java/、js/、go/官方说明文档codegeex/benchmark/README_zh.md每条样本包含 6 个关键字段字段作用task_id题目语言与编号如Python/0prompt函数声明 文档字符串代码生成的输入declaration仅函数声明代码翻译的输入canonical_solution人工编写的标准解答test隐藏测试用例评测用example_test题目中公开的测试用例这种声明 描述 解答 测试的四件套设计正是 HumanEval-X 能同时支撑生成与翻译两类任务的原因示例对照如下图上方为 Java、下方为 Python红色声明、绿色描述、蓝色解答无偏passk指标如何公平地衡量代码生成质量为什么要用无偏估计评测时每道题通常会采样生成n200份候选代码。若直接统计k 份中至少 1 份通过的比例在 n 较大时会系统性高估真实水平因为抽样有偏。HumanEval-X 沿用 Codex 提出的无偏估计公式passk E[ 1 − C(n−c, k) / C(n, k) ]其中 n 为每题采样总数200c 为其中通过测试的数量k ∈ {1, 10, 100}。该公式在数学上保证了估计值无偏——k1 反映模型一次生成写对的能力k100 则更接近只要多试几次总能写对的潜力上限。具体实现见 codegeex/benchmark/metric.py 中的estimate_pass_at_k函数。评测流程从生成到打分整个基准的使用分为三步均可在仓库根目录执行生成样本运行 scripts/generate_humaneval_x.sh内部调用 generate_humaneval_x.py支持多机多卡分布式采样每题默认采样 200 份--samples-per-problem。代码翻译任务则使用 translate_humaneval_x.py。汇总输出多节点生成的结果可用 gather_output.py 汇总为统一的 JSONL 文件格式为{task_id: ..., generation: ...}。执行评测运行bash scripts/evaluate_humaneval_x.sh 结果文件 语言 并发数核心逻辑在 evaluate_humaneval_x.py 中它会把生成的代码与题目拼装成可运行的完整程序多线程并发编译执行统计每题通过数再按无偏公式算出 pass1 / pass10 / pass100。⚠️ 提示由于评测会真实执行模型生成的代码官方建议先在专用 Docker 环境中运行镜像定义见 codegeex/docker/Dockerfile并仔细阅读 execution.py 中的安全警告。基准实测CodeGeeX-13B 的多语言生成性能使用 HumanEval-X 对主流开源代码模型做了横向评测后各模型在五种语言上的 passk 分布可用箱线图直观呈现CodeGeeX-13B 在 pass1/10/100 上均处于第一梯队雷达图与柱状图进一步展示了各模型分语言、分 k 值的能力轮廓——CodeGeeX-13B 不仅平均分最高在 C 与 Go 等冷门语言上的领先也最明显按题目逐个展开通过率按 Python 通过率排序则揭示了语言的难度分布Python 题目普遍易通过而 C、Java、Go 的题目通过率明显更低且波动更大——这说明多语言基准的价值恰恰在于暴露模型跨语言的短板小结如何把 HumanEval-X 用起来目标去哪里查看题目数据codegeex/benchmark/humaneval-x/ 下各语言data/目录理解任务定义与指标codegeex/benchmark/README_zh.md批量生成/翻译scripts/generate_humaneval_x.sh、scripts/translate_humaneval_x.sh执行与打分scripts/evaluate_humaneval_x.sh、metric.py评测环境配置codegeex/docker/Dockerfile一句话总结HumanEval-X 820 道人工题 × 5 种语言 × 无偏 passk它用能跑起来才算对的硬标准成为衡量 CodeGeeX 及各类代码大模型多语言能力的标尺。如果你是评测爱好者建议先拉取 Docker 镜像对 Python 子集跑一次完整流程体会从采样到打分的整个闭环。【免费下载链接】CodeGeeXCodeGeeX: An Open Multilingual Code Generation Model (KDD 2023)项目地址: https://gitcode.com/zai-org/CodeGeeX创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表