引言

在人工智能领域,文档理解——即机器阅读、解释并从扫描版 PDF、表格和发票中提取数据的能力——是一个巨大的瓶颈。虽然我们拥有像 GPT-4 或 Claude 这样强大的大型语言模型 (LLM) ,但在数百万份文档上运行它们不仅计算成本高昂,而且速度缓慢。理想情况下,我们需要更小、更快且同样能胜任工作的模型 (学生模型) 。

然而,训练这些较小的模型通常需要大量由人工标注的数据。这既缓慢、昂贵又死板。如果你在收据上训练一个模型,它在医疗表格上就会失效。这就是开放世界文档理解 (Open-World Document Understanding) 问题: 我们如何创建能够处理从未见过的文档类型的模型,而无需人类标注数千个新示例?

一篇名为 DocKD 的最新论文提出了一个迷人的解决方案: 知识蒸馏 (Knowledge Distillation) 。 与其让人类标注数据,为什么不让庞大的 LLM 来做呢?

此图展示了大型语言模型 (LLM) 如何处理来自“文档库”的文档以生成结构化标注。

如上图 1 所示,其核心理念是获取一个未标注的文档库,将其输入给智能的 LLM 以生成“合成”标注 (问题与答案、摘要等) ,然后使用这些数据来训练一个更小、更高效的模型。

但这里有个陷阱。LLM 是在文本上训练的,而不是视觉布局。如果你只是将 OCR (光学字符识别) 文本复制粘贴到 LLM 中,它往往会丢失表格和表单的上下文。 DocKD (Document Knowledge Distillation,文档知识蒸馏) 引入了一个框架,向 LLM 注入“视觉知识”,使其能够生成可与人工标注相媲美的高质量训练数据。

在这篇文章中,我们将剖析 DocKD 的工作原理、针对不同文档任务使用的具体技术,以及这种方法为何能让小模型在特定场景下超越其教师模型。


背景: 视觉文档理解的差距

要理解为什么 DocKD 是必要的,我们首先需要了解当前视觉文档理解 (VDU) 方法的局限性。

布局的挑战

文档不仅仅是一串文本;它们是空间排列。右上角的日期与正文段落中的日期含义不同。表格单元格内的数字与其上方和左侧的标题相关联。

传统的纯文本模型在这里会遇到困难。它们接收的是破坏了这种空间关系的序列化文本流。最近的 VDU 模型 (如 LayoutLM 或 DocFormer) 通过同时处理图像文本来解决这个问题。然而,这些模型需要监督。它们需要被告知“这个框是一个总数”或“这段文本是一个地址”。

知识蒸馏 (KD)

知识蒸馏是一种技术,由一个大型的“教师”模型生成预测 (软标签) 来训练一个较小的“学生”模型。在文档背景下,我们希望 LLM (教师) 观察文档并生成训练示例。

研究人员发现的问题是标准提示 (prompting) 会失效 。 如果你只是给 LLM 提供扫描发票的原始文本并要求它“生成问题”,它会产生低质量、重复或产生幻觉的数据,因为它无法“看到”文档结构。


核心方法: DocKD 框架

DocKD 框架旨在弥合重文本的 LLM 与视觉丰富的文档之间的差距。其核心前提是,如果我们向 LLM 提供外部文档知识——具体来说,就是标准 OCR 会遗漏的结构和视觉线索——我们就可以提示 LLM 生成更好的训练数据。

流程

该图展示了使用生成的任务特定数据训练学生模型的两个主要过程。

图 2 所示,该过程分为两个阶段:

  1. 数据生成 (教师) : 图像经过 OCR 处理。文本连同特定的提示词 (\(\mathbf{p}_{gen}\)) 以及至关重要的外部知识 (如布局信息或键值对) 一起被输入到 LLM 中。LLM 生成答案 (\(\mathbf{a}_{gen}\)) ,这些答案随后被转化为训练任务。
  2. 训练 (学生) : 生成的数据对被用于训练一个更小的 VDU 模型 (如 DocFormer) 。

研究人员将此框架应用于三个不同的任务,每个任务都需要独特的策略来注入视觉知识。

任务 1: 视觉问答 (VQA)

问题: 当 OCR 扫描文档时,通常是从左到右、从上到下的。如果你这样扫描一个表格,行数据会混杂在一起,使得 LLM 不可能理解哪个值属于哪一列。

解决方案: 作者使用了一个线性化模型 (Linearization Model) 。 他们没有使用原始文本,而是将文档转换为一种保留结构的 Markdown 风格格式 (例如,使用竖线 | 表示表格列) 。

\[ f _ { \mathrm { T } } ( \mathbf { d } _ { \mathrm { t e x t } } , \mathbf { p } _ { \mathrm { g e n } } ) \to \mathbf { a } _ { \mathrm { g e n } } = \{ ( \mathbf { q } _ { 1 } , \mathbf { a } _ { 1 } ) , ( \mathbf { q } _ { 2 } , \mathbf { a } _ { 2 } ) , \dots \} \]

这个公式简单地表示 LLM 接收文本和生成提示词,输出问题和答案对。

此图展示了使用文档中 OCR 提取的表格内容生成问答 (QA) 对的两种方法。

请看上面的图 3

  • 在 (a) 使用原始 OCR 文本中: 文本是混乱的。LLM 生成了一个微不足道的问题 (“表格编号是多少?”) 。
  • 在 (b) 使用线性化文本中: Markdown 格式告诉 LLM “这是一个表格”。LLM 现在可以生成一个复杂的推理问题 (“在没有地方法规的地区,被要求出示证明的购买者百分比是多少……?”) 。

通过 Markdown 教会 LLM 布局,合成的问题变得更难,对训练也更有用。

任务 2: 实体抽取

问题: 实体抽取涉及寻找特定字段 (如“总金额”或“供应商名称”) 。如果你要求 LLM “找出所有实体”,它倾向于只列出最明显的几个,或者臆造不存在的字段。

解决方案: 作者引入了一个键值对 (KV) 检测模型作为中间步骤。

  1. 外部工具检测潜在的键值对 (例如,“Date: 12/01/2023”) 。
  2. 这些对被迭代地输入到 LLM 中。
  3. LLM 为该值分配一个语义字段名称 (例如,它看到“Date:…”,并分配标签 Invoice_Date) 。 \[ f _ { \mathrm { T } } ( \mathbf d _ { \mathrm { t e x t } } , \mathbf p _ { \mathrm { g e n } - k \nu } , ( \mathbf f _ { i } , \mathbf e _ { i } ) _ { 1 : n } , \mathrm e _ { n + 1 } ) \to \mathbf a _ { \mathrm { g e n } - k \nu } = \mathbf f _ { n + 1 } \] 这种方法确保 LLM 不会错过细微的细节。它强制模型查看每一个检测到的视觉组件并对其进行分类。

此图展示了用于大型语言模型 (LLM) 从文档中提取实体的两种基于模板的方法 (p_gen-ent 和 p_gen-kv) 。

图 4 所示,迭代过程帮助 LLM 完善其理解,从原始文本转变为适合训练学生模型的结构化、语义化字段名称。

任务 3: 文档分类

问题: 要训练一个分类器,你需要多样化的标签。如果你给 LLM 看一篇科学论文,它可能只是将其标记为“论文”。但对于一个健壮的系统,你可能需要将其标记为“科学期刊文章”或“研究报告”。此外,训练判别器需要负样本——即知道文档不是什么。

解决方案: 作者使用了三步提示策略:

  1. 描述: 要求 LLM 用一句话描述文档。这迫使模型深入“阅读”内容。
  2. 正例标签: 基于描述,生成一个合理的标签列表。
  3. 负例标签: 生成一个明确不匹配该文档的标签列表。

然后训练学生模型从包含正例和几个负例的列表中选出正确的正例标签。生成的描述也会作为上下文输入给学生模型,从而丰富训练信号。


实验与结果

研究人员将他们的 DocKD 方法与标准的知识蒸馏 (KD) 基线 (使用原始 OCR 文本,没有复杂的布局注入) 进行了比较。他们在 DocVQACORD (收据) 和 RVL-CDIP (文档分类) 等标准基准上进行了测试。

视觉知识重要吗?

结果非常显著。通过注入视觉知识 (线性化、KV 对、描述) ,合成数据的质量飙升。

表 1: LLM 和学生 VDU 模型的文档理解结果。

表 1 展示了主要发现:

  • VQA (a 列) : 使用 DocKD 训练的学生模型 (81.0 ANLS) 明显优于标准 KD 模型 (76.9) 。令人惊讶的是,这个小学生模型在验证集上甚至超过了它自己的老师 (Claude-2) ,因为它针对该任务进行了专门化训练。
  • 实体抽取 (b 列) : 性能差距巨大。DocKD 得分 61.5 , 而标准 KD 仅达到 30.2 。 这证明了如果没有 KV 检测的引导,标准 LLM 在生成实体抽取训练数据方面非常糟糕。
  • 分类 (c 列) : DocKD 将准确率从 58.6% 提高到了 62.4%。

数据质量的力量

为什么 DocKD 效果更好?这不仅仅关乎数据的数量,更关乎质量

图 6: KD 和 DocKD 生成的数据对比

图 6 展示了并排对比。

  • 顶部 (VQA): 标准 KD 问了一个简单的问题: “样本代码是什么?”DocKD 问了一个复杂的交叉问题: “在采样点 EX-HOPPER 样本代码 J112 的平均水分含量是多少?”
  • 中间 (实体): DocKD 提取的相关字段是标准 KD 的两倍。
  • 底部 (分类): DocKD 提供了丰富的描述 (“一封概述建议研究的推荐信……”) ,从而得出了比标准 KD 通用的“研究提案”更精确的标签 (“技术推荐信”) 。

开放世界泛化能力

这项研究的“圣杯”是开放世界理解——处理模型从未见过的文档。

研究人员通过使用 LLM 生成的合成数据 (无监督) 训练学生模型,然后在域外数据集 (如 IRS 税务表格或维基百科截图) 上进行测试来验证这一点。

表 5: 开放集分类性能。

表 5 展示了一个关键结果。

  • DFv2-base (S): 在人工标签上训练的模型 (监督学习) 在已知类别上获得 86.1% 的准确率,但在未知类别上为 0.0% 。 它在开放世界中完全失败。
  • DFv2-base (U): 通过 DocKD 训练的模型 (无监督) 在未知类别上获得 56.1% 的准确率,并且在完全不同的数据集 (IRS-50, WikiDoc) 上表现良好。

这证实了从 LLM 蒸馏知识赋予了学生模型“通用智慧”,使其能够比在死板的人工标注数据集上训练的模型更好地适应新文档。


结论与启示

DocKD 论文为文档 AI 的未来提出了一个令人信服的论点。它证明了我们并不总是需要海量的人工标注数据集来训练有效的模型。相反,只要我们与大型语言模型进行正确的沟通,就可以利用它们的通用智能。

主要收获:

  1. 上下文为王: 你不能简单地将文档视为文本。注入视觉知识 (布局、线性化、KV 对) 对于生成高质量的合成数据至关重要。
  2. 小模型也能很强大: 一个小的学生模型,如果在高质量的合成数据上进行训练,可以媲美甚至击败更大的模型,尤其是在速度和效率方面。
  3. 为开放世界做好准备: 这种方式训练的模型不那么脆弱。它们处理未见过的文档类型的能力显著优于传统的监督模型。

这项研究为构建这样的系统铺平了道路: 一个单一的 LLM 可以“教导”一群更小、更专业的模型来处理发票、医疗记录或法律合同,从而让强大的文档理解工具变得普及,而无需支付巨额的标注成本。