PanGu-Coder:函数级的代码生成模型( 二 )


4. 实验结果4.1 模型生成的通过率模型的一次生成通过率(PASS@1)是代码语言生成模型最重要的能力衡量指标 。PanGu-Coder采用了OpenAI发布的HumanEval以及google发布的MBPP两个函数级代码生成任务的数据集作为评测目标 。表1给出了HumanEval中一个非常简单的例子 。PanGu-Coder生成的代码需要通过单元测试(Unit Tests)才被认为生成正确 。

PanGu-Coder:函数级的代码生成模型

文章插图
表1 HumanEval 示例
在HumanEval数据集上 , 与业界标杆Codex(OpenAI)以及包括AlphaCode(Google Deep Mind)、CodeGen(Saleforce)、 INCoder(Meta)等模型相比 , PanGu-Coder在3亿和26亿模型上的一次通过率PASS@1均达到最优 。值得一提的是 , 3亿参数的PanGu-Coder模型(PASS@1=17.07%)超越了Codex (PASS@1=16.22%)接近7亿参数的模型结果 , 基本持平了谷歌10亿的模型(表2) 。在MBPP数据集上 ,  26亿参数的模型超越了META INCoder 接近70亿参数的模型效果(表3) 。另外 , 在训练的充分程度上 , PanGu-Coder是所有模型中所用数据量以及计算量最小(train tokens)的模型 。这一结果充分说明了PanGu-Coder数据集构建策略和分阶段训练设计的合理性 , 并展示了采用这种方式能够在函数级代码生成这一最重要场景上达到业界最优 。
PanGu-Coder:函数级的代码生成模型

文章插图
表2 PanGu-Coder在HumanEval上的一次通过率以及十次通过率

PanGu-Coder:函数级的代码生成模型

文章插图
表3 PanGu-Coder在MBPP上的一次通过率以及十次通过率
为进一步提升模型函数级代码生成的能力 , PanGu-Coder收集了包括CodeContest、CodeSearc.NET、AppS在内的业界已公开的大规模函数级数据集对模型进行微调(Fine-tune) , 得到了PanGu-Coder-FT 。实验结果表明 , 微调模型在MBPP以及HumanEval上的表现到了明显提升(表4) 。
PanGu-Coder:函数级的代码生成模型

文章插图
【PanGu-Coder:函数级的代码生成模型】表4 PanGu-Coder: 3亿模型Fine-tune结果
实际编码过程中 , 通常在实现一个函数之前 , 会预先设计若干测试用例来测试函数实现结果 。在HumanEval 164个函数描述中 , 有130个问题描述中包含了预设的测试用例 。为验证基于测试用例的代码生成的有效性 , PanGu-Coder在进行多次生成(200次)的情况下使用这些测试用例对生成的代码进行了过滤 , 并统计了过滤后代码的通过率 。从最终结果可以看出 , 利用测试用例对生成的代码进行过滤可以极大地提升通过率 , 其中3亿的模型可以达到41.52% 。
PanGu-Coder:函数级的代码生成模型

文章插图
表5 PanGu-Coder: 3亿模型测试用例过滤结果
4.2 工具内测PanGu-Coder模型已集成到了华为云的代码开发辅助工具中 , 可以在IDE中使用自然语言描述生成函数级的Python代码 , 或者根据上下文进行补全 。
如下是内测过程中产生的几个实际的例子 。
(1) 常见的数据结构算法
Input: 


推荐阅读