△SR-SWA借鉴人类抄书时的局部聚焦方式
顺着人类抄书的思路,文心Unl
imited OCR 2引入了稀疏参考滑动窗口注意力机制(SR-SWA)。
它的筛选分两
层:先把需要参考的页面筛出来,再从筛出来的页面里挑出真正相关的局部信息,把无关计算挡在门外。
从整体架构看,文心Unlimi
ted OCR 2延续了上一代的基础设计。
△文心Unlimited O
CR 2整体架构
书页图像先进入DeepEnco
der,被转成模型能处理的视觉Token——可以理解成一组记录页面内容与版面特征的数据卡片。
接着,语言模型根据这些卡片,一
步一步生成识别结果。
关键变化就发生在语言模型内部:
上一代采用的参考滑动窗口注意力机制(R-SWA),在这一代升级为SR-SWA。
架构图中左下方展示的,就是SR-SWA的两层筛选过程。
第一层是Page Gate,管
「该看哪几页」。
它根据模型当前解析到的位置,把
候选视觉信息收拢到相关页面范围内,不让无关页面来凑热闹。
放到抄书的场景里,就像读到某一
页时,先找到与这一页相关的几个页面,而不是从头翻遍整本书。
第二层是Token Sieve
,管「这一页里该看哪几行」。
选对页面只是第一步:即使在这些
页面中,也不必让所有视觉Token都参与计算。Token Sieve会再做一次筛选,从页面里挑出与当前内容更相关的视觉信息块,以捕捉长距离视觉依赖关系。
架构图右侧展开了这一过程:先用
各个信息块的简要表示算出相关性,再通过TopK挑出得分最高、数量固定的信息块。
挑完之后,模型仍然会去看这些块
中的具体视觉信息,而不是只看个摘要。
两层机制配合,让模型既能在长文
档中找到相关页面,又能减少每一步需要处理的视觉信息,从而提升长文档解析效率。
△Token Sieve细节

筛选出的视觉信息,还会与图中的Local Window(局部滑动窗口)一起参与解析。
这个窗口大小固定,装着最近的上下文,并随着生成过程一路向前平移,负责让模型顺着刚才的内容往下写。
信息块数量固定,局部窗口大小也
固定,每一步需要参考的信息量就被框住了——文档再长,这一步还是这么多活儿。不会出现「书越厚、每写一个字越费劲」的情况。
SR-SWA负责的是每一步少算
点;而显存里到底要留多少信息,则是另一个问题。
每页图像经过编码,都会变成一组
视觉Token。模型生成解析结果时要参考它们,因此会存下对应的KV缓存,供后续计算复用。
如果一次性读入整份文档,再把所
有页面的视觉缓存都留在显存里,页数越多、占的地方越大。
更麻烦的是:哪怕这些页面根本没
参与当前计算,只要缓存没释放,它们照样占着显存不走。这就好比抄书时把每页草稿都摊在桌上,一页不扔——桌子再大也不够用。
所以,少算一些,还得配合少存一
些。
文心Unlimited OCR
2为此引入了无限解码机制(Unlimited-Horizon Decoding Paradigm),通过分块处理控制缓存占用。
△分块解码示意图
这套机制把
文档划成大小可控的页面块,依次解析。相邻两块重叠一页,上一块的最后一页,也是下一块的起点——一枚现成的书签。
进入下一块时,模型直接复用这页
重叠页的视觉KV缓存,同时保留上一段输出末尾的文本缓存,让前后内容接得上。其余已经用不上的页面视觉缓存,就及时释放,腾出显存。
这样一来,显存里需要保留的视觉
缓存,就被压在当前处理块的规模内。处理完一块,留下衔接所需的信息,再开下一块——不必让整份文档的视觉缓存从头到尾占着位子。
*SR-SWA负责减少每一步的
计算,无限解码机制负责控制缓存占用。两者配合,才能让模型持续解析超长文档。884页《指环王》42分钟读完,缓存降到1.77GB技术讲了这么多,我们也想亲眼看看效果:直接丢给它一份884页的英文版《指环王》。大约42分56秒后,解析完成。884页输入,对应884页输出,平均每页耗时约2.9秒。差不多是一集电视剧的功夫,「中土世界」就走完了一整趟。这么长的文档,处理到后面,识别效果还能跟得上吗?我们特意抽查了第600页和第750页的正文:识别文本与原文一致。翻到第750页还能一字不差,说明模型没在前面「读嗨了」。整个任务中,系统还标记了466处跨页合并。比如接近书末的第873至874页,被分页硬生生截断的句子,也在输出中重新接了回去。实测展示了整本书连续解析的过程,技术报告则回答了另外三个问题:需要多少缓存、能有多快、识别质量又如何。在百页级基准MarathonDocBench上,团队把标准解码与Unlimited-Horizon Decoding摆在一起做了对比。单序列推理时,采用分块处理和边界缓存复用后,峰值KV缓存占用从47GB降至1.77GB,减少约96%。*
原本需要同时留在显存里的大量页面信息,现在可以分批处理、
及时释放。这里的1.77GB仅指KV缓存,模型权重等其他显存开销另计。
省缓存之外,报告还测了多份文档同时处理时的表现。
在另一
项16路并发测试中,采用这套解码方式后,端到端吞吐量从360提升至1315Token/秒,约为标准解码的3.65倍。
△解码方式对比:单序列峰值KV缓存与16路并发吞吐量
对需要批量处理年报、技术手册的服务来说,这两项变化都有实际意义:显存占用降下来,同样一块卡就能塞进更多活儿;并发跑起来,单位时间内输出的内容也更多。
用户也不需要操心了,照旧提交整份文档,分块和衔接由模型在
内部完成,省掉了手动拆文件、分批提交再拼接的麻烦。
更快、更省之外,解析质量也得守得住。
MPDocBenc
h考察的是多页文档的解析质量:面对数十页长的文档,模型既要准确识别内容,也要还原文档结构。
这项测试中,文心Unlimited OCR 2取得了84
.59的综合得分。
为了进一步测试百页级文档,团队还新
建了MarathonDocBench。它包含100份文档,每份103至300页。不少段落和表格会延续到下一页,专门考验模型能否把前后内容正确衔接起来。
在这套更长、更刁钻的基准上,文心Unlimited OC
R 2取得了77.06的综合得分。两项评测中,它的综合得分均为报告所列参评模型中的最高值。
△出自技术报告:多页文档解析评测结果
长文档处理速度的
变化同样明显。在报告的百页级测试中,SR-SWA的单步解码速度分别达到Full Attention(全注意力机制)的7.0倍、上一代所用R-SWA的5.6倍。
看曲线更直观
:随着文档变长,前两种方案的单步解码耗时一路往上爬,而SR-SWA的单步耗时几乎是条水平线。
这意味着,模型每生成一个Token所需的时间,不会因为输
入页数增加而明显变长——书越厚,但写字的速度不变。
△不同文档长度下的单步解码延迟
对比上一代,文心Unl
imited OCR 2的单页综合得分基本持平。
真正拉开差距的地方,出现在文档变长之后:能连续处理的页面
更多,跨页内容认得更准,长文档解析的计算和缓存开销同步下降。
至于大家怎么用嘛......
你可以输入几百页的年报,或
者一本厚厚的技术手册。
尤其是
扫描件:先交给模型连续解析、转成文字,再去检索信息、核对内容,也能少折腾不少拆页和手工拼接的活儿。
不过,这么强的OCR,谁拿来工作啊……
当然是用来看小
说了!
OCR 3.0时代,来了
当然
,从几页材料到整本书,OCR需要解决的问题也在发生变化。
技术报告中,团队将文档解析的演进概括为OCR 1.0、2
.0和3.0三个阶段。
早期的OCR更像
一条分工明确的流水线:先找到文字的位置,再识别其中的内容,最后整理版面和输出结果。如果涉及多页解析,通常是一页一页处理,然后把结果拼接起来,这就是OCR 1.0。
不同模块各司其职,但前一步的错误,
也可能一路传到后面——一个环节打喷嚏,后面全感冒。
到了OCR 2.0,视觉语言模型开始直接从页面图像生成解
析结果,减少多个模块之间的交接。第一代Unlimited OCR,就把这种端到端解析扩展到了数十页文档。
△AI生成
当文档从数十页增加到几百页,连续解析既要保
证前后内容衔接,也要控制计算和缓存开销。
文心Unlimited OCR 2通过按需参考与分块解码
,让模型处理更多页面时,不必让每一步的计算范围随页数扩大,也不必一直保留所有页面的视觉缓存。
团队将这一步称为OCR 3.0:把持续处理整份文档作为新
的技术目标——一口气,不分页,无限解析,永不宕机。
而且吧,这个目标,还有个二次元版本。
Unlimited
OCR Works这个名字,本身致敬的是《Fate/stay night》中的「无限剑制」,也就是Unlimited Blade Works。
△《Fat
e/stay night》动画官网首页
在
原作设定里,这是一种叫作「固有结界」的魔术,施展后,会展开一片插满无数刀剑的特殊空间。
上一代发布后,Hugging Face用户Snarcy发
现了这个命名梗,索性把经典咏唱改成了OCR版本。
到了第二代,团队还真把这段改写收进了技术报告的引言,并保
留了Snarcy的署名。
于是,翻开这份讨论注意力机制和显存开销的报告,开篇你将
看到这样一段咏唱:
Pixels are my body, and toke
ns are my blood.
像素为身,而Token为血。
I have parsed
over a thousand pages.
我已阅尽千余页文档。
Unknown to KV cac
he.
不为KV Ca
che所限,
Nor known to c
ontext limits.
不为上下文长度所缚。
So, as I pray: Un
limited OCR Works
故而,我在此祈愿:Unlimited OCR Works
。
从47GB降到1.77GB,「不为KV缓存所限」这句,
还真没白唱。
也是老中二了。

百度的OCR又升级了,文心Unlimited OCR 2正式发布并开源!

这次,它直接挑战一口气读完整套小说。

7部《哈利·波特》,从《魔法石》到《死亡圣器》,连续识别、转写,3600+页一路读到最后。

换成《三体》全集,同样能一口气读完,三本书1200+页,几十万字,中间也不带喘的。

不过,连着读这么多页,模型得先过一道关:显存。

文档越长,推理时需要保留的中间信息(KV缓存)就越多——可以理解为模型边读边记的小抄,页数越多,小抄越厚。小抄厚重,不光占地方,翻起来也慢。

在技术报告的百页级单序列测试中,文心Unlimited OCR 2给出了一组对比:

峰值KV缓存占用从标准解码(将所有页面的视觉缓存同时保留在显存中)的47GB降至1.77GB,一口气减少了约96%。

47GB是什么概念?比不少笔记本电脑的整机内存还大。而这还只是KV缓存,模型权重等其他开销另算。

它的上一代Unlimited OCR,已经凭借多页文档连续解析能力,在开源社区积累了相当的人气:累计下载量超过1000万,在GitHub上收获约2.86万Star。

从社区制作在线Demo,到支持SGlang推理,围绕它的适配也在持续推进。

到了第二代,升级重点在于连续处理更长文档的同时,把计算和缓存负担降下来。

打开网易新闻 查看精彩图片

为此,文心Unlimited OCR 2提出稀疏参考滑动窗口注意力机制SR-SWA,让模型按需选取相关页面和视觉信息,减少重复计算。

配合持续解码机制,模型能够连续处理超长文档,单步解码开销也不会随着文档变长而水涨船高。

目前,文心Unlimited OCR 2已在Hugging Face和GitHub正式开源。

开源地址:
*GitHub:https://github.com/baidu/Unlimited-OCR*
*HuggingFace:https://huggingface.co/baidu/Unlimited-OCR-2*
拆解核心技术:SR-SWA怎么少算,分块解码怎么少存
连续读完几百万字、3600+页的《哈利波特》全集,文心Unlimited OCR 2究竟是怎么做到的?
它借鉴的,其实是人类抄书的思路。
人手抄书时是什么流程?看一段、抄一段,眼睛主要盯着正在抄的那一页;只有遇到需要前后对照的地方,才回头翻一翻相关页面。
抄书这件事,人类比模型更早就想明白了:没人会一边抄《论语》,一边在脑子里同时把《论语》全部页数摊开一起看。
但上一代Unlimited OCR不是这么干的:虽然通过R-SWA已大幅降低推理阶段的KV缓存,但再回看的过程中,所有输入页面的视觉信息依旧都要参与注意力计算。
文档越长,算的信息越多,而其中相当一部分,跟当前正在识别的那几行字压根没关系——典型的「陪跑」。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

打开网易新闻 查看精彩图片

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片