当前位置: 首页 > news >正文

ChartLlama: A Multimodal LLM for Chart Understanding and Generation论文阅读

原文链接:https://arxiv.org/abs/2311.16483

代码与数据集:https://tingxueronghua.github.io/ChartLlama/

本文启发:文章提出利用GPT-4合成大量图表数据,这些数据包含各种图表类型,包含丰富的instruction data。然后使用合成数据集对Llama进行微调,得到ChartLlama,完全属于数据驱动型方法。但是,合成数据集与真实数据集相比是否存在弊端?目前还没有研究明确证明这一点,但是能看到不少研究者都专注于真实数据集。

 Abstract

        多模态大型语言模型在大多数视觉语言任务中表现出令人印象深刻的表现。但是,该模型通常缺乏对特定域数据的理解能力,尤其是在解释图表图片时。这主要是由于缺乏相关的多模态指令微调数据集。在本文中,我们利用 GPT-4 创建了一个高质量的指令微调数据集。我们开发了一个多步骤的数据生成流程,包括生成表格数据,创建图表图形,并分别设计指微调数据。我们方法能够高效地生成多样化、高质量的指令调整数据,同时保持较低的资源支出,此外,它还允许我们整合现有数据集中尚未包含的更广泛的图表和任务类型。

        接下来,我们介绍 ChartLlama,这是一个多模态大型语言模型,我们使用创建的数据集对其进行了训练。ChartLlama 在 ChartQA、Chart-to-text 和 Chart-extraction 评估基准中优于所有以前的方法。此外,ChartLlama 显著改进了我们专门编译的图表数据集中的基线,其中包括新的图表和任务类型。ChartLlama 的结果表明我们提出的数据生成方法在增强图表理解方面的巨大潜力。

1.Introduction

        随着LLM快速发展,尽管 GPT-4V 等模型取得了成就和潜力,但 GPT-4V 架构背后的细节仍然是个谜。这种不透明性在学术界引发了关于设计多模态 LLM 的最佳实践的问题。值得注意的是,开创性的研究计划,如 LLaVA和 MiniGPT ,在这方面提供了有见地的方向。他们的研究结果表明,通过将视觉编码器整合到现有的 LLM 中,然后使用多模态指令调整数据集对其进行微调,LLM 可以有效地转变为多模态 LLM。值得注意的是,这些多模态数据集通常来自已建立的基准,为积累指令调整所需的数据提供了一种经济高效的方法。

        基于既定基准的数据集,如 COCO数据集,显著增强了多模态 LLM 解释日常照片的能力。然而,当面对专门的视觉表示,如图表时,这些数据集显示出明显的局限性。图表是将复杂的数据集转化为易于理解的视觉叙述的重要视觉工具,在促进理解、形成见解和有效传达信息方面发挥着至关重要的作用。从学术出版物到企业演示,他们的普遍存在强调了增强多模态 LLM 解释图表能力的重要性。事实上,专门收集数据以改进理解图表的指令会带来一些挑战。这些通常源于两个领域:理解和生成。一个有效的图表理解模型应该能够从各种类型的图表中提取和总结数据,并根据这些信息进行预测

        但是,现存的绝大多数数据集仅仅提供简单的问答和描述说明,这主要由于缺少详细的图表信息和注释,无法提供对原始数据的高级理解。高度依赖Web 爬虫收集的手动注释图表会对这些数据集的质量产生负面影响。因此,以前的注释方法只能导致图表数据集质量较低且注释不太全面。与图表理解相比,生成图表图形对模型来说是一项更具挑战性的任务,因为现有的基于深度学习的生成方法难以根据指令准确创建图像。使用 Python 代码生成图表似乎很有前途,这需要相应的注释来监督模型。从 Web 获取的大多数图表都没有详细的注释,因此很难对生成代码进行注释。缺少代码注释使得在代码生成中监督模型变得具有挑战性。这些问题结合在一起,阻碍了模型理解图表和生成图表的能力。

        为了解决这个问题,我们引入了一种专为图表理解和生成量身定制的自适应和创新数据收集方法。我们方法的核心是利用 GPT-4 强大的语言和编码能力,这有助于创建丰富的多模态数据集。这种思路不仅优化了数据的准确性,还确保了其广泛的多样性。具体来说,我们的方法包括三个主要阶段:

(1)Chart Data Generation(生成数据点):我们不是将数据收集局限于 Web 或现有数据集等传统数据源,而是利用 GPT-4 的强大功能来生成合成数据。通过提供topic、distribution、trend等特定特征,我们指导 GPT-4 生成既多样化又精确的数据。

(2)Chart Figure Generation(绘图):GPT-4 的编码技能被用于使用开源库(如 Matplotlib)编写图表图,给定数据和函数文档,输出精心渲染的图表,这些图表跨越各种形式,每个图表都准确地表示其基础数据。

(3)Instruction data generation(生成描述性文本、QA):GPT-4 进一步用于解释和叙述图表内容,确保整体理解。系统会提示它构建与图表相关的问答对。通过合并叙述文本、问答对以及图表的源代码,从而得到一个全面的 instructiontuning 语料库。

通过上述方式,我们构建了一个开源数据集,它与其他数据集对比如下:

我们的贡献总结如下:

  • 引入了一种新颖的多模态数据收集方法,专门设计用于图表理解和生成。所提出的数据收集方法具有出色的灵活性和可扩展性,能够轻松迁移到不同类型的图表和各种任务中。
  • 通过我们创新的数据收集方法,我们创建了一个在质量和多样性方面脱颖而出的基准数据集。
  • 开发了ChartLlama,一个多模态大型语言模型(LLM),不仅在各种现有基准测试中超越了现有模型,而且具有多样化的独特图表理解和生成能力。

2. Related work

2.1. Large Language Model

2.2. Multi-modal Large Language Model

2.3. Chart Understanding

        已经有一些数据集可用于评估模型的图表理解能力,主要分为两类,一类通过简单的问答任务进行衡量,例如 ChartQA,它具有由人工注释的高质量问题和答案,以及 PlotQA,它通过模板生成了质量较低的问题和答案,这些数据集的优势在于它们的大比例尺以及通过模板生成它们的能力,局限性在于难以确保问题和答案的质量,以及倾向于关注图表中数据的简单问题。

        另一个类别将图表转换为文本描述,例如Chart-to-text ,这些数据集中的图表和注释来自现实世界,确保了更高的质量,并鼓励模型更深入地研究图表背后的趋势和含义,缺点是文本注释中存在更多的噪音和对 BLEU-4 的过度依赖。

        早先关于图表理解任务的工作可以分为两种主要方法。一种方法是使用单个模型来理解图表并用自然语言回答问题。另一种方法,首先利用模型将图表转换为结构化数据,然后使用现有的大型模型根据结构化数据分析和回答问题,例如Deplot: One-shot visual language reasoning by plot-to-table translationStructchart: Perception, structuring, reasoning for visual chart understanding

        在我们的工作中,我们主要探索前一种类型,旨在利用单个模型来完成图表理解的整个过程。

3. Method

3.1. Chart Data Generation

        我们在图表数据收集方面的主要目标是收集多样化和高质量的数据。为此,我们采用两种主要策略:1) 使用 GPT4 从头开始生成数据:为了收集多样化和高质量的数据集,使用 GPT-4 从头开始生成表格数据。我们指示 GPT-4 根据特定主题、分布和其他特征(例如数据集的行和列大小)创建数据表。此过程可确保创建具有已知和受控特征的数据,这对于生成可靠的 instruction-answer 对至关重要。此外,通过管理这些特征,我们可以有意识地减少偏差,从而获得更加平衡的数据集。2) 从现有图表数据集合成数据:通过引用现有的图表数据集来合成数据。这些数据集已经包含一系列主题和特征,为数据生成提供了坚实的基础。通过使用这些数据集提示 GPT-4,我们指导它生成合理的数据,以补充其现有的知识库。这种方法为我们的数据集增加了多样性,并提高了其整体质量。

        指导生成数据的具体方案如下:

        图表主题Chart theme:我们首先生成数百个可能的主题,这些主题都是短语。当我们生成数据时,我们会从所有这些主题中随机选择一个,这使得数据有意义且多样化。这也使得生成用于指令优化的问题和响应变得更加容易。

        数据趋势Data trends:数据的另一个重要特征是趋势。我们首先生成几个典型的趋势描述,比如稳步上升和突然下降,然后随机选择一些趋势,并要求模型根据它们生成数据。如果缺乏这些特征,模型将倾向于生成几组具有无意义分布的数据。

        列和行长度Column and row lengths:行和列的长度对于数据生成也是必需的。如果没有特定的约束,LLM 往往会生成过长甚至重复的数据,这很难通过图表以有意义的方式呈现。

        图表类型Chart types:不同类型的图表通常具有不同的特征。例如,饼图中值的总和应为 100%。如果不指定图表类型,我们最终可能会生成不符合相应图表标准的数据。

3.2. Chart Figure Generation

        下一步是使用 GPT-4 的编码功能将我们的数据集转换为可视化图表,使用 Matplotlib作为主要工具。在提示 GPT-4 时,我们会提供收集的数据、相关函数文档和上下文示例。我们还对颜色方案和线条类型等多样化方面提供了详细说明,以增强图表的视觉吸引力。为了提高图表生成的多样性和成功率,我们在提示中随机抽样成功生成的代码作为上下文中的示例。与以前依赖模板的自动图表生成工作相比,我们的方法提供了更多的多样性和更好的视觉吸引力。它还使我们能够有效地泛化不同的图表类型。结果是一系列精心制作的图表,每张图表都准确地表示其数据并在视觉上吸引人,展示了我们方法的有效性。下面列出了此阶段中提示的必要输入。

        图表数据:这是任务最重要的输入,图表数据是将在图表中可视化的信息。

        相关函数文档Related function documentation:这是生成 Python 代码的重要参考。它提供有关可用于创建图表的可用函数和特性的信息。通过该文档,该模型甚至可以创建上下文中没有的新样式的图表。

例如:

  1. 函数名称:bar()
  2. 参数:
    • x:X轴的数据点
    • y:Y轴的数据点
    • color:柱状图的颜色
  3. 返回值:图像

        上下文示例:这些上下文示例是从预先选择的高质量代码中采样的。这有助于促进 Python 代码的构建。当有高质量的新生成代码时,我们可以保存并对其进行采样,作为之后的上下文示例。

        其他要求:为了保证最终生成的代码适合批量处理和执行,我们还需要在 prompt 中包含几个要求。例如,需要在代码中列出数据,以使生成的代码自包含且可执行,而无需外部文件。我们还设置了标题、轴标签、图例和文本注释的要求。它们提供有关图表所代表内容的上下文,并使其更易于理解数据。没有它们,图表可能会令人困惑且难以解释。

3.3. Instruction data generation

        在 GPT-4 的帮助下,利用前两阶段的信息继续生成大量的 instruction-answer 数据。除了基本的图表理解功能(如问答和摘要)外,我们还为更复杂的任务构建说明和答案,例如准确的数据提取、详细的图表描述、图表代码生成,甚至图表编辑。与以前依赖人工注释的指令数据生成方式相比,我们的方法可以节省大量时间,同时提高结果数据集的多样性和质量。以下是需要填写到提示中的数据的更多详细信息:

图表描述和原始数据:提供这些描述有助于模型更好地理解上下文。图表描述有助于模型理解数据的性质,原始数据有助于理解数据的可视化表示。原始数据为模型提供实际值作为其响应的基础。所有描述和原始数据都在第一阶段和第二阶段生成。

被要求询问的特征Characteristics to be asked about:这个要求确保模型提出关于图表的多样化和相关的问题,它能提示模型检测数据及其表示的不同特征。

4. Experiment

4.1. Implementation details and dataset statistics

4.2. Evaluation Benchmark and Metrics

 在七个任务上进行评估:

  • ChartQA
  • Chart-to-text
  • Chart-extraction:图表提取旨在从给定的图表中提取表格数据。
  • Detailed description:这项任务需要以详细的方式对给定的图表图形进行全面描述,而不是简要总结它。
  • Chart-to-chart
  • Text-to-chart:根据说明文本和表格数据生成图表图形。
  • Chart-editing:输入条件是一个图表图和描述如何编辑图表的说明。预计会创建一个新图形,该图形已根据给定图表图形的说明进行了修改。

4.3. Results

4.4. Qualitative results

总之实验表明ChartLlama在所有任务上都取得SOTA效果,进一步证明了数据集的有效性。

5. Conclusion

相关文章:

ChartLlama: A Multimodal LLM for Chart Understanding and Generation论文阅读

原文链接:https://arxiv.org/abs/2311.16483 代码与数据集:https://tingxueronghua.github.io/ChartLlama/ 本文启发:文章提出利用GPT-4合成大量图表数据,这些数据包含各种图表类型,包含丰富的instruction data。然后…...

ByteCinema(1):用户的登录注册

文章目录 主要功能生成图形验证码redis滑动窗口操作限流0.限流设计的必要性1.原理2.代码(邮箱发验证码为例)3. 问题与解决高并发环境下redis操作的原子性过时数据的积累 续约token实现长期登录0.设计的出发点1.前置知识:JWT什么是 JWT?JWT 的…...

电力电网电线变电站输电线绝缘子无人机类数据集/农业植物病虫害类数据集/光伏板/工程煤矿矿场类数据集/道路类数据集

电力电网电线变电站输电线红外缺陷类数据集 传送门链接: 1.电线覆盖物检测数据集 气球风筝鸟巢 1300张 voc yol-CSDN博客 2.变电站可见光缺陷数据集数据集包含8376张巡检图像,带xml标签,共包含17类巡检标签!具体缺陷分类见下图&#xff01…...

深度学习之表示学习 - 引言篇

序言 在数据爆炸的今天,如何从纷繁复杂的信息中抽取有价值的知识,成为了人工智能领域亟待解决的核心问题。深度学习,作为机器学习的一个重要分支,以其强大的特征表示能力和自动化学习特性,引领了这场数据革命的浪潮。…...

Linux驱动开发 ——架构体系

只读存储器(ROM) 1.作用 这是一种非易失性存储器,用于永久存储数据和程序。与随机存取存储器(RAM)不同,ROM中的数据在断电后不会丢失,通常用于存储固件和系统启动程序。它的内容在制造时或通过…...

Django一分钟:lookupAPI详解,使用django orm生成高效的WHERE子句

一、Lookup API概述 Lookup API是Django用于构建数据库查询WHERE子句的API。 Lookup API的核心包含两部分: RegisterLookupMixin:为子类提供注册lookup的方法Query Expression API:一个接口,规定了可以被注册为lookup的类需要实…...

信息安全工程师(8)网络新安全目标与功能

前言 网络新安全目标与功能在当前的互联网环境中显得尤为重要,它们不仅反映了网络安全领域的最新发展趋势,也体现了对网络信息系统保护的不断加强。 一、网络新安全目标 全面防护与动态应对: 目标:建立多层次、全方位的网络安全防…...

返利机器人在电商返利系统中的负载均衡实现

返利机器人在电商返利系统中的负载均衡实现 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们来聊一聊如何在电商返利系统中实现返利机器人的负载均衡,尤其是在面对高并发和大量…...

MATLAB中typecast函数用法

目录 语法 说明 示例 将整数转换为相同存储大小的无符号整数 将 8 位整数转换为单精度 将 32 位整数转换为 8 位整数 将 8 位整数转换为 16 位整数 提示 typecast函数的功能是在不更改基础数据的情况下转换数据类型。 语法 Y typecast(X,type) 说明 Y typecast(X,…...

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结,今天和大家分享一下,话不多说,直接上链接!!!(如果大家在运行这个游戏遇到了问题或者bug,那么请私我谢谢) 大家写的时候可以参考一下我的代码思…...

变压器设备漏油数据集 voc txt

变压器设备漏油数据集 油浸式变压器通常采用油浸自冷式、油浸风冷式和强迫油循环三种冷却方式。该数据集采集于油浸式变压器的设备漏油情况,一般用于变电站的无人巡检,代替传统的人工巡检,与绝缘子的破损检测来源于同一课题。数据集一部分来自…...

算法练习题25——leetcode3279统计重新排列后包含另一个字符串的子字符串的数目(滑动窗口 双指针 哈希)

题目描述 解题思路 本题用到了滑动窗口 双指针 哈希 刚开始我是没读懂题的因为我笨 我想把我的思路说一下 左端不轻易缩小 只有找到跟word2匹配了 比如说abbcdd 遍历到c的时候才能匹配这个word2 对吧 那么之后加上以一个d或者俩d 都符合了 然后我们算完了 才能缩小左端 扩大…...

JavaEE: 深入探索TCP网络编程的奇妙世界(二)

文章目录 TCP核心机制TCP核心机制二: 超时重传为啥会丢包?TCP如何对抗丢包?超时重传的时间设定超时时间该如何确定? TCP核心机制 前一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(一) 书接上文~ TCP核心机制二: 超时重传 在网络传输中,并不会一帆风顺,而是可能出现&qu…...

GPT1-GPT3论文理解

GPT1-GPT3论文理解 视频参考:https://www.bilibili.com/video/BV1AF411b7xQ/?spm_id_from333.788&vd_sourcecdb0bc0dda1dccea0b8dc91485ef3e74 1 历史 2017.6 Transformer 2018.6 GPT 2018.10 BERT 2019.2 GPT-2 2020…...

C/C++内存管理 ——

目录 五、C/C内存管理 1、C/C内存分布 2、C语言中动态内存管理方式:malloc/calloc/realloc/free 3、C内存管理方式 1.new/delete操作内置类型 2.new和delete操作自定义类型 4、operator new与operator delete函数 5、new和delete的实现原理 1.内置类…...

深度学习02-pytorch-04-张量的运算函数

在 PyTorch 中,张量(tensor)运算是核心操作之一,PyTorch 提供了丰富的函数来进行张量运算,包括数学运算、线性代数、索引操作等。以下是常见的张量运算函数及其用途: 1. 基本数学运算 加法运算&#xff1a…...

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【文件系统】上

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核(LiteOS-M) 轻量系统内核&#…...

NISP 一级 | 8.4 《网络安全法》

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 2017 年 6 月 1 日,《中华人民共和国网终安全法》(以下简称《网终安全法》)正式实施。这是我国第一部全面规范网络空间安全管理方面问题的基础性法律&#xff0…...

实现人体模型可点击

简化需求:实现项目内嵌人体模型,实现点击不同部位弹出部位名称 一:优先3d, 方案:基于three.js,.gltf格式模型,vue3 缺点:合适且免费的3d模型找不到,因为项目对部位有要…...

C++ | Leetcode C++题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> levelOrder(Node* root) {if (!root) {return {};}vector<vector<int>> ans;queue<Node*> q;q.push(root);while (!q.empty()) {int cnt q.size();vector<…...

Pandas简介

Pandas 是一个流行的开源数据分析库&#xff0c;它是基于 NumPy 构建的&#xff0c;为 Python 编程语言提供了高性能、易用的数据结构和数据分析工具。Pandas 主要用于数据清洗、数据转换、数据分析等任务&#xff0c;使得数据处理工作变得更加高效和便捷。 Pandas 的两个主要…...

Python | Leetcode Python题解之第430题扁平化多级双向链表

题目&#xff1a; 题解&#xff1a; class Solution:def flatten(self, head: "Node") -> "Node":def dfs(node: "Node") -> "Node":cur node# 记录链表的最后一个节点last Nonewhile cur:nxt cur.next# 如果有子节点&#…...

机器人机构、制造

简单整理一下&#xff0c;在学习了一些运动学和动力学之类的东西&#xff0c;简单的整合了一些常用的机械结构和图片。 1.电机&#xff1a; 市面上的电机有&#xff1a;直流电机&#xff0c;交流电机&#xff0c;舵机&#xff0c;步进电机&#xff0c;电缸&#xff0c;无刷电…...

《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践

有些前端的小伙伴可能会好奇&#xff0c;nvm是什么&#xff1f;这里接简单介绍下&#xff0c;它是一个Nodejs版本管理工具。为什么需要它呢&#xff1f;当然是需要多个Nodejs版本的时候&#xff0c;那什么时候需要多个Nodejs版本&#xff1f;那肯定是在有点年头的公司了&#x…...

5.《DevOps》系列K8S部署CICD流水线之K8S通过Yaml部署GitLab

架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署Jenkins NFS的SC创建参考:2.《DevOps》系列K8S部署CICD流…...

[SAP ABAP] 创建数据库视图和维护视图

数据准备 学校表(ZDBT_SCH_437) 学生表(ZDBT_STU_437) 学校表(ZDBT_SCH_437)与学生表(ZDBT_STU_437)字段 学校表(ZDBT_SCH_437)与学生表(ZDBT_STU_437)行数据明细 1.创建数据库视图 使用SE11创建数据库视图 填写视图名称ZV_DATABASEV_437&#xff0c;点击创建按钮 选择数据库视…...

【最快最简单的排序 —— 桶排序算法】

最快最简单的排序 —— 桶排序算法 桶排序是一种排序算法&#xff0c;其工作原理是将数据分到有限数量的桶子里&#xff0c;然后对每个桶内的元素进行单独排序&#xff0c;最后依次把各个桶中的记录列出来。桶排序的效率取决于映射函数的选择和桶的数量。 桶排序适用于数据分…...

AI时代,服务器厂商能否打破薄利的命运?

文&#xff5c;刘俊宏 编&#xff5c;王一粟 AI大模型正在引发新一轮的“算力焦渴”。 近日&#xff0c;OpenAI刚发布的o1大模型再次刷新了大模型能力的上限。对比上一次迭代的版本&#xff0c;o1的推理能力全方位“吊打”了GPT-4o。更优秀的能力&#xff0c;来自与o1将思维…...

2024年9月python二级易错题和难题大全(附详细解析)(二)

2024年9月python二级易错题和难题大全(附详细解析)(二) 第1题第2题第3题第4题第5题第6题第7题第8题第9题第10题第11题第12题第13题第14题第15题第16题第17题第18题第19题第20题第1题 1、以下代码的输出结果是() x = 12 + 3 * ((5 * 8) - 14) // 6 print(x) A、25.0 B、6…...

4.结构型设计模式 - 第1回:引言与适配器模式 (Adapter Pattern) ——设计模式入门系列

一、引言 在现代软件开发中&#xff0c;设计模式是帮助我们解决复杂问题的工具&#xff0c;它们提供了在常见场景下重用已验证解决方案的途径。而结构型设计模式主要关注类与对象之间的组合方式&#xff0c;旨在通过增强灵活性和降低耦合度来改进代码的结构。 本次讨论的是结…...