跳转至

Scaling Text-Rich Image Understanding via Code-Guided Synthetic Multimodal Data Generation

会议: ACL 2025
arXiv: 2502.14846
代码: https://yueyang1996.github.io/cosyn
领域: 多模态VLM
关键词: 合成数据, 代码引导, 文本丰富图像, VLM指令微调, 图表文档理解

一句话总结

提出CoSyn框架,利用纯文本LLM的代码生成能力自动创建40万张文本丰富图像(图表、文档、图表等)+270万条指令微调数据,训练的7B VLM在7个基准上达到SOTA,超越GPT-4V和Gemini 1.5 Flash。

研究背景与动机

  1. 领域现状:VLM在自然图像理解上表现优秀,但在文本丰富图像(图表、文档、标签、截图等)上仍存在显著短板,这类图像需要同时具备文本理解和空间推理能力。
  2. 现有痛点:高质量的文本丰富视觉-语言数据严重稀缺——现有数据集(ChartQA、FigureQA等)规模小、类型有限、问题模板化;人工标注成本高;开源VLM在新任务上泛化能力差(训练了百万张图的模型在营养标签问答上表现不佳)。
  3. 核心矛盾:文本丰富图像通常由代码渲染而成(Matplotlib画图表、HTML渲染文档、LaTeX排版公式)——代码本身就是图像的完美文本表示,但现有合成数据方法没有充分利用这一特性。
  4. 本文要解决什么? (a) 如何规模化生成多样、高质量的文本丰富图像+指令数据?(b) 合成数据能否让VLM泛化到从未见过的新任务?(c) 如何减轻现有基准中的标注偏差?
  5. 切入角度:代码是文本丰富图像与文本之间的天然桥梁——让LLM生成代码渲染图像,再用同一代码作为上下文生成QA数据,无需视觉模型参与数据创建。
  6. 核心idea一句话:用代码作为中间表示,将图像合成和指令数据生成统一为文本LLM的代码理解任务:\(P(I,T|q) = P_{LM}(C|q) \cdot P(I|C) \cdot P_{LM}(T|C)\)

方法详解

整体框架

输入:自然语言查询(如"nutrition fact labels"),经CoSyn的20条流水线之一处理,输出:合成图像+对应的QA指令微调数据。流程分4步:(1) Topic生成——基于persona采样确定主题 → (2) Data生成——填充具体内容 → (3) Code生成——生成可执行代码渲染图像 → (4) Instruction生成——以代码为上下文让LLM生成QA对(含CoT推理)。

关键设计

  1. 11种渲染工具 × 20条流水线:
  2. 做什么:覆盖9大类文本丰富图像的生成
  3. 核心思路:Matplotlib/Plotly/Vega-Lite生成图表, LaTeX/HTML处理文档和表格, Mermaid/Graphviz生成图表, SVG/Asymptote做向量图, Lilypond生成乐谱, RDKit画化学结构。同一工具可用于多条流水线(如HTML用于文档、表格和图表)
  4. 设计动机:覆盖真实世界中文本丰富图像的全类型谱——不局限于图表,扩展到文档、公式、电路图、化学结构等

  5. Persona驱动的多样性:

  6. 做什么:在Topic生成阶段引入persona来提升内容多样性
  7. 核心思路:从20万个persona库中采样(如"a sci-fi novelist who likes alien worlds"),作为LLM生成主题时的条件。不同persona引导生成不同风格和内容的主题
  8. 设计动机:单靠采样温度等参数,LLM生成的合成数据容易重复单调。Persona可以从varied perspectives激发多样化输出

  9. 代码作为桥梁的指令生成:

  10. 做什么:用代码(而非图像)作为上下文让纯文本LLM生成高质量QA数据
  11. 核心思路:\(P_{LM}(T|C)\) —— 代码精确描述了图像中所有信息(数据值、标签、布局),LLM可以基于代码生成准确的question-answer-explanation三元组。无需VLM参与,避免了视觉幻觉
  12. 设计动机:代码是图像内容的lossless文本表示,比图像caption或描述更精确。用代码做上下文可以生成需要数值推理的问题(如"计算平均值")

损失函数 / 训练策略

模型架构:CLIP ViT-L/14 + MLP连接层 + Mistral-7B,遵循Molmo架构。两阶段训练:(1) Dense caption预训练 (2) 组合三类数据的监督微调(评估数据集138K + 辅助数据集1M + CoSyn合成数据400K)。训练60K步,TPU v3-128,batch size 32。

实验关键数据

主实验

7个文本丰富基准的平均分对比:

模型 ChartQA DocVQA InfoVQA TableVQA AI2D TextVQA ScreenQA 均分
GPT-4V 78.1 87.2 75.1 60.5 89.4 78.0 41.6 72.8
Gemini 1.5 Flash 85.4 89.9 75.3 72.6 91.7 78.7 40.1 76.2
Llama 3.2 11B 83.4 88.4 63.6 51.1 91.9 73.1 87.7 77.0
Ours (7B) 86.3 90.0 70.5 65.8 91.9 82.0 80.1 80.9
Ours (7B zero-shot) 80.8 82.9 59.8 64.9 83.9 72.7 78.1 74.7

消融实验

训练数据组合的消融(均分):

配置 均分 说明
Aux only (1M images) 58.7 辅助数据不能泛化到评估任务
Syn only (400K) ~72 仅合成数据即接近GPT-4V水平
Aux + Syn 74.7 超越GPT-4V (72.8)
Eval + Aux 77.3 +Aux仅提升1.4%
Eval + Syn 80.3 +Syn提升3.6%(效果远大于Aux)
Eval + Aux + Syn (Full) 80.9 最佳

关键发现

  • 400K合成数据 > 1M辅助数据:合成数据的边际贡献(3.6pp)远大于辅助真实数据(1.4pp),证明质量和相关性比数量更重要
  • 7K领域数据即可超越百万级训练:在NutritionQA新任务上,用CoSyn生成仅7K营养标签样本微调即超越大多数训练了百万张图的开源VLM
  • 缓解标注偏差:ChartQA中机器生成vs人类标注问题的性能差距从无合成数据的21.8%降至14.2%,说明合成数据帮助模型摆脱对模板化问题的过拟合
  • CoT推理有选择性收益:在需要多步推理的ChartQA(+2.5pp)和TableVQA(+2.2pp)上有效,但在DocVQA上因答案格式偏差反而降分
  • 合成数据更多样:CoSyn-400K的图像多样性和文本多样性均显著高于FigureQA、ChartQA等现有数据集

亮点与洞察

  • 代码作为桥梁的洞察极其优雅:文本丰富图像天然由代码生成,反过来利用代码做数据合成,既保证了图像-文本对齐的精确性,又让纯文本LLM就能完成全部工作。这个思路可以迁移到任何"由代码渲染"的视觉内容(如幻灯片、网页、CAD图纸)
  • 零样本泛化到新域的能力:用语言查询即可定向生成新领域数据,解决了VLM在新任务上cold-start的实际问题。NutritionQA实验尤其令人印象深刻
  • Persona多样性策略:简单但有效,值得在所有合成数据生成场景中借鉴

局限性 / 可改进方向

  • 依赖高质量代码LLM:数据生成用了Claude-3.5-Sonnet和GPT-4o-mini,开源替代的效果未知,成本也不低
  • 渲染失败率未报告:LLM生成的代码不一定能成功执行渲染,失败率和处理策略缺少讨论
  • 仅关注文本丰富图像:对自然图像、场景理解等其他VLM任务的影响未探讨
  • 评估指标局限:作者自己发现严格字符串匹配惩罚了更详细的正确回答(如"Tuesday to Thursday"被判错),但未提出替代评估方案

相关工作与启发

  • vs Molmo/PixMo-docs: Molmo也有合成文本丰富数据集但规模和多样性不及CoSyn-400K;本文用了Molmo的架构和预训练但在合成数据上做了大幅扩展
  • vs ChartPali: ChartPali在ChartQA的机器生成vs人类问题差距为32.8%,本文降至14.2%,说明更多样的合成数据有效减少偏差
  • vs LLaVA-OneVision: OneVision训练数据更大但均分(72.4)低于本文(80.9),说明定向合成数据比堆量更有效

评分

  • 新颖性: ⭐⭐⭐⭐ 代码做桥梁的思路简洁优美,persona驱动多样性也是亮点
  • 实验充分度: ⭐⭐⭐⭐⭐ 7个基准+消融+新任务泛化+偏差分析+多样性量化+CoT分析,实验极其充分
  • 写作质量: ⭐⭐⭐⭐⭐ 结构清晰,insights丰富,NutritionQA案例很有说服力
  • 价值: ⭐⭐⭐⭐⭐ 既有通用框架又有实际可用的400K数据集,对文本丰富图像理解领域有重要推动