简介:本文围绕超长文档OCR解析的核心难题展开,剖析传统分块处理在跨页内容衔接、显存瓶颈与解码成本上的痛点,并系统介绍稀疏参考滑动窗口注意力机制的设计思路与工程实现,帮助开发者理解如何让模型在有限显存下持续解析任意页数文档。
OCR(光学字符识别)技术发展至今,单页或数页文档的识别准确率已经达到相当高的水平。然而,当文档规模从”几十页论文”跃升到”上百页年报、上千页档案”时,问题的性质发生了根本变化——它不再是一个单纯的识别精度问题,而是一个长序列推理与资源约束的系统工程问题。
行业常见的技术方案是:将长文档拆分为若干小块,逐块处理,最后拼接结果。这种做法在工程上直观且易于实现,但存在两个显著缺陷:
这就引出了一个核心矛盾:模型需要”看到”足够多的上下文才能保证跨页一致性,但显存和计算资源不允许它无限制地看下去。
解决思路的灵感来自一个非常朴素的观察——人是如何抄写一本厚书的?
当一个人抄到第500页时,他不会每写一个字就把前499页重新扫一遍。他的做法是:盯着当前页,遇到跨页内容时再回看相关的那几页。 页码之间的关联并非均匀分布——页内联系密集,跨页依赖稀疏。
这个观察对应到文档结构上,就是一条重要假设:
文档的注意力分布具有局部密集、远程稀疏的特性。
基于这一假设,可以设计一种稀疏参考滑动窗口注意力机制(Sparse-Reference Sliding Window Attention,SR-SWA),在保持跨页语义连贯的同时,大幅压缩计算量。
SR-SWA可以理解为两道逐级过滤的”筛子”,分别作用于页面级和Token级。
目标:从全部历史页面中,选出与当前解析最相关的少量页面作为视觉参考。
做法:
这一步的意义在于:它把视觉侧的计算量从与总页数成正比降低为与选定页面数成正比,而选定页面数是一个可控的超参数。
目标:在Page Gate选出的页面中,进一步挑出最关键的视觉Token参与注意力计算。
做法:
经过两道筛子,实际参与注意力计算的Token数量被压缩到很小的规模,但关键的跨页信息得以保留。
在上一代方案中,文本侧的KV Cache增长已经通过滑动窗口注意力机制得到了控制。但视觉侧的参考Token仍然需要全量关注,页数一多,视觉计算就成为新的瓶颈。
SR-SWA的价值在于:它在视觉侧也引入了稀疏化机制,使得文本缓存和视觉计算两个维度的开销同时受到约束。两者配合,才真正实现了”每一步解码成本近乎稳定”。
仅有稀疏注意力还不够。要让模型在工程上真正”持续往下解析”,还需要一套无限跨度解码(Infinite Span Decoding)策略。
将文档按页切分为块,每次处理一个块。这与传统的分块方案看似相同,但关键区别在于:块与块之间不是独立的,而是通过缓存复用建立联系。
当从第N块过渡到第N+1块时,保留第N块边界页的KV Cache,作为第N+1块解析时的历史参考。这样:
在单序列推理条件下,采用分块与缓存复用方式后,KV Cache峰值显存可以从数十GB级别降低到1~2GB级别(具体数值取决于模型规模与页面复杂度)。这意味着:
需要明确的是:”无限”指的是解析跨度可以持续延伸,而非总耗时不变。整本书的总处理时间仍然随页数正常增加,但每一步的成本保持稳定。
Page Gate的相关性打分函数需要根据文档类型调整。例如:
Token Sieve的筛选粒度直接影响精度与效率的权衡。粒度过粗会丢失细节,粒度过细则压缩效果有限。实践中通常采用多尺度Token桶的方式,兼顾局部细节与全局结构。
超长文档OCR解析的核心挑战,不在于单页识别精度,而在于如何在有限显存下保持跨页语义连贯,同时让解码成本不随页数增长而失控。
SR-SWA通过Page Gate和Token Sieve两道筛子,将视觉侧的计算从”全量参考”压缩为”稀疏参考”;无限跨度解码通过按页分块与边界缓存复用,让解析过程可以持续延伸。两者结合,使得模型能够在显存受限的条件下处理任意页数的文档,减少拆分与拼接带来的工程复杂度。
对于开发者而言,理解这套机制的价值在于:它提供了一种在长序列场景下平衡精度、显存与工程复杂度的通用思路——不是简单地”拆开再拼回去”,而是让模型学会”像人一样有选择地回看”。