Chapter 9:训练数据集与配方(从数据到能力)
1. 开篇段落
在多模态大模型(MLLM/VLM)的开发中,模型架构正趋于同质化(ViT + Adapter + LLM)。当大家都在使用 CLIP/SigLIP 和 Llama/Qwen 时,数据配方(Data Recipe) 成为了决定模型智商差异的核心“护城河”。
如果说基准评测是“考试”,架构是“大脑结构”,那么训练数据就是“教材”与“人生阅历”。本章将深入 VLM 的训练腹地,揭示如何从零构建高质量的数据集。我们将不仅讨论“有什么数据”,更会探讨“怎么造数据(合成)”、“怎么洗数据(清洗)”以及“怎么喂数据(混合策略)”。你将学到如何通过调整数据配方,定向提升模型在 OCR、数学推理或长视频理解上的能力,同时避免灾难性遗忘。
2. 核心论述
2.1 训练范式:三阶段金字塔
现代 VLM 的训练通常分为三个阶段,每个阶段的数据策略截然不同。
/\
/ \ <-- Stage 3: 偏好对齐 (RLHF/DPO/KTO)
/ \ 目标:去幻觉、安全、人类偏好对齐
/______\ 数据量:1k - 10k (极高质量三元组)
/ \
/ \ <-- Stage 2: 视觉指令微调 (Visual Instruction Tuning / SFT)
/------------\ 目标:多轮对话、复杂指令遵循、思维链(CoT)
| | 数据量:100k - 2M (合成数据 + 精标数据)
|____________|
| | <-- Stage 1: 模态对齐预训练 (Pre-training / Alignment)
| | 目标:让 LLM "看懂" 图像特征 (Feature Alignment)
|____________| 数据量:10M - 1B+ (图文对 / Interleaved Docs)
Stage 1: 预训练 (Pre-training)
- 训练组件:通常冻结 ViT 和 LLM,只训练 Projector (Adapter)。
- 数据形态:简单的
(Image, Caption)对。 - 关键策略:
- Quantity > Quality:需要海量数据覆盖世界知识。
- 数据源:LAION-5B, COYO-700M, CC3M/12M。
- 近期趋势:从单纯的图文对转向 Interleaved Data(图文交错文章,如 OBELICS, MMC4),这有助于模型学习上下文关联(In-context Learning)。
Stage 2: 指令微调 (SFT) —— 决定胜负的关键
- 训练组件:通常全量微调 LLM + Projector(有时也解冻 ViT)。
- 数据形态:
(Image, Instruction, Response)。 - 核心变革:
- Dense Captioning:传统的 COCO 风格简短描述("一只狗在草地上")已被淘汰。现在的 SFT 依赖 ShareGPT4V 风格的详尽描述(包含物体关系、颜色、文字、背景细节的数百字段落)。
- 复杂任务混合:必须包含 VQA、OCR、代码生成、数学推理等多种任务。
Stage 3: 偏好对齐 (Alignment)
- 方法:DPO (Direct Preference Optimization) 或 RLHF。
- 数据形态:
(Image, Prompt, Chosen_Response, Rejected_Response)。 - 关键作用:显著降低幻觉(Hallucination)。例如,
Rejected样本通常包含“过度自信的错误物体检测”。
2.2 数据能力图谱:你需要哪些食材?
要在 MMMU 或 OCRBench 等基准上拿高分,你的“食材库”必须包含以下类别:
| 数据类别 | 典型数据集 | 对应能力 | 构建/增强技巧 |
| 数据类别 | 典型数据集 | 对应能力 | 构建/增强技巧 |
|---|---|---|---|
| 通用对话 | LLaVA-Instruct, SVIT | 基础交互、多轮对话 | 使用 GPT-4V 将简短 Caption 扩展为多轮对话 |
| 详细描述 | ShareGPT4V, Allava | 图像细节感知 | 提示词需强调“详细描述背景、颜色、文字” |
| OCR & 文档 | TextVQA, DocVQA | 文字识别、结构化抽取 | 必须包含坐标 (Bbox) 或按阅读顺序排列的文本 |
| 数学 & 科学 | MathVista, Geo170K | 逻辑推理、符号计算 | 必须包含 CoT (Chain of Thought) 步骤,而非直接给答案 |
| 图表 & 统计 | ChartQA, PlotQA | 数据挖掘、趋势分析 | 需渲染合成图表,并保留底层数据表(Data Table)作为参照 |
| Grounding | RefCOCO, Visual Genome | 物体定位、空间理解 | 统一坐标格式(如 [0-1000] 或 [0-1]),避免格式混乱 |
| 纯文本 | ShareGPT, UltraChat | 语言能力保持 | 非常重要!防止模型丧失纯文本指令遵循能力 |
2.3 数据构建流水线:从合成到清洗
现代 VLM 的高性能主要归功于合成数据(Synthetic Data)。
Step 1: 图像源筛选 (Sourcing)
不要只用 COCO。为了多样性,需要混合:
- 自然图像:OpenImages, Objects365。
- 文档/图表:ArXiv 论文图、CommonCrawl PDF 截图。
- 网页截图:CC-Main 渲染图(用于 GUI Agent 能力)。
Step 2: 自动化标注与蒸馏 (Distillation Pipeline)
这是目前最主流的玩法:利用闭源强模型(GPT-4V/o, Gemini 1.5 Pro)来标注开源图片。
[Raw Image]
|
+---> [Prompt A: "Describe explicitly..."] --> [GPT-4V] --> [Dense Caption]
|
+---> [Prompt B: "Ask difficult questions..."] --> [GPT-4V] --> [Complex QA]
|
+---> [Prompt C: "Extract JSON info..."] --> [GPT-4V] --> [Structured Data]
- Rule of Thumb:One Image, Multi-Task。对同一张图,生成描述、问答、推理题等多种数据,最大化图像利用率。
Step 3: 严格的去重与去污 (Decontamination)
致命陷阱:如果不小心把 MathVista 的测试题放进了训练集,你的论文会被社区质疑。
- 基于 Embedding 的去重:使用 CLIP Image Embedding 计算训练集与 Benchmark 测试集的余弦相似度。相似度 > 0.9 的直接剔除。
- 基于 N-gram 的文本去重:防止 Question 部分完全重合。
2.4 数据混合策略 (Data Mixing Strategy)
拥有了数据,如何混合是炼丹的关键。
-
模态平衡 (Modality Balance): * 建议比例:纯文本数据 : 多模态数据 = 1 : 4 到 1 : 1。 * 如果纯文本太少,模型会变“笨”(逻辑能力下降);如果太多,视觉对齐会变弱。
-
任务重采样 (Task Resampling): * 高质量数据(如 Math, Code, OCR)样本少,需要过采样 (Up-sampling),例如重复 5-10 次。 * 低质量数据(如简单的 VQA)需要降采样。
-
动态分辨率策略 (AnyRes Strategy): * 训练数据中应混合不同长宽比和分辨率的图片。 * 如果只用 训练,模型在处理长条形图表(如网页截图)时会崩溃。构建数据时需保留原始比例,采用 "Patch Padding" 技术。
3. 本章小结
- 数据质量 > 数量:在 SFT 阶段,10 万条由 GPT-4V 生成的高质量、长思维链数据,胜过 1000 万条简单的 COCO Caption。
- 多样性是关键:不要偏科。即使你是做通用模型,也要加入 OCR 和图表数据,这能提升模型对细节的敏锐度。
- 必须包含纯文本:始终在 DataLoader 中混入纯文本对话数据,以维持 LLM 的“智商”和指令遵循能力。
- 坐标格式统一:Grounding 任务的坐标格式(0-1 还是 0-1000,
xyxy还是xywh)必须在所有数据集中强制统一,否则模型无法收敛。
4. 练习题
基础题 (熟悉配方)
- [填空] 在 VLM 数据构建中,将简短的图像描述(Caption)重写为包含丰富细节的长段落的技术被称为 __。目前最著名的此类数据集是 ____。
答案
Recaptioning (或 Dense Captioning); ShareGPT4V (或 LLaVA-NeXT, Allava)。
- [选择] 为什么在视觉 SFT 阶段要混入纯文本对话数据(如 ShareGPT)? * A. 增加视觉特征的鲁棒性 * B. 防止灾难性遗忘,保持逻辑推理和指令遵循能力 * C. 纯粹为了凑数据量 * D. 让 ViT 学习阅读文字
答案
B。如果不加纯文本,LLM 可能会退化,导致只会看图说话,无法进行复杂的逻辑推理或遵循格式要求。
- [判断] 为了提高 ChartQA 的分数,我们可以直接把 ChartQA 的 Validation 集放入训练集中训练,只要不放 Test 集就不算作弊。
答案
错误。虽然技术上这不算 Test Set Leakage,但这属于过度拟合 Benchmark(Validation Set Overfitting),会导致模型泛化能力差,且在学术界被视为糟糕的实践(Bad Practice)。
挑战题 (实战模拟)
- [配方设计] 你正在训练一个面向自动驾驶场景的 VLM。 * 需求:识别交通标志(OCR)、判断前车行为(推理)、输出可行驶区域坐标(Grounding)。 * 任务:请列出你的数据配方(来源类型 + 混合比例),并说明理由。
提示与参考
参考配方:
- 通用 SFT 数据 (30%):保持基础对话能力。
- 交通场景 Caption (20%):使用驾驶视频抽帧,用 GPT-4V 生成关于路况、天气、车辆行为的 Dense Caption。
- Mapillary/Cityscapes Grounding (30%):强监督数据,训练 Bbox 和 Segmentation 能力。
- OCR 特定增强 (10%):专门的交通标志数据集(如 TT100K),转换成 VQA 格式。
- 驾驶行为推理 (10%):构造 QA 对,例如 "Q: 为什么要减速?A: 因为前方有行人横穿。"(CoT 数据)。
- [故障排查] 你的模型在训练完 SFT 后,回答问题总是非常简短(例如 "Yes", "No", "A dog"),即便你提示它 "Please explain in detail"。 * 原因分析:可能出了什么问题? * 解决方案:如何调整数据?
提示与参考
原因: 训练数据中包含了太多简短回答的数据(如 VQAv2, COCO Caption),或者 Prompt 模板没有区分简答和详答。
解决:
- 数据清洗:剔除或重写那些只有一两个词的回答。
- System Prompt:在训练数据中加入 System Prompt,明确要求 "Answer in detail"。
- 数据重采样:大幅提高长文本(ShareGPT4V, CoT)数据的采样权重。
- [思维链构造] 针对数学题 "图中有个三角形,底是3,高是4,求面积",请写出一个标准的 CoT (Chain of Thought) 格式的训练数据 Output。
提示与参考
不好的 Output: "The area is 6."
好的 Output (CoT):
"Based on the image, we can identify a triangle.
- Identification: The base of the triangle is labeled as 3, and the height is labeled as 4.
- Formula: The area of a triangle is calculated as .
- Calculation: Substituting the values, we get . Therefore, the area of the triangle is 6."
5. 常见陷阱与错误 (Gotchas)
5.1 数据污染 (Leakage) 的隐蔽性
- 陷阱:你以为只要 URL 不同就没重复。
- 现实:很多 Benchmark 的图片就是从网上(Flickr, Wikipedia)爬的。你的预训练数据集(如 LAION)极大概率包含了这些图。
- 对策:必须进行 Image-level Decontamination。对 MathVista、MMMU 等核心榜单,计算图片特征相似度,剔除所有相似度 > 0.9 的训练样本。
5.2 坐标词表冲突 (Coordinate Token Conflict)
- 陷阱:在做 Grounding 任务时,模型输出的坐标总是不准,或者输出像
[0.35, 999]这样奇怪的混合格式。 - 原因:LLM 的 Tokenizer 对于数字的处理很弱(例如把 "356" 切分成 "3", "56")。
- 对策:
1. 引入特殊 Token(如
<loc_0>到<loc_999>)专门代表坐标,不复用普通数字 Token。 2. 或者始终使用归一化的 2 位或 3 位小数纯文本,并确保 Tokenizer 不会乱切。
5.3 幻觉放大器 (Hallucination Amplifier)
- 陷阱:使用生成的合成数据训练,模型开始胡说八道。
- 原因:教师模型(GPT-4V)本身有幻觉,学生模型会完美继承并“放大”这些幻觉。
- 对策: 1. 置信度过滤:如果教师模型输出包含 "I am not sure", "It looks like" 等不确定词,丢弃该数据。 2. 规则校验:对于 OCR 数据,检查生成的文字是否真的出现在 OCR 引擎的检测结果中。
5.4 提示词过拟合 (Prompt Overfitting)
- 陷阱:用户问 "Describe the image",模型回答完美;用户问 "What do you see?",模型回答乱码。
- 原因:训练数据中所有的 Prompt 都是同一个模板。
- 对策:在构建 Dataset 时,必须对 Instruction 进行 Template Augmentation。准备 50-100 个同义指令模板,随机抽取使用。