大语言模型 (LLMs) 已经精通了文本处理的艺术。它们可以写诗、总结法律文件,甚至调试代码。然而,当你要求一个大语言模型可视化复杂的现实世界数据——具体来说,编写生成复杂图表的代码——结果往往不尽如人意。
虽然像 GPT-4 这样的模型能够胜任创建基本的条形图或折线图,但它们在面对更复杂的视觉效果,如 3D 曲面图、体数据或向量场时,经常会遇到困难。此外,用于训练这些模型的现有数据集通常局限于问答 (QA) 任务,而不是生成任务,或者缺乏科学和专业应用所需的多样性。
在这篇文章中,我们将深入探讨 Text2Chart31 , 这是一篇直面这些局限性的研究论文。我们将探索研究人员如何创建一个包含 31 种独特图表类型的庞大数据集,并开发了一种新颖的强化学习 (RL) 技术,无需昂贵的人类反馈即可微调模型。

如图 1 所示,该论文超越了简单的成对图 (如条形图) ,解决了复杂的“网格化”和“3D & 体积”可视化问题。它引入了一个通过巧妙的反馈循环将自然语言描述、代码和视觉输出对齐的管道。
当前图表生成面临的问题
要理解这篇论文的贡献,我们首先需要看看当前领域的空白。
- 数据集有限: 大多数现有的数据集 (如 PlotQA 或 ChartQA) 都是为视觉问答设计的 (例如,“这个条形图中最高的值是多少?”) 。它们并未针对从文本生成图表进行优化。此外,它们严重偏向于常见的图表类型。如果你需要模型生成一个“3D 三角曲面图”,标准数据集是帮不上忙的。
- 监督微调 (SFT) 的局限性: 标准的微调通常涉及向模型展示描述和正确的代码,然后告诉它最小化差异。然而,图表生成涉及多个组件: 文本描述、代码、数据表和生成的视觉效果。标准 SFT 往往无法有效捕捉这些模态之间错综复杂的关系。
贡献 1: Text2Chart31 数据集
研究人员推出了 Text2Chart31 , 这是一个专门为解决复杂图表类型稀缺问题而设计的数据集。
与以往的收集不同,Text2Chart31 专注于 Matplotlib 库,这是 Python 数据科学技术栈中的标准工具。该数据集包含 1.11 万个数据元组 。 每个元组不仅仅是一个问答对,而是一个包含以下内容的综合包:
- 描述 (\(x\)): 解释图表内容的自然语言。
- 代码 (\(c\)): 生成图表的 Python 代码。
- 数据表 (\(d\)): 使用的原始数据。
- 推理步骤 (\(r\)): 选择图表类型所采取的逻辑步骤。
- 图表 (\(y\)): 最终的视觉输出。
31 种图表类型的库
名称中的“31”指的是所涵盖的独特图表类型。这里的多样性非常显著。如下图所示,该数据集涵盖了五大类,从标准的 成对图表 (条形图、折线图) 到复杂的 3D & 体积图表 (3D 曲面、体素) 和 非规则网格图表 。

为了确保这个数据集不仅仅是重复相同的主题 (例如“随时间变化的销售额”) ,作者使用了一个主题生成引擎来确保语义多样性。数据集中的关键词分布涵盖了广泛的主题,从环境科学到经济学。

贡献 2: 分层生成管道
收集高质量的 3D 和体积图表数据非常困难,因为这些图表很少以结构化格式 (文本 + 代码 + 数据) 出现在爬取的网络数据中。为了解决这个问题,作者构建了一个 分层管道 , 利用 GPT-3.5-turbo 和 GPT-4 来合成数据集。
这不仅仅是一个简单的“让 GPT-4 写代码”的过程。它涉及一个严格的、多步骤的工作流,旨在最大限度地减少幻觉并确保代码可执行。

以下是图 2 中所示管道的详细分解:
- 主题生成: 从多样化的池中选择一个主题以避免重复。
- 描述生成: GPT-3.5 根据种子示例创建图表描述。
- 自我评估: GPT-4 充当评论家,检查描述是否符合逻辑并与请求的图表类型兼容。
- 代码和数据生成: GPT-4 生成 Python 代码和相应的数据表。
- 循环一致性验证: 这是最关键的质量控制步骤。
循环一致性的力量
如何在没有人眼观察的情况下验证生成的图表是否良好?作者使用了 循环一致性 (Cycle Consistency) 。
他们获取生成的 代码 , 用它来创建一个图表,然后要求大语言模型将该图表反向描述为文本。如果 重新生成的描述 与 原始描述 相符,则该数据点被视为高质量。如果它们有分歧,则将其丢弃。
这是一个 验证失败 的例子。描述要求的是“2D 直方图”,但代码生成了一个简单的条形图。系统捕捉到了这种不匹配,因为重新生成的描述与原始意图不符。

相反,这是一个 验证成功 的例子。描述要求具有特定数据属性的“3D 散点图”。代码生成了正确的可视化效果,重新生成的描述准确地反映了原始请求。

贡献 3: 基于 RL 的指令微调
数据集创建完成后,研究人员需要训练一个模型来使用它。他们采用了两个阶段的训练过程:
- 监督微调 (SFT) : 基线训练,模型学习根据描述预测标准答案代码。
- 带有自动反馈的强化学习 (RL) : 模型优化其策略的高级阶段。
至关重要的是,这个 RL 阶段 不需要人类反馈 (RLHF) 。 相反,它利用数据集和任务的内在属性来生成奖励。
奖励 1: 偏好奖励
第一个奖励函数专注于代码的正确性。研究人员构建了一个“偏好数据集”。他们获取 SFT 模型生成的代码 (\(c^-\)),并将其与数据集中的标准答案代码 (\(c^+\)) 进行比较。
他们训练了一个奖励模型来偏好标准答案代码。然后使用 PPO (近端策略优化) 优化策略网络 (\(\pi_{\theta_1}\)) 以最大化此奖励。

这个公式确保模型将其分布转移到生成统计上与正确、可执行的标准答案代码相似的代码上。
奖励 2: 对齐奖励
第二个奖励利用了数据生成阶段看到的 循环一致性 概念。目标是确保模型生成的代码所产生的视觉效果与用户的文本描述保持一致。
该过程像一个循环一样工作:
- 模型接收描述 (\(x\)) \(\rightarrow\) 生成代码 (\(\hat{c}\))。
- 辅助模型接收代码 (\(\hat{c}\)) \(\rightarrow\) 重新生成描述 (\(\hat{x}\))。
- 对齐奖励 使用 BERTScore 比较原始描述 (\(x\)) 和重新生成的描述 (\(\hat{x}\)) 之间的相似性。

通过最大化这个奖励,模型学会生成能够捕捉提示中所有语义细节的代码,确保在执行代码时没有任何东西“在翻译中丢失”。
实验与结果
研究人员将他们微调后的模型 (基于 Llama 3 Instruct-8B 和 Code Llama) 与 GPT-4、GPT-4o 和 Claude 3 Opus 等大型专有模型进行了比较。
任务 1: 描述到图表
主要任务是根据文本描述生成代码。“错误率”指标衡量生成的代码运行失败或生成错误图表类型的频率。

关键结论: 查看表 2 中的 [SFT+RLpref] L3I-8B 一行。这代表了使用他们的方法微调的 Llama 3 8B 模型。
- 它实现了 14.55% 的总错误率 。
- 这优于 Claude 3 Opus (14.90%)、GPT-3.5-turbo (18.62%) , 并与 GPT-4-turbo (14.27%) 相当。
- 这一点非常了不起,因为 Llama 3 8B 比这些专有模型小得多。
这种改进在像 3D & 体积 这样的复杂类别中最为明显,而在这些类别中开源基线模型通常会失败。
任务 2: 原始数据到图表
在这个任务中,模型被给予一个原始数据表,必须 (1) 推理数据以找到最佳图表类型,并且 (2) 生成描述和代码。

如表 3 所示,微调后的 Llama 3 (SFT L3I-8B) 实现了 0.413 的命中率 , 这意味着它在 41.3% 的时间里正确识别出了最合适的图表类型,在这个特定基准上显著优于 GPT-4 (0.286) 和 Claude 3 Opus (0.294)。
人工评估
像 BLEU 或错误率这样的指标很有用,但图表实际上好看吗?研究人员进行了一项人工评估,评估员将不同模型生成的图表与参考图表进行了比较。

图 3 显示,作者微调后的 Code Llama 13B 模型 ([SFT] CLI-13B) 对抗基础 Llama 3 模型实现了 47.7% 的胜率 , 且失败率极低。即使是对抗 GPT-3.5-turbo,微调后的模型也保持了优势,在大多数情况下获胜或打平。
结论
Text2Chart31 论文在自动化数据可视化方面迈出了重要的一步。通过超越简单的 QA 数据集并采用分层生成管道,作者创建了一个涵盖复杂科学绘图“长尾”部分的资源。
更重要的是,他们的 基于 RL 的指令微调 表明,我们并不总是需要人类反馈来改进大语言模型。通过使用 循环一致性——检查输出是否可以转换回输入——我们可以创建自动反馈循环,使较小的开源模型能够超越其体量限制,在专业任务中与最先进的专有系统相媲美。
对于学生和从业者来说,这意味着以高质量合成数据为支撑的专业微调,是构建强大的数据分析和可视化工具的可行路径。
](https://deep-paper.org/en/paper/2410.04064/images/cover.png)