
为什么Unlimited-OCR解析长文档不遗忘KV缓存与保留滑动窗口注意力机制深度解析【免费下载链接】Unlimited-OCRUnlimited OCR Works: Welcome the Era of One-shot Long-horizon Parsing.项目地址: https://gitcode.com/gh_mirrors/un/Unlimited-OCRUnlimited-OCR 是一个面向长文档的端到端 OCR 模型它把解码器的所有注意力层替换为 R-SWA参考滑动窗口注意力常被通俗称为「保留滑动窗口」让KV 缓存在解码全程保持恒定从而一次性解析数十页文档而「不遗忘、不降速」。本文用大白话带你吃透它背后的 KV 缓存管理与滑动窗口注意力机制并附上实测数据与上手路径适合想了解长文档解析原理的新手与普通用户。一、先看懂问题长文档为什么让 OCR「越读越慢」把大语言模型LLM当作 OCR 的「写字员」是当下主流思路模型看图片然后逐字吐出文字。这条路有个隐藏代价——KV 缓存会随输出不断膨胀。每生成一个新 token模型都要把「之前所有历史」的 Key/Value即 KV 缓存存下来供后续注意力使用。输出越长缓存越大、显存占用越高每一步注意力要扫的历史也越长于是生成速度被逐渐拖慢。也就是说传统模型解析 10 页、20 页文档时往往要「一页一页 for 循环、每页重置记忆」既碎又慢。而人抄书时并不会越抄越慢这正是 Unlimited-OCR 想要模仿的能力。 一句话概括问题不在「看不看得全」而在「解码阶段 KV 缓存和注意力计算量是否随长度线性失控」。二、核心答案R-SWA 参考滑动窗口注意力机制Unlimited-OCR 的方案是把解码器里的标准多头注意力MHA全部替换为 R-SWAReference Sliding Window Attention参考滑动窗口注意力。它的窗口由两段拼成窗口段作用是否随解码长度变化参考前缀窗口记为 $m$全部视觉 token prompt全局可见❌ 固定只取决于页数/分辨率因果滑动窗口记为 $n$只保留最近 $n$ 个已生成 token✅ 宽度固定随解码滑动每个新 token 都能看到「整张图」「最近的 128 个字」$n$ 默认 128。视觉/参考 token不参与状态转移——它们只被编码一次、全程静态避免「反复改写导致的画面逐渐糊掉」。模型因此既「始终盯着原文」又能「通过滑动窗口知道写到了哪里」实现软遗忘而非硬重置。 命名澄清论文明文称其为 R-SWA「参考滑动窗口注意力」。标题里的「保留滑动窗口」是一种通俗叫法——因为它对 KV 缓存采取「保留参考前缀 滑动输出窗口」的管理策略两者指的其实是同一套机制。三、KV 缓存为什么不再膨胀队列式缓存管理R-SWA 的关键工程实现是把 KV 缓存做成一个容量为 $m n$ 的队列每生成一个新 token就把队列里第 $m1$ 个最旧token 的 KV 逐出。用公式对比最直观标准 MHA$C_{MHA}(T) L_m T$随解码长度 $T$线性增长。R-SWA$C_{R-SWA}(T) L_m \min(n, T) \le L_m n$上界恒定。维度标准 MHAR-SWA缓存大小$L_m T$线性增长$L_m n$恒定$n128$注意力计算随 $T$ 增加而变慢窗口受限基本恒定GPU 显存线性膨胀保持不变其中 $L_m$ 是前缀长度视觉 token prompt与「已经生成了多长」无关。这意味着无论解析 10 页还是 40 页解码侧的缓存与计算量都稳定在 $L_m n$ 这一常数值。配合官方 SGLang 推理脚本里固定的上下文长度context-length 32768即可在恒定 TPStokens/s与恒定显存下持续解析。✅ 这正是「长文档不遗忘、不降速」的底层原因不是把缓存越堆越多而是用「固定窗口」做受控遗忘。四、实测长文档不降速、不遗忘4.1 解码越快越稳TPS 随输出长度几乎不掉速理论推理性能上限对比prefill 长度固定为 10理想并发下输出长度25651210242048307240966144DeepSeek-OCRTPS7229746874227167679164305823Unlimited-OCRTPS7230771578417881788279057848短输出时两者几乎持平输出拉到 6000 tokenDeepSeek-OCR 已落后约 35%而 Unlimited-OCR 因 KV 缓存恒定速度基本不衰减。4.2 页数越多越能扛长时程解析精度稳定在自建多页测试集小说/文档/论文按页数分组上的表现指标2 页5 页10 页15 页20 页40 页Distinct-35 ↑越高越好99.87%99.98%99.83%99.99%99.89%96.90%编辑距离 ↓越低越好0.03620.04520.05260.07870.05720.1069即便一次性输入40 页编辑距离仍低于 0.11、Distinct-35 约 97%——说明模型在长时程中并没有「迷失方向」。4.3 顺带还把单页精度做高了在 OmniDocBench 上Unlimited-OCR 总体分93.23v1.5较基线 DeepSeek-OCR 的 87.01 提升 6.22 分v1.6 达93.92。换句话说换成 R-SWA 不仅解锁长文档还对常规 OCR 是一次「免费午餐」。五、局限与未来方向当前受有限上下文32K约束前缀prefill仍会随页数累积变长尚未做到「真·无限」。短期训练 128K 等更长上下文支持更多页数的 prefill。长期构建「prefill 池」让模型自动抓取所需的 KV 片段模拟人「翻页查阅」从而实现真正的无限 OCR。泛化把 R-SWA 迁移到 ASR语音识别、翻译等同样需要长时程参考建模的任务。六、上手与延伸阅读想动手体验或深入了解可以从以下文件入手均为仓库内相对路径 完整技术报告Unlimited-OCR.pdf —— R-SWA 公式推导、Kernel 研究与全部实验数据都在这里。 批量推理脚本infer.py —— 自动拉起 SGLang 服务并发处理整目录图片或 PDF关键常量如CONTEXT_LENGTH32768、NO_REPEAT_NGRAM_SIZE35、NGRAM_WINDOW128就定义在此。 部署与推理说明README.md —— 涵盖 Transformers、vLLM、SGLang 三种推理方式其中 SGLang 段给出了--context-length 32768 --page-size 1等关键参数。 定制推理引擎wheel/sglang-0.0.0.dev11416g92e8bb79e-py3-none-any.whl —— 内置 R-SWA KV 缓存管理的 SGLang 版本。 参与贡献 / 许可CONTRIBUTING.md、LICENSE。如需克隆仓库进行本地体验可使用git clone https://gitcode.com/gh_mirrors/un/Unlimited-OCR一句话总结Unlimited-OCR 不靠「堆更大的上下文」而是用 R-SWA 把 KV 缓存锁死在 $L_m n$ 的常量上——参考前缀永远在、输出窗口只留最近 128 个字于是长文档解析既能看全图、又不遗忘、更不掉速。【免费下载链接】Unlimited-OCRUnlimited OCR Works: Welcome the Era of One-shot Long-horizon Parsing.项目地址: https://gitcode.com/gh_mirrors/un/Unlimited-OCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考