编者按:本文来自微信公众号 量子位(ID:QbitAI),作者:MetaGPT团队,创业邦经授权转载。
GitHub三万Star项目MetaGPT上新,号称是“开源Devin”——
推出数据解释器(Data Interpreter),能够应对数据实时变化、任务之间复杂的依赖关系、流程优化需求以及执行结果反馈的逻辑一致性等挑战。
话不多说,直接看演示。
可以从英伟达股价数据中分析收盘价格趋势:
分析数据预测葡萄酒质量:
自动抠图删除图片背景:
还能针对糖尿病、心脏病等疾病,通过数据分析预测病情进展:
针对水泵传感器读数,进行相关性分析、因果推断、异常检测等全面分析,预测机器的运行状态:
Data Interpreter由MetaGPT团队联合北京工业大学、复旦大学、华东师范大学、河海大学、加拿大蒙特利尔大学、KAUST、圣母大学、厦门大学、香港中文大学(深圳)、香港大学、耶鲁大学、中国科学院深圳先进技术研究院、中国人民大学共同推出。
除了数据分析,Data Interpreter还能很好地迭代式观察数据,具备构建机器学习模型、进行数学推理的能力,还能自动回复电子邮件、仿写网站。
在各种数据科学和现实世界任务上,与开源基线相比,Data Interpreter在多种任务上取得SOTA性能。
在机器学习任务中综合得分从0.86提升至0.95,在MATH数据集上提高了26%,在开放式任务中任务完成率提升112%。
Data Interpreter一经发布,引起不少网友关注,X(原推特)转赞收藏量2.5k+。
网友再次感慨最近科技圈实在太热闹,belike:
这个数据解释器长啥样?
由大模型(LLM)驱动的智能体已经证明了它们在处理复杂任务方面的显著潜力。通过赋予LLM代码执行能力来提升其问题解决能力正逐渐成为一种趋势,如Code-Interpreter、OpenInterpreter、TaskWeaver。
然而,在数据科学领域,现有LLM-based智能体的性能仍有待提升。
Data Interpreter提供了一种全新的解决方案,旨在通过增强智能体的任务规划,工具集成以及推理能力,直面数据科学问题的挑战。
Data Interpreter提出了三个关键技术:
1)基于分层图结构的动态计划,基于分层的图结构进行任务和代码规划,有效管理任务间的复杂依赖,灵活应对数据科学任务的实时数据变化;
2)工具集成与进化,通过在代码生成过程中自动集成代码片段作为工具,动态嵌入了数据科学领域所需的领域知识;
3)基于验证与经验驱动的推理,自动在反馈中增强逻辑一致性检测,通过基于置信度的验证提升执行代码的逻辑合理性,并借助经验库增强推理能力。
下面我们逐一展开来看。
基于分层图结构的动态计划
这种方法借鉴了自动化机器学习中的层次规划技术,通过层次结构将复杂的数据科学问题分解为易于管理的小任务,并进一步将这些任务转化为具体的代码执行动作,从而实现细致的规划与执行。
分层结构:(a) 一个有组织的任务和动作图,展示了高层级机器学习项目的工作流程,包括实现项目目标所需的任务依赖和动作序列。(b) 任务的有向无环图(DAG),以机器操作状态预测问题为例。任务图展示了拆解的计划任务,而动作图(也称为执行图)则根据计划的任务图执行各个节点。每个节点的执行代码由LLM转换。
这种动态规划方法赋予了Data Interpreter在任务变化时的适应性,而有向无环图(Directed acyclic graph)结构则在监控和处理数据科学问题中的任务依赖关系方面展现出了高效性。
通过这种方式,Data Interpreter能够有效地管理和优化数据科学任务的执行流程,提高了问题解决的准确性。
数据解释器的动态计划管理:(a) 通过人工编辑进行计划细化。左侧图像显示了在图上经过人工编辑的任务,右侧图像则展示了细化后的计划,包括更新后的任务3.1’、3.2’以及新增的任务3.3。(b) 对失败任务的计划进行细化。在任务执行后,如果任务3.3失败,细化后的计划将整合已有的成功任务,用更新后的任务3.3’替换原任务3.3,并引入新任务4.1、4.2、4.3和5。
工具集成与进化
在数据科学任务中,任务的多样性与专业性要求基于LLM框架具备广泛的工具调用能力。现有的工具调用方式往往局限于API的形式,无法满足任务多样性带来的动态需求。
Data Interpreter 提出了工具集成与生成的方法。通过工具推荐与组织,能够根据任务描述,进行任务分类,从而有效选择合适的工具集。
在执行阶段,Data Interpreter根据工具参数描述、工具方法描述文档的结构化信息,动态嵌入和调整工具参数,以适应任务的具体需求。
此外,Data Interpreter还能够通过自我进化,从执行经验中抽象出工具的核心功能,形成通用的代码片段,集成到工具函数库之中。这些工具函数可以在未来的任务中重复使用,从而减少了调试频率,提高了执行效率。
下图是数据解释器中的工具使用流程,工具推荐最初根据任务分类来选择工具,然后根据任务需求组合多个工具使用:
基于验证与经验驱动的推理
解决数据科学问题需要严谨的数据与逻辑验证过程,现有的研究在解决这一类问题的过程中,往往依赖于代码执行后的错误检测或异常捕获,这一方式往往会误解代码执行正确即任务完成,无法发现逻辑错误,难以提升任务实现的有效性。
Data Interpreter 通过结合基于置信度的自动验证(Automated Confidece-based Verification)策略,显著提升了其在数据科学问题解决中的推理能力。
ACV策略要求Data Interpreter在执行代码后生成验证代码并执行验证,根据执行验证结果校验任务和实现代码的一致性,类似于白盒测试流程。
在需要更严谨数值反馈的场景中,如使用LLM进行数学推理,Data Interpreter可以增加多次独立验证,并通过多次结果的置信度排序来进一步提升效果。
另一方面,Data Interpreter利用经验池存储和反思任务执行过程中的经验,能够从过去的成功和失败中学习代码知识,从而在面对新任务时做出更准确的决策。这种结合实时验证和经验学习的方法,显著增强了解释器的推理能力,提升了任务的解决质量。
下图以MATH内的一个任务说明基于置信度自动验证流程,虚线框内是自动验证的过程,虚线框下方根据验证对多个候选答案进行排序:
多任务取得新SOTA
在实验部分,Data Interpreter在多个数据科学和现实世界任务上进行了评估。
基准测试
MATH benchmark涵盖了从初等代数到微积分等广泛的数学领域。这个基准测试不仅测试了模型对数学知识的掌握程度,还考察了它们在解决复杂数学问题时的推理能力。
为评估Data Interpreter在这一领域的性能,研究团队选择了MATH基准测试中难度最高的Level-5问题,这些问题涉及计数和概率(C.Prob)、数论(N.Theory)、初等代数(Prealg)和微积分(Precalc)等四个类别。
如图所示,以Accuracy作为这个任务的评估指标,Data Interpreter在4个类别上均取得了最好的成绩。特别是在 N.Theory 中,带有Automated Confidence-based Verification(ACV)策略的Data Interpreter达到了0.81的准确率。
为了测试Data Interpreter的精准和效率,研究团队还设计了ML-Benchmark,这是一个集合了Kaggle网站上多种经典机器学习任务的测试集。
这些任务不仅覆盖了葡萄酒识别(WR)、Wisconsin乳腺癌(BCW)、Titanic生存预测等经典问题,还包括了房价预测(House Prices)、Santander客户交易预测(SCTP)、识别与年龄相关的状况(ICR)以及Santander价值预测挑战赛(SVPC)等更具挑战性的项目。
通过任务完成率(CR)、归一化性能得分(NPS)和综合得分(CS)这三个关键指标,Data Interpreter在七项任务上的平均得分高达0.95,远超AutoGen的0.86,提升了10.3%。
特别是在ICR和SVPC这两个数据集上,Data Interpreter的表现尤为出色,分别比AutoGen提高了24.7%和21.2%。
值得一提的是,Data Interpreter是唯一一个在Titanic、House Prices、SCTP和ICR任务上得分均超过0.9的框架,这意味着它在机器学习任务中不仅能够完成核心步骤,还能在执行过程中持续优化任务效果。
另外,为测试Data Interpreter在开放式任务中的表现。研究人员还整理了一个包含20个任务的开放式任务基准。
这些任务涵盖了从光学字符识别(OCR)到迷你游戏生成(MGG)等多个领域,包括网络搜索和爬虫(WSC)、电子邮件自动回复(ER)、网页模仿(WPI)、图像背景去除(IBR)、文本转图像(T2I)、图像到HTML代码生成(I2C)等多样化的挑战。
然后将Data Interpreter与AutoGen和OpenInterpreter这两个基准模型进行了对比。每个框架对每个任务进行了三次实验,以平均完成率作为评价标准。
结果显示,Data Interpreter在开放式任务上的平均完成率为0.97,与AutoGen相比大幅提高了112%。对于去除图像背景(IBR)任务,所有三个框架都获得了1.0的完整分数。
在OCR相关任务中,Data Interpreter的平均完成率为0.85,比AutoGen和OpenInterpreter分别高出26.8%和70.0%。
在需要多个步骤并利用多模态工具/能力的任务中,例如网页模仿(WPI)、图像到HTML代码生成(I2C)和文本转图像(T2I),Data Interpreter是唯一能够执行所有步骤的框架。
而在电子邮件自动回复(ER)任务中,AutoGen和OpenInterpreter因为无法登录并获取邮箱状态,导致完成率较低,而Data Interpreter可以在执行过程中动态调整任务,从而在完成率上达到0.98。
消融实验
为了进一步探讨相关方法的有效性,研究人员还进行了消融实验。
为评估各模块性能,研究人员在ML-Benchmark上,使用了三种配置进行测试:
1)初始设置:基础ReAct框架,包含简单的任务理解提示词以及支持代码执行流程;2)增加了基于分层图结构的动态计划,包括分层规划和每一步骤的动态管理,便于实时调整;3)在2)的基础上增加了工具集成能力。
如表3所示,基于分层图结构的动态计划显著提高了0.48分。它通过准备数据集并实时跟踪数据变化有助于获得更优性能,特别是完成率方面效果显著。此外,工具的使用带来了额外9.84%的改进,综合得分达到了0.94分。
Data Interpreter还在包括GPT-4-Turbo、GPT-3.5-Turbo以及不同尺寸的LLMs上进行了实验。
在机器学习的任务中,更大尺寸的LLM,例如Qwen-72B-Chat和Mixtral-8x7B展现出与GPT-3.5-Turbo相当的表现,而较小的模型则性能下降较多。
如下图所示,结合Yi-34B-Chat、Qwen-14B-Chat和Llama2-13B-Chat,甚至DeepSeek-7B-Chat,Data Interpreter可以有效地处理数据加载及数据分析等步骤。
△
然而,这些模型在执行需要较高编码能力的任务时面临仍受到自身能力限制,通常导致流程无法完成。在开放式任务中,Mixtral-8x7B在3项任务上的完成率较高,但在网络搜索和爬虫(WSC)任务中表现不佳,难以准确地将完整结果输出到CSV文件。与机器学习任务ML-Benchmark类似,规模较小的模型仍由于编码能力受限而遇到执行失败问题。
研究人员还针对经验池的大小进行了消融实验。按存储任务级别的经验数量,分别设置经验池大小为0,80和200,对比Data Interpreter在不同任务上所需的代码debug次数和执行成本的变化,结果如下所示:
随着经验池从1增加至200,平均的debug次数从1.48降低到了0.32,执行成本从0.80美元降低到了0.24美元,表明经验的累计对于从自然语言描述任务到代码生成能够有明显的帮助。
论文链接:https://arxiv.org/abs/2402.18679项目链接:[1]https://docs.deepwisdom.ai/main/en/DataInterpreter/[2]https://github.com/geekan/MetaGPT/tree/main/examples/di[3]https://docs.deepwisdom.ai/main/en/guide/use_cases/agent/interpreter/intro.html
本文为专栏作者授权创业邦发表,版权归原作者所有。文章系作者个人观点,不代表创业邦立场,转载请联系原作者。如有任何疑问,请联系editor@cyzone.cn。