悟道·天鹰 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 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
*/
#include<stdio.h>
#include<vector>
#include<math.h>
using namespace std;
bool has_close_elements(vector<float> numbers, float threshold){

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)
// true
func 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值