LLM Agent之数据分析领域的应用

数据分析:Data-Copilot

  • paper: Data-Copilot: Bridging Billions of Data and Humans with Autonomous Workflow

  • github: https://github.com/zwq2018/Data-Copilot

先介绍下浙大提出的已扩展的数据分析框架,支持多种金融数据类型的查询,数据处理,简单建模,和数据可视化。Data-copilot 以金融领域的数据分析为例,提供了一套可以简单基于已有数据进行扩展生成的数据分析框架。

整个框架分成两个部分,基于大模型的 API 生成基于生成 API 的 llm 任务规划和执行。其实说复杂也不复杂,数据分析任务里面几个核心的要素就是

  • 分析啥:提问的实体,股票?债券?基金经理?

  • 分析哪段时间:数据的覆盖范围,一季度?今年?

  • 用什么指标:股票的收益率?债券利率?基金净值?

  • 如何分析:收益对比?价格涨跌?排名?

  • 如何输出:绘图?表格?文本?

API生成

设计部分其实是使用大模型来构建更符合上下文语义的 API 调用语句,以及 API 的输入输出。这部分代码并未开源......所以我们只依据论文和脑补做简单介绍。主要分成以下四个步骤

1. 生成更多的用户请求

API 的生成需要基于用户会问什么样的问题。而用户的提问又是基于你有什么样的数据。因此这里使用数据描述和人工编写的种子提问作为上文,让 LLM 生成更多的用户提问。

2. 生成 API 调用语句

把以上生成的所有用户提问,一个个输入模型,使用以下 prompt 指令引导 llm 生成完成一个数据分析任务,所需的多个步骤,以及每个步骤对应的API 描述和伪代码"Interface1={Interface Name: %s, Function description:%s, Input and Output:%s}"

img

3. 合并相似的 API 调用

每得到一个新的 API function,都会和已生成的 API function 配对后输入模型,并使用以下指令让大模型判断两个 function 是否功能相似可以合并为一个新的 API。例如把查询 GDP 的 API 和查询 CPI 的 API 合并为查询 GDP_CPI 的 API。不过个人感觉这个方案时间和 token 开销颇大,可能比较适合 online API 的在线构建,在离线构建时先基于 API 的描述进行聚类,然后每个 cluster 进行合并可能更经济实惠?

img

4. 为每个 API 生成对应代码

最后针对合并后的 API,使用大模型进行代码生成。这里使用了 pandas DataFrame 作为数据处理,数据绘图的数据交互格式。这里论文把工具调用分成了 5 个大类:数据获取,数据处理,合并切片,建模和可视化。

img

看完以上整个 API 构建流程,不难发现使用 llm 来自动生成 API 有以下几个好处(不过估计完全自动化难度不小......)

  • 节省人力

  • 和 APE 的思路类似,大模型生成的指令更符合模型生成偏好,API 同理

  • 当前是离线批量生成,如果可以优化为 online 的 API 生成的话,可以使得 API 具有动态可扩展性

API调用

获得 API 之后,就是如何排列组合规划 API 的执行来回答用户的提问/完成用户的任务。这里的任务流同样拆成了多个步骤:

意图识别

第一步是意图识别,这里其实融合了搜索中 query 预处理的几个功能:

  • 意图识别用于缩小问题范围提高后面 API 调用的准确率

  • 时效性模块基于今天的日期和用户提问,生成问题对应的具体时间范围(包括时间范围标准化)

  • 实体模块用于定位问题的核心实体

  • 输出形式的判别是绘图、表格还是文本输出

论文把以上多个模块融合成了基于 few-shot 的大模型改写任务,会把用户的提问改写成一个新的具有明确时间区间,任务类型更加明确的文本,与其说是意图识别,其实更像 query 改写。如下

img

个人感觉意图这里完全可以不基于大模型,或者可以用大模型造样本再蒸馏到小模型上。以及整个意图识别的模块可以拆分成多个独立且粒度更细的模块,在金融领域至少可以拆分成大类资产实体的抽取对齐,针对不同资产类型的不同问题意图的识别,以及独立的时效性生成/判别模块。意图模块直接影响后面的行为规划,需要准确率和执行成功率都足够高。

行为规划

行为规划模块包含两个步骤,第一步是任务拆解,以上改写后的 query 会作为输入,输入任务拆解模块。同样是基于 few-shot 的大模型指令任务,把任务拆分成多个执行步骤,每个步骤包括任务类型。

这里作者定义了 stock_task、fund_task、economic_task, visualization_task、financial_task 这 5 种任务,任务拆解类似 COT 把一个任务拆分成多个执行步骤,但本质上还是为了缩小 API的调用范围。指令如下

img

基于以上任务选择模块每个步骤的任务类型,例如 stock_task,会有不同的 few-shot prompt 来指导模型针对该任务类型,生成多步的 API 调用,包括每一步调用的 API,输入,输出和返回值。行为规划部分通用指令如下

img

行为规划中一个有意思的点,是论文构建的API中包含三种不同的执行方式,串行操作常规单个输入单个输出,并行操作获取一个证券的多个指标数据,以及循环操作,类似 map 对多个输入执行相同的操作。以下是Data-Copilot的Demo

img

数据洞察:InsightPilot

  • paper:Demonstration of InsightPilot: An LLM-EmpoweredAutomated Data Exploration System

  • 相关 paper:QuickInsights: Quick and Automatic Discovery of Insights fromMulti-Dimensional Data

  • 相关 paper:MetaInsight: Automatic Discovery of Structured Knowledge forExploratory Data Analysis

  • 相关 paper:XInsight: eXplainable Data Analysis Through The Lens ofCausality

  • LLM时代,探索式数据分析的升级之路有哪些新助攻?

InsightPilot与其说是一篇 paper,更像是一份微软 BI 的产品白皮书。主打 EDA 数据洞察,和上面的 Data-copilot 拼在一起,也算是把数据分析最基础工作涵盖了。举个数据洞察的栗子,最早在 UG 用户增长部门工作时,每次 APP 活跃用户下降了,数据分析组收到的任务就是赶紧去分析活跃用户数据,看看到底用户为啥流失了,是被竞品抢走了,是最近上了什么新功能用户不喜欢,还是之前活动拉来的用户质量不高留存较少,基于这些数据洞察,好制定下一步挽留流式用户,激活沉默用户的具体方案。

那如何发现数据中的异常点?一个基础的操作就是对数据进行不同维度的拆分对比。例如把活跃用户分成男女,老幼,不同城市,不同机型,渠道来源,不同阅读偏好等等维度,观察不同 subgroup 的用户他们的活跃是否发生下降,下降比例是否相同,是否有某个维度的用户组流失最显著。这个维度拆分可以是平行维度,也可以是下钻维度,对比方式可以是一阶变化趋势对比,也可以是波动率等二阶趋势的对比等等

微软的实现方案其实是使用 LLM 把之前微软已经开发应用到 BI 的三款数据洞察工具进行了组合串联,这三款数据洞察工具分别是 QuickInsight,MetaInsight和XInsight。我们先简单介绍下这三款工具,再看大模型要如何对数据分析工具进行组合串联。

Insights 们

QuickInsight

QuickInisght 是最早也是功能最基础的数据分析工具,它能快速发现多维数据中的 pattern。它的洞察数据单元由三个要素组成subject ≔ {𝑠𝑢𝑏𝑠𝑝𝑎𝑐𝑒(𝑠)数据空间, 𝑏𝑟𝑒𝑎𝑘𝑑𝑜𝑤𝑛 拆分维度, 𝑚𝑒𝑎𝑠𝑢𝑟𝑒(𝑠)观察指标}, 以下是{Los Angeles,Month,Sales}产生的数据洞察

img

QuickInsight,会先按不同维度,计算不同指标得到多组数据。洞察部分则是预定了 12 种不同的数据分析方式,例如异常值,突变点,趋势,季节性,相关性等等。每种洞察类型会基于显著性和贡献度进行综合打分,排名靠前的应该是单维度数据变化最显著,且对整体影响较大的。

MetaInsight

QuickInsight的洞察主要基于单个洞察数据单元进行,MetaInsight可以聚合关联多个洞察数据单元,产出更复杂,高级的数据洞察。简单来说是在以上三元组数据洞察的基础上,搜索不同的subsapce,以及measure,寻找具有相似数据洞察的三元组,并进行组合分析。继续以上洛杉矶销量数据的洞察,当我们扩展subspace到其他城市的销售数据时,MetaInsight会产出以下关联分析。

img

XInsight

以上QuickInsight和MetaInsight都还停留在相关性数据分析的领域,而XInsight着眼在因果性分析,也算是前两年很火的因果推断方向。也就是我们不仅想知道手机里同时有快手和抖音APP的用户,使用抖音的时间较短,还想知道到底是快手APP抢夺了用户的时间,还是这部分用户群体本身就属于东看看西看看没有固定偏好的群体。但真实世界中很难找到完全符合假设的因果推断,因为哈哈没有平行世界呀,因此只能通过一些控制变量,和数学建模的方案来近似模拟因果场景。感兴趣的同学可以看过来因果推断的春天

以下的案例中,同样是按月份维度进行拆分,航班延误时间作为指标。当在整个数据上进行洞察时会发现5月的延误时间比11月高了很多,但当控制变量当日是否下雨时,会发现在下雨天5月的航班延误时间是要低于11月的,因此5月份更高的降雨率可能可以解释5月更高的航班延误时间。

img

LLM Pipeline

InsightPilot就是基于以上三个数据分析引擎,使用大模型进行串联,来完成用户的数据洞察需求。还是那个观点,LLM+Agent的组合中,真正重要的是Agent,LLM只是负责基于上下文语义来选择最合适的Agent,并基于Agent的返回内容来决定下一步的操作,说白了就是串场子的,当然最后也需要LLM来生成数据分析报告。

img

这里大模型主要负责:初始化->洞察选择->意图选择->洞察选择->意图选择....->报告生成

  1. 初始化任务:会先调用QuickInsight生成数据集的基础洞察,然后使用Prompt,让LLM基于Agent返回的多条数据洞察,用户Query,和数据集的描述(类似DB Schema),来选择一条洞察结果来进一步分析。

  2. 意图选择任务:如何分析以上洞察,这里分了三个意图,分别对应以上的3个Agent,Understand-QuickInsight, Summarize-MetaInsight, Explain-XInsight。大模型会基于用户query,以上选择的洞察内容,来选择一个Agent来继续分析

  3. 洞察选择:基于Agent新产生的多个数据洞察,如果LLM判断无法回答用户问题,则会选择一个洞察继续分析

  4. 报告生成:最后基于TopK数据洞察生成报告来解答用户问题

在最后筛选保留Top-K洞察的部分,论文还加入了Ranking环节,说是排序但看实现上,更像是消重+相似度过滤+打散。

  1. 首先洞察之间两两消重,如果A洞察包含B洞察的内容,则删除B洞察

  2. 其次是相似度过滤,会过滤和用户提问关联较低的洞察。不过这里其实有些存疑,因为洞察存在维度下钻和多维度对比,似乎感觉相似度不太合适作为过滤标准。

  3. 最后是打散策略,是为了降低洞察之间的相似度,提高最终内容的丰富度。这里使用了以下的二阶近似打分的策略如下,其中|I|是每条洞察的有用性打分,交集打分是两条洞察有用性的最小值*洞察重叠度,整体策略是为了提高TopK洞察整体包含的信息量

img

最终是InsightPilot生成的报告效果,以及支持用户对报告内容的每个段落,进行数据验证,当点击第一个段落Inspire Me时会生成对应段落相关的数据图表(右图)。老实说只看这个Demo,效果有些惊艳,不过真正厉害的是上面的三个洞察引擎,LLM只是大自然的搬运工和文案工作者。

img

几个月前我们就聊过RAG的经典方案解密Prompt系列14. LLM Agent之搜索应用设计。前几天刚看完openAI在DevDay闭门会议上介绍的RAG相关的经验,有些新的感悟,借此机会再梳理下RAG相关的优化方案。推荐直接看原视频(外网)A Survey of Techniques for Maximizing LLM Performance

RAG最关键的一环其实不是LLM而是相关内容的召回,作为大模型推理的上文,优秀的内容召回应该满足以下条件:

  • 多样性和召回率:召回的内容要可以回答问题,并且内容丰富度,包括同一问题多个观点,多角度

  • 相关性和准确率:召回内容和问题相关,总不能召回100篇里面只有2篇和问题有关

  • 一致性和低冲突:召回内容间的观点一致性较高

  • 更高要求:高时效性,权威性,观点完整性,内容重复度低

这里不妨借鉴前人经验,参考搜索的主流框架:Query理解和扩展 -> 多路召回 -> 合并排序 -> 重排和打散。过去几个月RAG的论文也像是把传统搜索的方案,使用LLM轮番做了一遍范式更新。本章我们先围绕召回内容的多样性唠上两句。

直接使用用户Query进行向量检索,召回率往往不高,原因有以下几个

  • query较短,本身信息有限

  • 短文本的embedding效果较差

  • query短文本向量和document长文本向量存在空间表征差异

  • 用户对自己想问的内容比较模糊

  • 用户的query提问可能需要多个方向的信息聚合才能回答

以上问题其实覆盖了两个点:Query本身包含信息的多样性,搜索索引的多样性。下面我们结合新老论文,以及langchain新增的一些功能,来分别介绍~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记 Understanding Electricity-Theft Behavior via Multi-Source Data

WWW 2020 oral 1 INTRO 1.1 背景 1.1.1 窃电 窃电(electricity theft)指用户为了逃避电费而进行非法操作的一种行为 常用的反窃电方法可分为两类: 基于硬件驱动的反窃电方法 ​​​​​​​电表开盖检测、集中器检测。。。。 硬件驱动的…

MySQL之视图案例

目录 一.视图1.1 含义1.2 操作 二.案例三.思维导图 一.视图 1.1 含义 虚拟表,和普通表一样使用 1.2 操作 1.创建视图 create view 视图名 as 查询语句; 2.视图的修改 方式一: create or replace view 视图名 as 查询语句 方式二&#x…

图像分割-Grabcut法(C#)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的VB版本请访问:图像分割-Grabcut法-CSDN博客 GrabCut是一种基于图像分割的技术,它可以用于将图像中的…

Linux第15步_安装FTP客户端

安装完FTP服务器后,还需要安装FTP客户端,才可以实现Ubuntu系统和Windows系统进行文件互传。 1、在STM32MP157开发板A盘基础资料\03软件中,找到“FileZilla_3.51.0_win64-setup.exe”,双击它,就可以安装。 2、点击“I …

Fontfabric:一款字体与设计的完美结合

一、产品介绍 Fontfabric是一款由国际字体设计公司Fontfabric开发的字体设计软件。它提供了一整套完整的字体设计工具,让用户可以轻松地创建、设计和定制自己的字体。Fontfabric拥有丰富的字体库,包括各种风格和类型,能够满足用户在不同场景…

安全加密基础—基本概念、keytool、openssl

安全加密基础—基本概念、keytool、openssl 目录 前言 一、概念 明文通信 无密钥密文通信 对称加密 非对称加密 数字签名 消息摘要(MD5) CA数字证书(解决公钥分发的问题) HTTPS 相关文件扩展名 常用后缀名 普通的pem文件内容 二、keytool 2.1常用的命令如下 2…

docker 完成MySQL的主从复制

文章目录 搭建步骤 搭建步骤 拉取镜像 docker pull mysql:5.7运行主从 docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_P…

外包干了1个月,技术退步一大半。。。

先说一下自己的情况,本科生,19年通过校招进入广州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

c语言版:数据结构(时间复杂度,空间复杂度,练习)

时间复杂度 概念 时间复杂度是用来衡量算法执行时间的一个指标。它表示随着输入规模的增加,算法执行时间的增长率。时间复杂度通常用大O符号表示。 在计算时间复杂度时,通常会忽略常数项、低阶项和系数项,只关注随着输入规模增长而导致的主要…

网络名称解读 -入门5

WAN: Wide Area Network(跨区域),LAN: Local Area NetworkWAN MAC, 用来连接上级网络, LAN MAC, 用于内部网路。 LAN & WAN 3.1,LAN表示子网,通过掩码来筛选子网内主机数量&…

【C++】类和对象详解(类的使用,this指针)

文章目录 前言面向过程和面向对象的初步认识类的引入类的定义类的访问限定符和封装性访问限定符封装性 类的作用域类的实例化类对象模型如何计算类对象的大小类对象的存储方式猜测结构体内存对齐规则 this指针this指针的引出this指针的特性 总结 前言 提示:这里可以…

计算机毕业设计选题分享-SSM律师事务所业务管理系统01664(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM律师事务所业务管理系统 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,律师事务所业务管理系统当然也不能排除在外。律师事务所业务管理系统是以实际运用为开发背景…

静态网页设计——电影推荐网(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1NK411x7oK/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…

【亚马逊云科技】使用Helm 3为Amazon EKS部署Prometheus+Grafana监控平台

文章目录 1. 创建Kubernetes命名空间2. 添加Prometheus社区helm chart3. 安装prometheus4. 检查Prometheus Pod运行状况5. 检查Prometheus Service部署情况6. 修改服务访问端口类型7. 访问Prometheus数据收集情况8. 访问Grafana9. 设置数据源10. 查看Kubernetes各类性能可视化参…

c/c++运算符优先级【一文搞懂】【大白讲解】

C运算符优先级教程 我们知道,在数学运算中,有 “先乘除后加减” 的运算规则,在我们程序语言中一样有运算符的优先级问题,来决定我们运算的顺序问题,这就是运算符的优先级。 即所谓运算符的优先级,指的是在…

【linux笔记】top、ps

【linux笔记】top命令 top(Table of process)是动态变化的。而ps是静态的。 PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值表示高优先级,正值表示低优先级 VIRT — 进程使用的虚拟内存总量,单位kb。VI…

C语言实例_string.h库函数功能及其用法详解

一、前言 在计算机编程中,字符串处理是一项常见而重要的任务。C语言的string.h头文件提供了一系列函数和工具,用于对字符串进行操作和处理。这些函数包括字符串复制、连接、比较、查找等功能,为开发人员提供了强大的字符串处理能力。本文将对…

计算机中的数据运算

放上计算机中的数据的表示方法 计算机中的数据表示方法-CSDN博客 补码的运算: 连同符号位一起相加,符号位产生的进位自然丢掉,这里要特别注意机器数的位数,计算数的位数决定了可以存放的数据的大小,加减产生的数据的…

ATTCK视角下的信息收集:主机发现

目录 1、利用协议主动探测主机存活 利用ICMP发现主机 利用ARP发现主机 利用NetBIOS协议发现主机 利用TCP/UDP发现主机 利用DNS协议发现主机 利用PRC协议发现主机程序 2、被动主机存活检测 利用Browser主机探测存活主机 利用ip段探测主机存活 利用net命令探测主机存活…

【软件测试】学习笔记-测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度,通常的做…