大幅降低数据科学门槛!豆包大模型团队开源AutoKaggle,端到端解决数据处理

图片

文章来源|豆包大模型团队

作为数据科学与机器学习经典竞赛,Kaggle 以其高难度、高奖金、高关注度吸引了大量顶尖人才参与。Kaggle 竞赛任务往往涉及需求理解、数据清洗和预处理、特征工程和建模等多个环节,需要参与者具备极强的专业知识与协作能力。

字节跳动豆包大模型团队与 M-A-P 社区于近日提出 AutoKaggle ,为数据科学家提供了一个端到端的数据处理解决方案,帮助简化和优化日常数据科学工作流程的同时,极大降低数据科学的门槛,可帮助更多没有相关背景的使用者进行有价值的探索。在相关评估中,AutoKaggle 性能表现超出人类平均水平。

目前,该成果已经开源,本文将介绍其立项缘起、技术亮点及实验中的更多结论。

大型语言模型(LLMs)近年来展现出惊人能力,遗憾的是,尽管 LLMs 在单一任务上表现出色,面对复杂、多步骤的项目处理时,仍存在显著缺陷。

以数据分析项目为例,这类任务通常涉及需求理解、数据清洗和预处理、探索性数据分析、特征工程和建模等多个环节。每个步骤都需要专业知识和细致的规划,通常需要多次迭代,门槛非常高。

基于上述背景,豆包大模型团队与 M-A-P 社区联合提出 AutoKaggle,一个端到端的数据处理解决方案。

AutoKaggle 通过构建一个多智能体(Agent)的工作流,以提高逻辑复杂的数据科学任务中间决策步骤的可解释性与透明性,并保持优秀性能及易用性,以降低理解难度和使用门槛。团队认为,AutoKaggle 可系统地解决数据科学任务的复杂问题,保证代码鲁棒、正确地生成。

实验结果表明,在对 8 个 Kaggle 竞赛数据集的评估中,AutoKaggle 的有效提交率达到 85%,综合评分为 0.82(满分为 1),超过了在 MLE-Bench 中表现优秀的 AIDE 框架,展现了其在复杂数据科学任务中的高效性和广泛适应性,性能超过人类平均水平

目前,论文成果已经开源,同时,团队针对 AutoKaggle 的运行结果提供了详细报告,可帮助大家观察细节,以便进一步探索。

AutoKaggle: A Multi-Agent Framework for Autonomous Data Science Competitions

论文链接:
https://arxiv.org/abs/2410.20424

代码链接:
https://github.com/multimodal-art-projection/AutoKaggle

成果展示页:
https://m-a-p.ai/AutoKaggle.github.io/

图片

01  成为 “Kaggle 大神” 有多难?

在介绍我们工作之前,先简单介绍 Kaggle,以及项目的复杂性。

Kaggle 是一个业内流行的数据科学竞赛平台,企业和研究者可在其上发布数据和问题,并提供奖金给解决问题的参赛者。每个 Kaggle 竞赛题目都是一座极其复杂的知识迷宫,没有标准答案,只有无限逼近最优解,促使参与者不断提出更好方案,探寻技术边界。

图片

Kaggle Days 在中国举办 来源:Kaggle官方

以医疗影像诊断为例,参赛者不仅需要熟练运用算法,还须深入理解医学专业知识,方能在极其微小的像素细节中,捕捉肉眼容易忽略的关键特征。

金融风险预测更是充满不确定性,竞赛者需要构建能穿透市场复杂波动的模型,在海量且充满噪音的时间序列数据中,提取有价值的信号。

而将这种复杂性推向极致的,则是气候变化预测,参与者要整合全球多源数据,模拟地球系统错综复杂的相互作用,在有限计算资源下做出精确预测。

这些题目不仅考验技术能力,更对协同能力、领域知识提出极高要求。通常一个项目参与人数能达到数千,只有 Top1 可以得到高额奖金。即便多个专家组队协同开发,也只能提供一个不算差的方案,想再往前冲,则要有一定程度的默契和合作经验。

高难度既代表高额奖金,亦意味着声望。此前,Hinton 及其学生就曾在竞赛中展示深度神经网络的强大能力,成为业内标志性事件。而许多机器学习技术实力过硬的人才,也同样因 “ Kaggle 大神”之名而被认可。

图片

02 基于阶段的多智能体推理,叠加两大重要模块 

前文提及,Kaggle 竞赛大部分任务往往涉及需求理解、数据清洗和预处理、探索性数据分析、特征工程和建模等多个环节。每个步骤需要专业知识和细致规划,历经多次迭代,门槛非常高。

为此,需要解决的问题包括:对整个任务的抽象和多智能体协作、迭代调试和单元测试、使用复杂的机器学习知识、全面的报告。

带着上述问题,团队进行了如下工作:

  • 架构设计

AutoKaggle 的核心是基于阶段的多智能体推理,通过对竞赛任务的抽象,将复杂数据科学问题转化为可泛化的工作流。由两套组件来完成这个任务:多阶段的工作流及多智能体

我们将数据科学解题过程分为六个关键阶段:背景理解、初步探索性数据分析、数据清洗、深入探索性数据分析、特征工程以及模型构建、验证和预测。结构化的设计提供了清晰的问题解决路径,确保各个方面都得到系统和全面的处理。

定义好每个阶段需要解决的问题后,需要设计对应的智能体以完成不同阶段任务,它们分别为 Reader、Planner、Developer、Reviewer 和 Summarizer。这些智能体在工作流程中,分别承担协同分析问题、制定策略、实施解决方案、审查结果并生成综合报告的角色。

图片

多智能体协作的方式不仅提高了任务完成效率,还增强了系统灵活性和适应性,使得 AutoKaggle 能够应对各种复杂的数据科学挑战。

  • 重要模块之代码开发模块

在架构之内,Developer 模块更复杂,也更值得分析。

团队通过迭代开发与测试,构建了一个自适应、鲁棒的数据科学代码生成系统。Developer 会基于当前状态、Planner 提供的策略和上下文做初始代码生成。之后,Developer 进入迭代的调试和测试过程:

1)运行生产的代码,如果有错误,则送入调试工具。

2)代码调试工具基于源代码和报错信息修改代码。

3)单元测试生成的代码,通过多次代码执行、智能调试和全面单元测试,实现了对复杂研发过程的精准控制。

在 Kaggle 竞赛中,单纯确保代码无错误运行远非充分条件。竞赛问题涉及复杂数据处理和精密算法,其中隐藏的细微逻辑差错往往对最终结果产生决定性影响。

因此,单元测试不仅需要验证代码的形式正确,更要深入审视其是否完全符合预期的逻辑和性能标准。若忽视这点,微小误差将在各阶段累积,可能导致整个分析产生系统性偏差。

为降低这种潜在风险,必须对每个开发阶段进行极其细致的单元测试设计,全面覆盖常规场景与边缘情况。

该方法的核心优势在于:动态捕获潜在错误、实时修正代码逻辑、预防错误传播,并在最小化人工干预的前提下,保证了代码的正确性和一致性。由于引入了自我修复和持续优化机制,能显著提升代码生成水平

图片

  • 重要模块之机器学习工具库

AutoKaggle 的机器学习工具库,也是其架构的核心创新点。精心设计的三大工具集:数据清洗、特征工程和模型构建与验证,共同提供了一个全面、标准化的解决方案。

该库不仅弥补了 LLM 在专业知识方面的固有局限,还通过七个数据清洗工具、十一个特征工程工具和综合模型开发工具,实现了数据处理流程的智能化和自动化。

其先进性体现在:标准化的功能模块、全面的异常处理机制、对复杂 Kaggle 竞赛场景的精准适配,以及能够显著降低技术实现复杂度,使多智能体系统能更专注于高层次的战略性任务规划。每个工具的功能标准化使项目能无缝地共享和处理数据,提升特征质量,优化模型性能,从而提高整体工作流程的效率

  • 可扩展性强,完整报告产出,用户友好型框架

除技术方面优势,AutoKaggle 还深度考虑到了用户体验,使其成为一个真正具有可扩展性用户友好性的框架,同时确保了数据处理过程的透明性,提升用户对于 AutoKaggle 解决方案的信任程度。

在可定制化方面,AutoKaggle 考虑到每位用户的使用场景都独具特色,通过开放定制化接口,用户通过简单的配置文件参数修改,即可定制整个数据处理流程。

此外,AutoKaggle 的机器学习工具库设计高度开放,用户只需提供一个函数及其配套的 Markdown 和 JSON 格式说明,即可扩展现有工具,满足多样化的用户需求。

最后,为了提高 AutoKaggle 方案的可解释性并实现整个数据处理流程的完全透明,AutoKaggle 在每个阶段均提供了详细报告,并在最后呈现竞赛总结。

通过这些详细的阶段性报告,用户不仅可以实时跟踪 AutoKaggle 的工作进度,还能深入理解每个阶段的分析逻辑,从而增强对框架的信任感。

详情请见 https://github.com/multimodal-art-projection/AutoKaggle。

03 在大多数评分中,AutoKaggle 展现出更优水平 

我们将 8 个任务分为 Classic 和 Recent 两组,考虑到项目依赖于 GPT4o,而该模型基于 2023 年 10 月以前可用数据进行训练,因此,它可能包括大部分经典Kaggle 竞赛数据。

为了更公平地评估工作流,我们选择了 2023 年 10 月之前开始的、至少有 500 人参加的比赛,而 Recent 组选择了 24 年后竞赛问题。

我们对比了 AutoKaggle 与 AIDE 在不同维度的性能,包括任务提交、有效提交和综合评分三个维度,可以看到,AutoKaggle 在大多数的评分中展现出更优水平

图片

为了进一步探索其性能源于哪些因素,我们对比了没有使用任何工具、仅使用数据清洗工具、仅使用数据清洗和特征工程工具以及完全体这四种场景的完成率和综合评分。

可以看到,与没使用任何工具相比,仅使用数据清洗工具的完成率最高,提升 30%,而使用了所有工具的完成率仅提高 27%。加入特征工程以后,完成率呈下降趋势,这种下降可能因为涉及的特征数量相对较多,加之此阶段工具的复杂性和高封装性,需要增删特征,从而让使用变得复杂。

图片

从下方左图能观察到,加入特征工程工具后,Debugging Time 显著高于只使用数据清洗工具。这种复杂性让 Developer 们调试错误代码变难,也可能是性能下降的原因。

且从下方右图可以看到,不同场景对于性能的影响。尽管机器学习工具库并未显著提升解决方案上限,但它作为一个更稳定的工具,提高了 AutoKaggle 的完成率。

图片

而在没有单元测试的情况下,完成率显著降低,完成任务几乎变得不可能。

这意味着,对于像数据科学为代表的高精度和逻辑要求的任务,仅仅让代码每个阶段可执行且不出错并不够,需要进行全面的单元测试,以确保代码逻辑正确,并实现每个阶段的目标。

图片

最后,我们统计了不同错误类型及出现次数,可以看到,每个子任务阶段都有可能发生错误。数据清洗和特征工程错误率最高,分别为 25% 和 22.5%。值得注意的是,在特征工程阶段的错误导致了 31.25% 任务失败。

图片

但是,团队为开发者提供了详细的调试过程。以文件未找到错误为例,调试工作流程如下:

1)错误定位:开发人员最初遇到执行脚本时出现问题,涉及文件保存操作。

2)错误修复:为了解决这些问题,提出了几个修改建议。

3)合并代码片段:将已修正的片段合并回正确的原始代码,以创建一个无缝且稳健的解决方案。

04 一些思考 

AutoKaggle 提供了一个健壮的框架以完成数据科学探索,基于各种 Kaggle 竞赛问题的广泛评估,证明了其有效性。该成果既展示了多智能体对于模型能力边界的提升,也证明了,如果能把工作流抽象出来就能解决足够复杂的问题,为大模型应用提供了更多可能性。当然,我们也留下一些遗憾,比如,无法在数据集规模特别大的比赛中,验证 AutoKaggle 性能。

未来,团队成员还将继续探索智数据科学课题及相关开源工作,并关注 Kaggle 上的最新前沿技术,如果你也对智能体协作、数据科学、大模型对复杂问题的解决感兴趣,有志于探索前沿课题,欢迎关注「豆包大模型团队」微信公众号,或点击阅读原文前往官网,了解更多信息

### 如何在本地环境中部署大语言模型 '豆包' 为了在本地环境成功部署名为‘豆包’的大语言模型,需遵循一系列特定的操作流程。考虑到不同操作系统间可能存在差异,这里提供一种通用的方法来指导完成这一过程。 #### 准备工作 确保本地机器满足运行大型语言模型所需的硬件条件,比如足够的内存和GPU支持(如果适用),以及已安装Python解释器版本不低于3.8[^1]。 #### 获取模型及相关资源 由于目标是部署名为‘豆包’的语言模型,假设该模型及其配套工具托管在一个公共平台如GitHub上,则应先访问对应的项目页面获取最新的下载链接或克隆仓库命令。对于本案例中的“豆包”,可以参照类似的开源项目操作方式: ```bash git clone https://github.com/YourRepository/DouBao.git cd DouBao ``` 上述命令会将整个项目的最新源码复制到当前目录下,并进入相应的工作空间准备后续步骤。 #### 安装依赖库 大多数情况下,项目根目录下的`requirements.txt`文件列出了所有必要的第三方库列表。通过pip可以直接批量安装这些依赖项: ```bash pip install -r requirements.txt ``` 这一步骤能够简化环境搭建过程中可能出现的各种兼容性和版本冲突问题。 #### 下载预训练权重 通常来说,除了基础框架外还需要单独下载经过预先训练好的参数文件(checkpoint),这部分内容往往不会包含于公开代码库内而是另行发布的。按照官方说明指引找到正确的下载途径并将其放置指定位置以便加载使用。 #### 运行服务端程序 一切就绪之后就可以启动服务器脚本来使模型在线响应请求了。一般而言,在项目文档中会有详细的介绍关于如何执行此动作;如果是基于Flask或其他Web框架实现的服务接口形式的话,可能是这样的命令: ```python from flask import Flask, request, jsonify import torch from transformers import AutoModelForCausalLM, AutoTokenizer app = Flask(__name__) tokenizer = AutoTokenizer.from_pretrained('path_to_model') model = AutoModelForCausalLM.from_pretrained('path_to_model') @app.route('/predict', methods=['POST']) def predict(): input_text = request.json['text'] inputs = tokenizer(input_text, return_tensors="pt") outputs = model.generate(**inputs) result = tokenizer.decode(outputs[0], skip_special_tokens=True) return jsonify({"response": result}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ``` 这段简单的例子展示了怎样创建一个基本的API端点用于接收输入文本并通过调用Transformer架构下的自定义模型来进行推理处理返回预测结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值