PanGu-Coder: Program Synthesis with Function-Level Language Modeling
PanGu-Coder以两阶段函数级训练,在HumanEval上317M模型pass@1达17.07%。
核心发现
方法论
模型采用PanGu-α的单向、仅解码器Transformer,并增加Query Layer,以位置嵌入查询下一词表示。阶段一用Causal Language Modeling(CLM)在Python原始数据上训练188B tokens;阶段二从docstring–函数体配对数据出发,联合CODE-CLM与Docstr-MLM或Docstr-MCLM,强化自然语言到代码的条件生成。
关键结果
- HumanEval上,317M模型达到pass@1/10/100=17.07/24.05/34.55%,超过同规模CodeX 300M的13.17/20.37/36.27%(pass@1、10更高)。2.6B模型为23.78/35.36/51.24%,pass@1高于CodeX 2.5B的21.36%。
- MBPP上,317M与2.6B模型分别取得pass@1=16.20%和23.00%;2.6B超过6.7B InCoder的19.40%,且上下文仅1024、训练数据147GB,显示数据与上下文效率。
- 模型使用n=200次采样和Chen等人的无偏pass@k估计;较低k表现尤其强,但pass@100落后CodeGen Mono,作者推测较短上下文限制了长程序与长描述建模。
研究意义
论文把代码生成评价从表面相似度进一步聚焦到可执行功能正确性。结果说明,中等规模模型通过函数级数据组织、目标函数设计和针对性预训练,可以在较少数据、较小上下文下达到大型代码模型的竞争力。这为资源受限的企业部署、IDE辅助编程和可控代码生成提供了证据,也提示模型规模并非唯一决定因素。
技术贡献
核心贡献包括:将PanGu-α的Query Layer用于Python程序合成;提出CLM预训练加函数级对齐训练的两阶段方案;在阶段二分离docstring与代码损失,定义CODE-CLM、Docstr-MLM和Docstr-MCLM组合;通过AST抽取函数、签名、docstring并去重;使用Temperature与Nucleus Sampling评估功能正确性,并对缺失依赖执行自动导入以减少评测偏差。
新颖性
创新不在于首次使用Transformer生成代码,而在于把松散网络代码转化为函数级自然语言—代码样本,并针对“输入描述、输出函数体”的结构重新设计训练损失。相较仅连续拼接数据并做CLM的GPT类模型,PanGu-Coder明确区分上下文理解和代码续写目标,形成更贴近text-to-code的预训练流程。
局限性
- 当前只支持英文提示和Python输出;函数级训练常缺少全局依赖,因此生成代码可能无法直接运行,论文用自动导入补救,不能完全替代真实工程环境。
- 上下文窗口固定为1024,长描述、复杂算法和长函数易受截断或记忆不足影响,导致pass@100低于使用更长上下文和更多数据的CodeGen Mono。
未来方向
后续可扩展到多种编程语言、完整项目上下文和真实依赖环境;结合竞争编程与持续集成测试进行PanGu-Coder-FT微调;进一步研究更长上下文、检索增强、执行反馈和阶段二损失权重,以提升复杂程序和高k采样成功率。
AI 总览摘要
程序合成的目标,是让模型根据自然语言问题写出真正能运行的代码。传统代码模型往往依赖巨大数据和长上下文,并且文本相似不等于功能正确。PanGu-Coder选择更细粒度的函数级任务:输入英文docstring和函数签名,输出Python函数体,并以HumanEval与MBPP中的隐藏测试判断程序是否解决问题。
模型基于PanGu-α解码器架构,顶部增加Query Layer。训练分两阶段:第一阶段以CLM在GitHub抽取的Python数据上学习通用代码结构,共188B tokens;第二阶段只使用docstring—函数配对,联合CODE-CLM、Docstr-MLM或Docstr-MCLM,使模型更专注于“描述到实现”的映射。数据通过AST解析、长度过滤和函数体去重获得,最终预训练数据约147GB。
结果显示,317M模型在HumanEval上pass@1为17.07%,高于CodeX 300M的13.17%;2.6B模型pass@1为23.78%,高于CodeX 2.5B的21.36%。在MBPP上,2.6B模型达到23.00%,超过6.7B InCoder的19.40%。不过,其1024-token上下文和函数级数据造成长程序、依赖管理及高k采样的弱点。研究的意义在于证明,结构化样本与目标函数设计能够部分替代盲目扩大模型、数据和上下文规模。
深度分析
研究背景
GPT、GPT-Neo、CodeX、CodeGen和InCoder推动了代码生成,但多数模型依靠海量GitHub数据与较长上下文。HumanEval和MBPP进一步把评价转向隐藏测试下的功能正确性。PanGu-Coder继承PanGu-α,面向英文到Python函数生成,探索更高效的函数级训练。
核心问题
给定自然语言描述、函数签名及可选示例,模型需生成能通过未见单元测试的函数体。难点包括自然语言意图到算法实现的映射、语法与依赖正确性、长程序建模,以及从噪声网络代码中提取可靠监督信号。
核心创新
- ��以AST抽取docstring、签名和函数体,构造<descr><python><eoc>格式。
- ��阶段一CLM学习连续代码分布;阶段二把配对样本单独输入,使用CODE-CLM聚焦输出。
- ��以Docstr-MLM和Docstr-MCLM补充描述建模,避免只预测docstring的浪费。
- ��用Query Layer和Nucleus Sampling支持高效生成与功能评测。
方法详解
- ��数据:从GHTorrent关联的GitHub仓库抽取约6500万Python文件,去重、过滤后约147GB。
- ��表示:SentencePiece词表约42K;模型为317M和2.6B参数,均使用1024上下文。
- ��阶段一:随机初始化,Adam(β1=0.9、β2=0.95、权重衰减0.01),CLM训练188B tokens。
- ��阶段二:过滤docstring少于19词、函数体超过400词或长度比超过32的样本,最多训练1M步、约42B tokens。
- ��生成:使用temperature与nucleus sampling,直到<eoc>;每题采样200个程序。
实验设计
评测采用HumanEval的164道Python题目,平均每题7.7个隐藏测试,以及MBPP的974题(474训练、500测试)。指标为Chen等人的无偏pass@1、pass@10、pass@100。比较对象包括CodeX、CodeGen、AlphaCode、GPT-Neo和InCoder;不同k使用不同temperature与nucleus参数。
结果分析
HumanEval中,317M模型为17.07/24.05/34.55%,2.6B为23.78/35.36/51.24%。前者pass@1超过CodeX 300M的13.17%,后者超过CodeX 2.5B的21.36%。MBPP中2.6B为23.00/43.60/59.64%,优于InCoder 6.7B的19.40% pass@1。优势集中在低k,高k受上下文限制。
应用场景
可用于IDE中的docstring到函数实现、教学编程辅助、竞赛代码草稿和自动补全。实际部署需加入静态检查、沙箱执行、依赖解析和CI测试;模型当前仅支持英文Python,适合函数级而非完整仓库级生成。
局限与展望
训练样本来自docstring,语义质量和算法覆盖不稳定;函数体脱离项目上下文会遗漏导入、配置和状态。1024上下文不利于长代码,且自动导入会使评测比真实运行环境更宽松。未来应加入项目级检索、执行反馈、多语言数据、长上下文和PanGu-Coder-FT的持续集成训练。
通俗解读 非专业人士也能看懂
把模型想成一间会写菜谱的厨房。第一阶段,厨师阅读了大量Python“菜谱”和厨房记录,学会基本刀法、火候和常见搭配;这相当于从连续代码中学习一般结构。第二阶段,给厨师看“客人的要求”和“菜名”,并让它只练习做出最终菜品,同时偶尔遮住要求中的几个词,训练它根据上下文补全意思。
真正的考核不是看菜谱像不像,而是让别人品尝成品:HumanEval有164道题,MBPP有974道题,每个题目都有隐藏测试。PanGu-Coder 2.6B在HumanEval第一次尝试成功率为23.78%,在MBPP为23.00%。它还用较小的厨房和较短的工作台完成训练,因此成本更低。
但它更像“会做一道菜”的厨师,而不是能管理整家餐厅的主厨。若缺少调料、工具或前置准备,代码可能运行失败;遇到很长的菜单和复杂流程,也可能忘记前面的信息。
简单解释 像给14岁少年讲一样
想象你在给游戏里的机器人下指令:“写一个求两个数最大公约数的函数。”机器人不能只写出看起来像代码的东西,而要真的通过隐藏关卡测试。PanGu-Coder就是这种机器人:它先读了很多GitHub上的Python代码,学会常见写法;然后专门练习把函数说明和函数名字变成函数内容。
它有两个大小版本:317M和2.6B。HumanEval像一套164道编程闯关题,317M版本第一次就成功17.07%;2.6B版本成功23.78%。在MBPP上,2.6B达到23.00%,还超过更大的InCoder。为了尝试更多答案,每道题会生成200个候选,再计算至少一个答对的概率。
模型会逐字预测下一个符号,就像你打字时手机预测下一个词。不过它只能看到最多1024个token,太长的题目或程序可能让它“忘记开头”。它还可能忘记导入需要的工具,所以论文会自动补充缺失库。
这项研究很酷,因为它说明“更大”不总是唯一办法;更聪明地整理训练材料也很重要。未来如果它能读完整项目、运行代码并根据错误自己修改,就会更像真正的编程队友!
术语表
Causal Language Modeling(因果语言建模)
按从左到右的顺序预测下一个token。其目标是最大化给定历史序列下的条件概率。
阶段一学习原始Python序列,阶段二的CODE-CLM专门预测代码。
Masked Language Modeling(掩码语言建模)
随机遮盖部分词元,再根据可见上下文恢复它们。它强调局部语义理解,而非单纯续写。
Docstr-MLM用于自然语言描述子序列。
Query Layer(查询层)
额外注意力层,用下一位置的嵌入作为查询,读取顶层Transformer表示。它帮助模型确定下一token。
这是PanGu-α架构并由PanGu-Coder继承的组件。
pass@k
对每题生成k个候选时,至少一个候选通过全部隐藏测试的概率估计。论文采用Chen等人的无偏估计器。
报告HumanEval和MBPP上的pass@1、10、100。
AST
抽象语法树,是表示程序结构的树状形式。它能定位函数、docstring、签名和函数体。
用于Python文件过滤、函数抽取与格式清理。
开放问题 这项研究留下的未解疑问
- 1 函数级训练能否稳定迁移到完整仓库?当前样本缺少跨文件依赖,自动导入也无法解决状态、配置和版本兼容问题。
- 2 阶段二三种损失的最佳权重尚不清楚。论文比较了组合目标,但对不同语言、任务长度和数据质量的系统消融仍不足。
- 3 功能测试可能掩盖安全风险。未来需同时评估漏洞、许可证、资源消耗和恶意输入鲁棒性。
应用场景
近期应用
IDE函数补全
开发者提供英文docstring和函数签名,模型生成Python函数体,再由静态检查、沙箱和单元测试筛选。它适合样板逻辑、数据处理和常见算法草稿,但不应直接绕过代码审查。
编程教学与竞赛辅助
教师或学生可让模型生成多种解法、测试样例和解释;竞赛平台可用它产生初稿。HumanEval与MBPP结果表明它能处理入门到中等难度函数,但答案必须经过执行验证。
远期愿景
可验证的软件代理
结合检索、编译、CI测试和错误反馈,模型可从需求生成函数、运行测试并迭代修复。实现这一愿景需要更长上下文、项目级依赖建模和严格安全隔离。
原文摘要
We present PanGu-Coder, a pretrained decoder-only language model adopting the PanGu-Alpha architecture for text-to-code generation, i.e. the synthesis of programming language solutions given a natural language problem description. We train PanGu-Coder using a two-stage strategy: the first stage employs Causal Language Modelling (CLM) to pre-train on raw programming language data, while the second stage uses a combination of Causal Language Modelling and Masked Language Modelling (MLM) training objectives that focus on the downstream task of text-to-code generation and train on loosely curated pairs of natural language program definitions and code functions. Finally, we discuss PanGu-Coder-FT, which is fine-tuned on a combination of competitive programming problems and code with continuous integration tests. We evaluate PanGu-Coder with a focus on whether it generates functionally correct programs and demonstrate that it achieves equivalent or better performance than similarly sized models, such as CodeX, while attending a smaller context window and training on less data.