TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

韩语文档 OCR 比较 1:将 PP-OCRv5、PaddleOCR-VL-1.6、Unlimited-OCR-2 放在相同的 60 页中重新测试

状态:实测(2026 年 10 月 29 日至 10 月 30 日,单张 24GB 消费级 GPU)。 所有数字均取自亲自测量的原始数据(每页的输出原文、测量日志、 评分脚本)。论文数值与通过打开原文确认的表格和章节编号一起记录,未能测量的标注为「未实测」, 在原文中未找到的标注为「未确认」。安装过程中的遭遇和安全备忘录已单独收录于 第 2 篇中。

目录

1. 测了什么,为什么测

OCR(光学字符识别)是从图片或扫描页中提取文字的工作。老旧的方式分为两个步骤。首先在页面中寻找有文字行的 位置(检测),然后将找到的行逐个切开并作为文字读取(识别)。如今,直接观察整张图片并立即写出 Markdown 的 视觉语言模型 (VLM,接收图像作为输入的语言模型)占据了文档 OCR 排行榜的前列。

这次挑选的引擎有三个。这三个引擎都出自同一家公司(百度)旗下的系列,但读取页面的方式各不相同。

引擎 单行 我们使用的版本
PP-OCRv5 韩语 传统检测+识别流水线。两个小型专用模型 PaddleOCR 3.7.0,检测 PP-OCRv5_server_det,识别 korean_PP-OCRv5_mobile_rec
PaddleOCR-VL-1.6 布局模型将页面分割为元素,0.9B VLM 分别读取每个元素 PaddleOCR 3.7.0, PaddleOCR-VL-1.6
Unlimited-OCR-2 将图像压缩为视觉 Token,3B MoE(混合专家)解码器一次读取多页 baidu/Unlimited-OCR-2(2026-10-27 发布),Transformers 4.52.1

为什么要亲自测试。因为文档 OCR 的代表性基准测试中没有韩语。

因此问题有三个。在韩语文档中,这三个里哪个最准确。速度有多快,消耗多少内存。以及出错时 如何 出错。

2. 三款引擎的读取方式有何不同

세 엔진은 쪽을 이렇게 읽는다 왼쪽에서 오른쪽으로. 회색 글자는 우리가 쓴 설정 PP-OCRv5 한국어: 고전 파이프라인 글줄 검출 server_det 줄마다 인식 korean mobile_rec 위에서 아래로 줄 글자 잇기 작은 전용 모델 둘. 쪽 구조는 모른다 PaddleOCR-VL-1.6: 레이아웃 + 작은 VLM 레이아웃 PP-DocLayoutV3 요소마다 잘라 0.9B VLM 읽는 순서대로 마크다운 VLM 은 잘린 요소 하나만 본다 Unlimited-OCR-2: 광학 압축 + 긴 디코딩 DeepEncoder 16배 압축 3B MoE 디코더 활성 약 0.5B 여러 쪽을 한 번에 출력 SR-SWA: 단계마다 약 512토큰만 참조 Unlimited-OCR-2 의 한 쪽은 Gundam(타일) 모드, 여러 쪽은 Base 모드(쪽당 시각 토큰 273개)로 읽는다
图:三款引擎读取页面的方式

PP-OCRv5 韩语不了解页面结构。检测器寻找文字行方框,识别器逐行输出文字。输出结果是将各行的文字从上到下 连接起来。根据 PaddleOCR 3.0 技术报告(arXiv 2507.05595,§2.1),该系列整体为 0.07B,小于 100MB(基于报告中的基础 模型标准,韩语识别模型的大小未确认)。

PaddleOCR-VL 将工作分为两部分(1.0 论文 arXiv 2510.14528,§2.1)。当布局模型(从 1.5 版开始为 PP-DocLayoutV3)确定「什么东西以什么顺序在什么地方」后,0.9B VLM(NaViT 方式动态分辨率编码器 + ERNIE-4.5-0.3B)仅读取单个裁剪元素的内容。 VLM 不会一次性查看整个页面。1.6 版(arXiv 2606.03264)保持结构不变,仅更改了数据和后训练。它挑选并补充了模型容易出错的样本(8 个检查点和预测结果出现分歧的 16 种畸形、古籍与稀有字符),并依次经历了 CPT、SFT 和 GRPO 强化学习(§3、§4)。

Unlimited-OCR-2 的骨架是 DeepSeek-OCR(arXiv 2510.18234)的「光学压缩」。编码器(DeepEncoder)将 1024×1024 图像缩小 16 倍,压缩为 256 个 左右的视觉 Token,然后由 3B MoE(混合专家,每个 Token 仅使用部分专家)解码器编写文字。第 2 篇报告(HF 公开 PDF,第 5-7 页) 新增的是 SR-SWA(稀疏引用滑动窗口注意力机制)。解码器在生成下一个 Token 时,不会查看所有页面的所有视觉 Token,而是只查看该页面的 几个块以及紧邻的前一个输出。根据我们收到的配置值计算,远程 12 块×32 + 本地 128 = 512 个 Token,这与模型卡片中的「512 tokens」 相符。这是一个旨在确保即使页面增加,单步计算量也不会增加的装置。

这两个 VLM 的训练数据之间也存在有趣的联系。Unlimited-OCR-2 的伪标签(由其他模型而非人工生成的标准答案)提取自 MinerU2.5-Pro 和 PaddleOCR-VL-1.6 (第 2 篇报告第 8 页)。本次对比中的两个 VLM 同时也存在师生关系。

3. 测试文档与评分

制作了答案已知的文档

实际扫描的文档需要人工逐字输入正确答案。因此我们反其道而行之。先确定正确字符,然后用这些字符绘制页面。 正文部分从 TT Lab 的技术学习笔记中提取了韩文占比超过 40% 的段落,并以 A4 尺寸(150dpi,1240×1754 像素)使用 Apple SD Gothic Neo 单一款字体进行绘制。60 页按如下方式划分:

组合 页数 制作方法 正确字符数(标准化后)
普通正文 8 单栏正文,26px 字体 9,833
模糊副本 8 普通正文 8 页进行高斯模糊 → 旋转 1.5 度 → 缩小 0.6 倍 → JPEG 质量 35 9,833
韩语表格 4 表头为韩语的 6 列 23 行网格表格 2,285
长文档 40 不同段落 40 页,24px 字体 48,878

模糊副本与普通正文的 文字完全相同。 因此,同一引擎两组之间的差异即为「因画质变差而产生的错误」。

评分:两种字符错误率(CER)

CER(Character Error Rate,字符错误率)是将标准答案转换为输出结果所需的最小编辑(插入、删除、替换字符)次数除以正确字符数所得的值。 若为 1%,则意味着平均每 100 个字符错一个。编辑距离是通过 Myers(1999)的位并行算法求得的。

由于每个引擎的输出格式不同,因此首先进行 标准化处理。使用 Unicode NFKC 进行统一,清除 Markdown 符号(#, *, | 等)、HTML 标签以及模型附加的 坐标标记,并 去除所有空格和换行符。 鉴于空格和换行会因布局而异,故仅对比字符顺序。

随后计算两次 CER。

区分两者的原因是各个引擎 处理标点符号的习惯存在很大差异。如果将它们合为一个数字,那么「经常漏掉标点符号的引擎」与「错误读取韩文的引擎」就会获得相同的分数。诸如搜索索引等只需文字正确即可的用途,以及制作供人类直接阅读的文档的用途,需要查看不同的数字。

评分陷阱:如果不清除坐标,CER 高达 16%

Unlimited-OCR-2 的输出中每个块都附带坐标。例如,格式如下:

<BLOCK>text[71, 96, 900, 160]<FORK>우리에게 의미는 「언젠가 휴대폰 안에서 …

最初的评分器 <…> 仅清除了标签而保留了 text[71, 96, 900, 160] 。其结果是,普通正文的 CER 中位数 为 16.3%(每页 13.9% 到 17.5%)。当多加了一条坐标正则表达式后, 0.80% 变成了 。模糊副本从 16.95% 降至 1.99%,表格从 8.38% 降至 0.17%(使用相同的输出、相同的标准答案重新计算)。这意味着 20 倍的差距竟然源于一种输出格式。在对 VLM 输出进行评分时,首先肉眼阅读几页输出原文并调整标准化规则才是正确的流程。

4. 结果:准确率、速度、内存

引擎 组合 页数 整体 CER(中位数) 整体 CER(最大值) 纯文字 CER(中位数) 秒/页 最大 GPU 内存
PP-OCRv5 韩语 普通正文 8 1.52% 2.37% 0.33% 0.36 2.27 GiB
模糊副本 8 4.47% 4.89% 1.23% 0.20 2.27 GiB
韩语表格 4 0.00% 0.00% 0.00% 0.30 2.27 GiB
长文档(逐页,40 页) 40 1.41% 0.49% 0.34 2.27 GiB
PaddleOCR-VL-1.6 普通正文 8 0.48% 1.71% 0.28% 13.81 5.80 GiB
模糊副本 8 1.51% 2.68% 0.83% 14.04 5.80 GiB
韩语表格 4 0.00% 0.00% 0.00% 8.59 5.90 GiB
长文档(逐页,40 页) 40 0.53% 0.37% 14.39 5.80 GiB
Unlimited-OCR-2 普通正文 8 0.80% 0.98% 0.75% 31.07 6.85 GiB
模糊副本 8 1.99% 3.25% 1.76% 30.91 6.85 GiB
韩语表格 4 0.17% 0.71% 0.19% 21.52 6.85 GiB
长文档(一次 10 页) 10 2.72% 2.01% 38.07 7.59 GiB
长文档(20页一次性处理) 20 2.59% 2.00% 41.21 8.81 GiB

阅读方法。中位数是将每页测得的 CER 排列后的中间值,如果是像第 8 页这样的偶数页,则采用靠上的值(第五个)。长文档作为一个整体进行评分,因此 只有一个值。时间是扣除预热单页后测得的平均值,长文档则是将总时间除以页数。内存是各框架分配器 记录的最大值(PyTorch·Paddle 的 max_memory_allocated),因此比 nvidia-smi 中显示的值要小。没有哪一页是 13 个批次全部失败的。

글자 오류율: 문장 부호를 빼면 순위가 바뀐다 ● 전체 CER(문장 부호 포함) ○ 글자만 CER(한글·영문·숫자) 일반 본문 8쪽(쪽마다 중앙값) PP-OCRv5 한국어 1.52 / 0.33 PaddleOCR-VL-1.6 0.48 / 0.28 Unlimited-OCR-2 0.80 / 0.75 흐린 사본 8쪽(쪽마다 중앙값) PP-OCRv5 한국어 4.47 / 1.23 PaddleOCR-VL-1.6 1.51 / 0.83 Unlimited-OCR-2 1.99 / 1.76 한국어 표 4쪽(쪽마다 중앙값) PP-OCRv5 한국어 0.00 / 0.00 PaddleOCR-VL-1.6 0.00 / 0.00 Unlimited-OCR-2 0.17 / 0.19 긴 문서 앞 10쪽(한 덩어리) PP-OCRv5 한국어 1.53 / 0.50 PaddleOCR-VL-1.6 0.58 / 0.39 Unlimited-OCR-2 2.72 / 2.01 0% 1% 2% 3% 4% 5% 오른쪽 숫자: 전체 / 글자만(%). 표는 세 엔진 모두 거의 0 긴 문서는 Unlimited-OCR-2 만 10쪽을 한 번에, 나머지는 쪽마다 읽음
图:字符错误率:总体 CER 与仅文字 CER

图中有三个值得指出之处。

PaddleOCR-VL-1.6 在所有四个批次中准确率最高。 普通正文的总体 CER 为 0.48%,相当于在约 1,230 个字符的页面中 错了大约六个字符左右。表格与 PP-OCRv5 一起,在所有 4 页中均为 0%。

除去标点符号后,排名会发生变化。 就总体 CER 而言,Unlimited-OCR-2(0.80%)优于 PP-OCRv5(1.52%)。然而,如果只计算文字, PP-OCRv5 为 0.33%,Unlimited-OCR-2 为 0.75%,排名随之反转。在模糊复印件中这一点更加明显。就总体 CER 而言,PP-OCRv5 为 4.47%,是三者中 最差的,但仅文字 CER 为 1.23%,优于 Unlimited-OCR-2(1.76%)。PP-OCRv5 的错误大多是 标点符号,而 Unlimited-OCR-2 的 错误大多是 文字。图中两点之间的条形越长,意味着标点符号错误越多。Unlimited-OCR-2 几乎没有条形。

一次性读取多页时,Unlimited-OCR-2 的错误大约增加了三倍。 如果拿同一篇长文档的前 10 页进行对比,PaddleOCR-VL-1.6 为 0.58%,PP-OCRv5 为 1.53%,而 Unlimited-OCR-2 为 2.72%(前 10 页的值是将 40 页的输出裁剪对齐到第 10 页末尾后重新计算得出的,如果对整个 40 页采用相同的方法,就会直接得出表中 0.53% 和 1.41% 的结果)。与逐页读取时(普通正文 0.80%)的差异源于分辨率模式。单页采用分块详细查看的 Gundam 模式,多页则采用每页 273 个视觉 Token 的 Base 模式读取。实际例子将在第 5 节中看到。

속도와 메모리: 같은 GPU, 배치 1, 서빙 엔진 없이 위 세 줄은 일반 본문 8쪽 평균, 아래 두 줄은 긴 문서 묶음 쪽당 걸린 시간 PP-OCRv5 한국어 0.36초 PaddleOCR-VL-1.6 13.81초 Unlimited-OCR-2 31.07초 UOCR-2, 10쪽 한 번에 38.07초 UOCR-2, 20쪽 한 번에 41.21초 최대 GPU 메모리(할당기 기준) PP-OCRv5 한국어 2.27 GiB PaddleOCR-VL-1.6 5.80 GiB Unlimited-OCR-2 6.85 GiB UOCR-2, 10쪽 한 번에 7.59 GiB UOCR-2, 20쪽 한 번에 8.81 GiB Unlimited-OCR-2 는 모델 카드가 「빠른 시험용」이라 부르는 Transformers 경로로 쟀다. 저자가 권하는 SGLang 서빙은 미실측
图:速度与 GPU 内存

速度不在同一个数量级上。在普通正文单页测试中,PP-OCRv5 耗时 0.36 秒,PaddleOCR-VL-1.6 耗时 13.81 秒(约 38 倍),Unlimited-OCR-2 耗时 31.07 秒(约 86 倍)。简单换算成一小时,分别约为 1 万页、约 260 页、约 116 页。PP-OCRv5 在模糊复印件中更快(0.20 秒)是因为图像 缩小到了 0.6 倍。内存方面,PP-OCRv5 为 2.27 GiB,PaddleOCR-VL-1.6 为 5.80 GiB,Unlimited-OCR-2 仅权重就占 6.32 GiB,单页为 6.85 GiB, 10 页为 7.59 GiB,20 页为 8.81 GiB,随着页数增加而增加。如果是 24GB 显卡,三者都绰绰有余。

不过,这两个 VLM 的耗时是 我们运行方式下的耗时,并非模型的极限。原因将在第 6 节中阐述。

5. 实际输出对比

下面来看数字后面的实际输出。下面两幅图是同一页(第 2 页)的同一位置。上方是将引擎接收到的图像按像素原样复制的切片, 下方是将三个引擎的输出对齐到正确位置后的结果。选择这一页是因为它的错误类型较为集中且全面(普通正文第 2 页的 CER 为: PaddleOCR-VL-1.6 为 0.09%,Unlimited-OCR-2 为 0.26%,PP-OCRv5 为 1.57%,比批次中位数略好一些)。

같은 쪽, 세 엔진의 실제 출력: 일반 본문 2쪽 위: 엔진이 받은 이미지 조각. 아래: 각 엔진의 출력 굵은 밑줄 = 틀리게 읽은 글자, 취소선 = 빠뜨린 글자 드문 받침: 「쟀」 PP-OCRv5 한국어 2026-10-13 에 졌습니다(5절 끝: 틀린 곳 1 PaddleOCR-VL-1.6 2026-10-13 에 잤습니다(5절 끝: 틀린 곳 1 Unlimited-OCR-2 2026-10-13 에 잤습니다(5절 끝: 틀린 곳 1 낫표 「 」 와 쉼표 PP-OCRv5 한국어 0.60 으로 '아마 탁구대,라고 했을 책상이, 틀린 곳 2 PaddleOCR-VL-1.6 0.60 으로 「아마 탁구대」라고 했을 책상이, 맞음 Unlimited-OCR-2 0.60 으로 「아마 탁구대」라고 했을 책상이, 맞음 뜻이 뒤집히는 「없 → 있」 PP-OCRv5 한국어 메시지도 없습니다. 맞음 PaddleOCR-VL-1.6 메시지도 없습니다. 맞음 Unlimited-OCR-2 메시지도 있습니다. 틀린 곳 1 띄어쓰기는 채점에서 빼므로 정답의 띄어쓰기로 보여 준다
图:同一页,三个引擎的实际输出:普通正文第 2 页
같은 쪽, 세 엔진의 실제 출력: 흐린 사본 2쪽 위: 엔진이 받은 이미지 조각. 아래: 각 엔진의 출력 굵은 밑줄 = 틀리게 읽은 글자, 취소선 = 빠뜨린 글자 드문 받침: 「쟀」 PP-OCRv5 한국어 2026-10-13 에 겠습니다(5절 끝: 틀린 곳 1 PaddleOCR-VL-1.6 2026-10-13 에 졌습니다(5절 끝: 틀린 곳 1 Unlimited-OCR-2 2026-10-13 에 겠습니다(5절 끝: 틀린 곳 1 낫표 「 」 와 쉼표 PP-OCRv5 한국어 0.60 으로 「아마 탁구대,라고 했을 책상이, 틀린 곳 3 PaddleOCR-VL-1.6 0.60 으로 「아마 탁구대,라고 했을 책상이, 틀린 곳 1 Unlimited-OCR-2 0.60 으로 「아마 탁구대」라고 했을 책상이, 맞음 뜻이 뒤집히는 「없 → 있」 PP-OCRv5 한국어 메시지도 없습니다. 틀린 곳 1 PaddleOCR-VL-1.6 메시지도 없습니다. 맞음 Unlimited-OCR-2 메시지도 있습니다. 틀린 곳 1 흐린 사본에서만: 「둘 → 돌」 PP-OCRv5 한국어 공개 가중치 둘(라켓 찾기 맞음 PaddleOCR-VL-1.6 공개 가중치 돌(라켓 찾기 틀린 곳 1 Unlimited-OCR-2 공개 가중치 돌(라켓 찾기 틀린 곳 1 띄어쓰기는 채점에서 빼므로 정답의 띄어쓰기로 보여 준다
图:同一页,三个引擎的实际输出:模糊复印件第 2 页

罕见收音(韵尾):「쟀」三者全部未能识别

「쟀습니다」是「재다」的过去式,在普通正文第 8 页中出现了 7 次。 三个引擎全部 7 次都识别错了。 即使在清晰的普通正文中也是如此。

「쟀」被识别成了什么 普通正文(7 次) 模糊复印件(7 次)
PP-OCRv5 韩语 졌 7 괜 4, 겠 3
PaddleOCR-VL-1.6 잤 6, 챙 1 졌 2, 채 2, 잤 1, 짧 1, 챗 1
Unlimited-OCR-2 잤 2, 잿 2, 썼 1, 겠 1, 잦 1 겠 3, 쪼 2, 켜 1, 챙 1

PP-OCRv5 在清晰的一侧总是将之识别为「졌」。识别器只在既定的字词表中挑选答案,如果「쟀」不在该字词表中,它就会像这样始终替换为最相似的字(实际上该字是否真的不在表中未做核实)。两个 VLM 的答案则比较分散。这似乎是因为在形状相似的字中,语言模型倾向于选择更常见的一侧。由于这是日常文档中罕见的收音(韵母),很可能是因为三个引擎的训练数据中这类样本较少。

还有更多类似的字。「힙」(「읽힙니다」、「밝힙니다」、「힙 메모리」)在一般正文中出现了 5 次,而 Unlimited-OCR-2 在这 5 次中全部识别成了「힘」或「립」,PaddleOCR-VL-1.6 全部答对,PP-OCRv5 则答错了一次。「씁니다」中的「씁」只有 Unlimited-OCR-2 把它识别成了「씽」(一般正文 3 次中的 2 次、模糊复印件 3 次全部如此)。相反,「랠리」中的「랠」则是 PP-OCRv5(「앨」)和 PaddleOCR-VL-1.6(「램」、「랄」)答错,而 Unlimited-OCR-2 在清晰的一侧答对了。在罕见的字面前,没有哪个引擎是绝对安全的,每个引擎的薄弱字也各不相同。

导致意思颠倒的错误:「없습니다 → 있습니다」

Unlimited-OCR-2 将「없」识别成了「있」。在一般正文中「없」出现了 14 次,其中有 2 次出错,在模糊复印件中也是同样的 2 次。图中的例子是将“连为什么原因都会告知的提示信息也 没有了”变成了“提示信息也 有了”。就 CER 而言,1,150 个字中仅有 1 个字错误,仅占 0.09%,但句子的意思却完全相反。两个 Paddle 引擎全部 14 次都答对了。

这个错误很难单凭字形来解释。「없」和「있」的收音形状有相当大的差异。当视觉依据较弱时,这似乎是解码器的语言知识倾向于填入更常见一侧的错误。PP-OCRv6 论文(arXiv 2606.13108)也将 VLM 系列 OCR 的这种“幻觉”视为一个问题。对于合同、检测结果等一个否定词就至关重要的文档,VLM 的输出应当以有人工审核的流程为前提。

标点符号:PP-OCRv5 会替换书名号,模糊时则会删掉

拉高 PP-OCRv5 整体 CER 的几乎全都是标点符号。数一下错误类型(通过对齐标准化文字来统计其他地方)可以发现,在一般正文中,将 「 替换为 ' 的有 46 次,将 」 替换为 ] 的有 42 次。在模糊复印件中,没有进行替换而是 直接删除了。 包括删除句号 60 次、删除 「 39 次、删除逗号 38 次、将逗号替换为句号 36 次、删除 」 30 次、删除间隔号 · 28 次。较小且模糊的点在检测阶段似乎没有被当作文字捕获到。

两个 VLM 的标点符号也会出错,但次数要少得多。在模糊复印件中,PaddleOCR-VL-1.6 将「 改为 ‘ 或 ' 的有 18 次,而 Unlimited-OCR-2 最多的则是模糊复印件中删除中圆点 18 次、将「 改为 ' 的 11 次。

顺便说明一下评测程序的一个小瑕疵。正文中的破折号 – 被三个引擎都识别为了连字符 -,由于正则化会把连字符视为 Markdown 符号并将其删除,因此每次在每组中被统计为 4 次「删除破折号」。严格来说,这是将破折号替换为了连字符,且三个引擎的输入完全相同,因此排名不会改变。

多页模式下的分辨率下降

Unlimited-OCR-2 一次性读取 10 页长文档的输出中,混入了单页读取时很难看到的错误。例如:「늘어납니다 → 놀아납니다」、「체감 → 채갑」、「멘션 → 댄선」、「가벼운 → 바뀌온」、「댓글 → 덧글」(3次)、「랠리 → 뭘리」等。不是单个字符,而是两三个字符一起崩塌,变成了形状相似的其他词汇。PaddleOCR-VL-1.6 逐页读取同一文档时,前 10 页的 CER 为 0.58%。

论文已经指出了原因。DeepSeek-OCR 表 3 显示,在相同的 Base 模式下,笔画密集的中文的编辑距离约为英文的 4 倍(0.205 对 0.054),而在增加了 Token 数量的 Gundam 模式下则优化为 0.097。Unlimited-OCR 第一篇报告(arXiv 2606.23050,§5.4)也指出,超过 40 页的文档中绝大多数错误 是由 Base 模式下无法识别小字 导致的。韩文也是带有收音的方块字,因此更接近中文。我们的结果与该解释相符。当每页的视觉 Token 减少到 273 个时,24px 韩文的收音就会发生模糊崩塌。

6. 为什么这么慢,以及为什么不能仅凭这些数字下定论

Unlimited-OCR-2 的单页 30 秒与论文中的速度相去甚远。但这两个数字 类型不同。

论文中的数字是并发吞吐量。 Unlimited-OCR 第一篇中的 5,580 TPS(每秒 Token 数,§5.2)是 512 个并发请求的总和,而第二篇表 4 中的 1,315 TPS 则是批次大小为 16 时的数值。如果平摊到单个请求,分别约为 11 和 82 Token/秒。第二篇图 6(b) 中每步约 3.8ms 是在批次大小为 3 时测得的。这三个数值均未公开硬件信息(未确认)。而我们 在批次大小为 1 时每秒 37.9 个 Token,每步 26.4ms (普通正文 8 页输出的 9,426 个 Token 除以 248.6 秒所得的值)。

硬件带来的影响并不大。 批次大小为 1 的解码在每一步都需要从内存中读取权重,因此受限于内存带宽。模型卡测试所使用的 A800 80GB 带宽为 1,935 GB/s(官方规格),而我们的 GPU 约为 936 GB/s,差距大约是 2.1 倍。如果以 bf16(2 字节)读取约 0.57B 的激活参数,每步大约是 1.14 GB,因此即使在我们的 GPU 上,理论上每步的下限也约为 1.2ms(估计值)。实际测得的 26ms 超过了该数值的 20 倍。瓶颈不在于硬件,而在于 执行路径。

Transformers 路径是「用于快速测试的路径」。 模型卡就是这么叫的,在服务部署时推荐使用 SGLang。阅读我们收到的远程代码(revision 5632329a)就会明白原因。这是一个逐个输出 Token 的 Python 循环,且没有 CUDA graph。每层 MoE 会通过 tokens_per_expert.cpu() 让 GPU 与 CPU 同步,解码注意力机制不会只计算选定的块,而是将整个缓存复制为 fp32,进行密集矩阵乘法后用掩码遮挡。结果虽然与稀疏注意力相同,但计算是密集的。因此,20 页的捆绑包耗时是 10 页捆绑包的 2.16 倍(输出 Token 为 1.96 倍)。每步耗时从 27.7ms 增加到 30.6ms,大约长了 10%。

SR-SWA 承诺的是“每步保持恒定”。 总时间与输出 Token 数量成正比,因此随页数线性增长是正常的。SR-SWA 防止的是全局注意力的平方级增长,而在第 2 篇的图 6(b) 中,这种差距急剧拉大的地方是在 50 页到 100 页以上(在 100 页时,全局注意力约为 26.7ms 对比 SR-SWA 约为 3.9ms,数值由肉眼读图得出)。以我们 10 页和 20 页的测量结果,无法验证 SR-SWA 的优势。

PaddleOCR-VL 也是同样的情况。 我们没有使用 vLLM 或 FastDeploy 服务器,而是通过 Paddle 动态图按顺序逐页读取。1.0 论文表 13 报告称,在单张 A100 上塞入 512 个 PDF,FastDeploy 达 1.62 页/秒,vLLM 达 1.35 页/秒。附录表 A2 和 1.5 版表 A8 中也有面向入门级消费级 GPU 的 0.36 到 0.54 页/秒。这与我们的 0.07 页/秒(13.81 秒)相差十倍以上。由于这也是批处理吞吐量,因此无法直接进行对比。

因此,从这个结果来看,有 不能 成立的说法。

7. 该如何选择

仅在我们的实际测量范围之内提供建议。基于韩语单段正文、网格表格、单张 24GB GPU、批大小 1。

要完成的工作 选择 依据与注意事项
快速处理大量页面,用于搜索索引 PP-OCRv5 韩语版 每页 0.36 秒,2.27 GiB。纯文字 CER 0.33%(模糊副本 1.23%)。引号和句号可能会被替换或消失
供人阅读的结果、模糊扫描件 PaddleOCR-VL-1.6 四个捆绑包中准确率最高(常规 0.48%,模糊 1.51%)。按我们的路径每页 14 秒,若为海量数据则需另外测试 vLLM 和 FastDeploy 服务部署
跨页表格、段落、长书籍 根据我们的实测暂不作判断 Unlimited-OCR-2 在文字准确率上是三者中最弱的(多页模式约 2.6%),且未测量结构优势。需通过 SGLang 路径另行测试
否定词和数字很重要的文档 无论使用哪个引擎,都以 人工审核为前提 “쟀(测了)”这个词三者在所有 7 次中全部拼错,且 VLM 可能会将意思完全颠倒(如将“없(无)”误认为“있(有)”)

也可以走将传统流水线与 VLM 结合的道路。例如,先用 PP-OCRv5 全部读取并建立索引,仅对需要人工阅读或置信度低的页面用 PaddleOCR-VL-1.6 重新读取。该组合的效果未经实测。

8. 局限性

Titi 碎碎念。 三个引擎把“쟀습니다(测了)”读了二十一次,二十一次全部拼错。本来想写“测了乒乓球的速度”,结果写成“睡了”就麻烦啦!所以 OCR 结果不能只挑一个数字,还要看到底错在哪里、怎么错的,然后再做选择。

参考资料

原文均于 2026-10-30 打开查阅。arXiv 为 HTML 版本,故用节和表编号代替页码。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论