首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

悟道·天鹰 AquilaCode升级多语言代码生成,多项指标领先,开源可商用

今年6月,智源发布悟道·天鹰(Aquila)大模型系列,开启国内通用大模型「开源可商用」先河。

作为目前支持中英双语、性能最好的开源“文本-代码”生成模型,AquilaCode 逾一月更新迭代,全面升级多语言代码生成模型AquilaCode-multi及 Python 语言生成模型AquilaCode-py,依然商用许可,且持续迭代开源。

AquilaCode-multi 支持 Python/C++/Java/Javascript/Go等多种编程语言的生成,在多语言代码生成评测 HumanEval-X 的各项指标上显著超过了其他开源模型。

专注于Python代码生成的AquilaCode-py 也在OpenAI 编制的 HumanEval(Python)各项评测指标中领先,Pass@1 仅次于月初 Salesforce 开源的 CodeGen2.5-7B-mono。

得益于基座模型的强大能力,AquilaCode 以小规模高质量数据实现高性能代码生成

Aquila-7B 基座模型在HumanEval 评测中 Pass@1 和 Pass@100 得分均超越了近期开源的 Llama2-7B

将“质重于量”进一步彰显,AquilaCode 使用经过高质量过滤且有合规开源许可的代码数据进行训练,以仅为其他开源代码生成模型的 10~40%数据量实现了更高性能。

此外,支持开发者定制“Copilot”代码助手以提升代码编写效率亦是亮点。

使用方式一(推荐):

通过 FlagAI 加载 Aquila 系列模型

https://github.com/FlagAI-Open/FlagAI/tree/master/examples/Aquila

使用方式二:

通过 FlagOpen 模型仓库单独下载权重

https://model.baai.ac.cn/

使用方式三:

通过 Hugging Face 加载 Aquila 系列模型

https://huggingface.co/BAAI

AquilaCode

高性能代码生成

显著领先同等参数量级开源模型

AquilaCode-multi 支持 Python/C++/Java/JS/Go等多编程语言高准确率生成。

在衡量生成代码的功能正确性的多语言代码生成评测HumanEval-X评测结果中,AquilaCode-multi 在多语言代码生成任务上展现出了显著优势,Pass@1、Pass@10、Pass@100 三项评测结果中均排名第一,明显优于其他模型。

在Pass@1的指标中,AquilaCode-multi 对于各种语言,包括Python、C++、Java、JavaScript和Go的处理结果均显著优于其他模型,平均得分为22.0,比第二名CodeGeeX-13B 高出近20%。

HumanEval-X Pass@k 各模型在多语言代码生成上的平均成绩,数据来自 HumanEval-X 官方公布结果:

HumanEval-X 多语言生成能力表格 Pass@k

(Python/C++/Java/Javascript/Go):

指标说明:模型针对每个问题生成 k个代码样本,如果有任何样本通过单元测试,则认为问题已解决,并报告问题解决的总比例,即 Pass@k 得分。

pass@1

pass@10

pass@100

Aquila-7B 基座模型在HumanEval(Python)排名领先。

HumanEval(Python)是评估“文本-代码”生成模型功能正确性的代码评测数据集。同等参数量级的基座模型中,Aquila-7B  在 HumanEval(Python)代码生成评测中名列前茅,Pass@1 和 Pass@100 得分均超越了 Meta 近期开源的Llama2-7B。

表1:基座模型Base model HumanEval 评测结果,评测数据结果来自公开技术报告。

Python语言生成模型AquilaCode-py,HumanEval(Python)排名领先。

基于Aquila-7B基座模型强大的生成能力,AquilaCode在Aquila-7B基础上使用经过高质量过滤且有合规开源许可的代码数据进行训练。尽管其代码训练数据量约为其他开源代码生成模型的10~40%,但依靠小规模高质量训练数据,AquilaCode实现了更高的性能,再一次验证了“质重于量”的训练原则。

在同等参数量级的开源代码模型中,AquilaCode-py 在各项指标上排名第二,仅次于 Salesforce 发布的 CodeGen2.5-7B-mono。

以Pass@1为例,AquilaCode-py-7B 和 AquilaCode-multi-7B 的准确率分别达到了28.8%和26%,接近或超过了参数量更大的 CodeGen-mono-16B。

表2:HumanEval 评测结果,其他模型评测数据来自公开技术报告

代码生成能力展示

AquilaCode-multi 多语言代码生成展示:

评测问题:Check if in given list of numbers, are any two numbers closer to each other than given threshold.

AquilaCode-multi不但可以准确补全 Python、C++、Java、JavaScript、Go 语言代码,且补全后的代码可以成功运行。

Python 语言输入:

from typing import List

def has_close_elements(numbers: List[float], threshold: float) -> bool: """ Check if in given list of numbers, are any two numbers closer to each other than given threshold. >>> has_close_elements([1.0, 2.0, 3.0], 0.5) False >>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3) True """

AquilaCode-multi 多语言代码生成模型返回的的答案:

for i in range(len(numbers) - 1): for j in range(i + 1, len(numbers)): if abs(numbers[i] - numbers[j]) < threshold: return True return False

C++ 语言输入:

/*Check if in given vector of numbers, are any two numbers closer to each other thangiven threshold.>>> has_close_elements({1.0, 2.0, 3.0}, 0.5)false>>> has_close_elements({1.0, 2.8, 3.0, 4.0, 5.0, 2.0}, 0.3)true*/#include<stdio.h>#include<vector>#include<math.h>using namespace std;bool has_close_elements(vector<float> numbers, float threshold){

AquilaCode-multi 多语言代码生成模型返回的的答案:

for(int i=0; i<numbers.size()-1; i++){ for(int j=i+1; j<numbers.size(); j++){ if(abs(numbers[i]-numbers[j])<threshold){ return true; } } } return false;}int main(){ vector<float> numbers = {1.0, 2.0, 3.0, 4.0, 5.0, 2.0}; float threshold = 0.3; bool result = has_close_elements(numbers, threshold); printf("%s\n", result ? "true" : "false"); return 0;}

Java 语言输入:

import java.util.*;import java.lang.*;

class Solution { /** Check if in given list of numbers, are any two numbers closer to each other than given threshold. >>> hasCloseElements(Arrays.asList(1.0, 2.0, 3.0), 0.5) false >>> hasCloseElements(Arrays.asList(1.0, 2.8, 3.0, 4.0, 5.0, 2.0), 0.3) true */ public boolean hasCloseElements(List<Double> numbers, double threshold) {

AquilaCode-multi 多语言代码生成模型返回的的答案:

if (numbers.size() < 2) { return false; } Collections.sort(numbers); for (int i = 0; i < numbers.size() - 1; i++) { if (Math.abs(numbers.get(i) - numbers.get(i + 1)) < threshold) { return true; } } return false; }}

JavaScript 语言输入:

/* Check if in given list of numbers, are any two numbers closer to each other than given threshold. >>> hasCloseElements([1.0, 2.0, 3.0], 0.5) false >>> hasCloseElements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3) true */const hasCloseElements = (numbers, threshold) => {

AquilaCode-multi 多语言代码生成模型返回的的答案:

const sorted = numbers.sort((a, b) => a - b); for (let i = 0; i < sorted.length - 1; i++) { if (Math.abs(sorted[i] - sorted[i + 1]) < threshold) { return true; } } return false;};

Go 语言输入:

import ( "math")

// Check if in given list of numbers, are any two numbers closer to each other than given threshold.// >>> HasCloseElements([]float64{1.0, 2.0, 3.0}, 0.5)// false// >>> HasCloseElements([]float64{1.0, 2.8, 3.0, 4.0, 5.0, 2.0}, 0.3)// truefunc HasCloseElements(numbers []float64, threshold float64) bool {

AquilaCode-multi 多语言代码生成模型返回的的答案:

for i := 0; i < len(numbers)-1; i++ { for j := i + 1; j < len(numbers); j++ { if math.Abs(numbers[i] - numbers[j]) < threshold { return true } } } return false}

VS Code AquilaCode 插件,辅助开发者编写程序

在 AquilaCode 辅助下,开发者可在 2 分钟内完成 FastAPI 的“列表”、“详情”、“修改”、“删除”等功能接口代码编写,实现成功运行,且可以从浏览器访问。

在 AquilaChat 对话模型中集成 AquilaCode,增强代码生成能力

AquilaChat 对话模型中定义了可扩展的指令规范,开发者可以将 AquilaCode 模型集成至对话模型中,实现“自然语言文本”到“代码”的生成。

开发者使用指南

智源 FlagAI 仓库中提供了详细的使用方式。推理、预训练、集成至 VSCode 的方法。

尤其值得推荐的是,开发者可以使用 AquilaCode 进行推理和预训练并集成至 Visual Studio Code 扩展,通过AquilaCode 模型来定制自己的代码助手“Copilot”,提升代码编写效率。

更多信息请查看 README 文档:

https://github.com/FlagAI-Open/FlagAI/tree/master/examples/Aquila/Aquila-code

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OIke5khHlD34ThCp12AQjw9Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券