【论文】OSS-Instruct——EvalPlus榜单SOTA模型Magicoder

2024-03-20 06:59

本文主要是介绍【论文】OSS-Instruct——EvalPlus榜单SOTA模型Magicoder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 arxiv论文地址

EvalPlus Leaderboard

GitHub - ise-uiuc/magicoder: Magicoder: Source Code Is All You Need

目录

​编辑

背景

OSS-Instruct

具体例子

数据处理

实验

python代码生成

小语种生成

deepseek做base

语言分布的消融实验

直接用开源代码进行fine-tune


背景

现有的数据生成办法可以有效地提高LLM的指令跟踪能力,但它们依赖于小范围的预定义任务或启发式方法。而这样的方法会显著地继承LLMs和预定义任务中固有的系统偏差。

Self-Instruct仅依靠21个种子任务,使用相同的提示模板生成新的代码指令。

Evol-Instruct 以Code Alpaca为种子,仅依靠5种启发式算法对数据集进行演化。

OSS-Instruct

如图所示,OSS - INSTRUCT利用强大的LLM,通过从开源中收集的任意随机码片段中获得灵感,自动生成新的编码问题。【直接用开源代码进行fine-tune会对模型性能产生负面影响】在这个例子中,LLM从来自不同功能的两个不完整的代码片段中得到启发,并设法将它们联系起来,形成一个现实的机器学习问题。得益于"无限"的开源代码,OSS - INSTRUCT可以通过提供不同的种子代码片段直接产生多样化、逼真和可控的代码指令。

根据从GitHub中收集到的一些种子代码段,提示一个LLM (例如, ChatGPT)产生一个编码问题及其解决方案。种子片段提供了生成的可控性,并鼓励LLM创建能够反映真实世界编程场景的多样化编码问题。

源码中提取种子片段的代码

具体例子

shell脚本示例展示了LLM如何仅用一行shell脚本处理Python编码问题。库导入实例演示了一个LLM如何只用几个导入语句就可以创建一个现实的机器学习问题。同时,类签名实例说明了LLM从一个包含SpringBootApplication等注释和bank等关键字的不完整类定义中汲取灵感的能力。由此,LLM产生了一个问题,即需要基于Spring Boot实现一个完整的银行系统!

数据处理

选择StarCoder的语料库生成种子代码片段,因为是过滤版本,已经进行后处理,是高质量的

对于每一个code 文档,随机提取1~15个连续的行,从80K篇文档中提取80K的初始种子判断,python40K,C++, Java, TypeScript, Shell, C#, Rust, PHP, and Swift 各5K。为防止数据泄露,和评测数据集进行去重,最后剩75K种子数据

手工设计了10个coding的类别,计算每个样本在OSS-Instruct 的嵌入和10个类别之间的cosine相似度

创建多样化的编码任务,包括算法挑战、现实问题、单功能代码生成、基于库的程序补全、全程式开发,甚至整个应用程序的构建。

再计算OSS-Instruct 75K数据集以及self-instruct方法以及Evol-instruct与HumanEval 之间的相似性,self最高

实验

python代码生成

分别在CodeLLaMa-python-7B基础上用75K的OSS instruct数据集fine-tune得到Magicoder-CL和Magicoder-DS;继续evol-instruct方法训练得到MagicoderS-CL和MagicoderS-DS

虽然MagicoderS - CL在HumanEval上的得分略低于WizardCoder - CL - 34B和ChatGPT,但在更严格的HumanEval +数据集上,MagicoderS - CL的得分超过了WizardCoder - CL - 34B和ChatGPT,表明MagicoderS - CL可能产生更健壮的代码。

小语种生成

用MultiPL-E进行测评

在所研究的编程语言中,Magicoder - CL对CODELLAMA - PYTHON - 7B的改进幅度较大。此外,在一半的编程语言中,Magicoder - CL也取得了比SOTA 15B WizardCoder - SC更好的结果。此外,MagicoderS - CL在所有编程语言上都比Magicoder - CL有了进一步的改进,在仅有7B个参数的情况下达到了与WizardCoder - CL - 34B相当的性能。

而且MultiPL-E以代码补全格式评估模型,但 Magicoders 仍显示出显著的改进,尽管仅进行了指令调整。这意味着LLM可以从超出其格式的数据中学习知识。

deepseek做base

我们在 DeepSeek-Coder-Base-6.7B 用75K的OSS instruct数据集fine-tune得到 Magicoder-DS ;继续evol-instruct方法训练得到 MagicoderS-DS。值得注意的是,MagicoderSDS 变体在所有基准测试中都超越了 DeepSeek-Coder-Instruct-6.7B,训练token数量减少了 8 倍,并且在这些数据集上也与 DeepSeek-Coder-Instruct-34B 非常接近!

语言分布的消融实验

语种不是按种子的语言分类,而是按照生成出来的代码语言分;因为OSS-Instruct有可能生成和种子不同语言的代码。75K里面有43K的python数据和32K的其他语种数据

当仅使用 非 Python 数据进行训练时,Magicoder-CL 在仅使用 Python 的评估中仍然比基本模型提高了 10.4 个百分点。这意味着法学硕士可以在不同编程语言之间建立关联,并对更深层次的代码语义进行迁移学习。最后,混合语言的在python的评估上更高,但是在其他语言的表现上下降了,我们归因于指令调优期间 Python 数据的主导量(约 57%)

直接用开源代码进行fine-tune

用产生OSS-instruct75K数据集来源的StarCode,提取comment-function对,让模型用function signatures和comments来预测函数体。

我们观察到对 75K  coment-function 数据的微调甚至使基本模型变得更糟,而 OSS-INSTRUCT 有助于引入显著的提升。我们推测,退化是由于数据对本身存在的大量噪声和不一致造成的,尽管这些配对数据表现出与 HumanEval 或 MultiPL-E 问题非常相似的格式。这进一步表明,数据的真实性,而不是格式,对于代码指令调整至关重要。

这也表明了OSS-INSTRUCT可以将这些松散相关的代码片段转换为语义一致的指令调优数据。

这篇关于【论文】OSS-Instruct——EvalPlus榜单SOTA模型Magicoder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828647

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选