StarDoc-AI/TeleOCR
摘要
TeleOCR 是一个轻量级的开源视觉-语言模型,专为文档解析设计,统一处理数字文档和相机拍摄文档,并在基准测试中达到了最先进的性能。
查看缓存全文
缓存时间: 2026/09/25 21:13
StarDoc-AI/TeleOCR · Hugging Face 来源:https://huggingface.co/StarDoc-AI/TeleOCR
https://huggingface.co/StarDoc-AI/TeleOCR#%F0%9F%94%A5-news🔥 最新动态
- 2026/09/10
- 我们已将 NaviDC-OCR 更名为 TeleOCR,后续所有模型迭代将在 TeleOCR 版本下开发和发布。
- 2026/09/01
- 我们注意到 EMNLP 2026 正在举办 Dr.DocBench 挑战赛 (https://eval.ai/web/challenges/challenge-page/2717/overview),这是一个文档解析竞赛。我们使用 NaviDC-OCR 的原生权重进行了评估,取得了优于 MinerU 2.5 Pro 和 PaddleOCR-VL 1.6 的结果。详细结果如下表 dr.docbench-challenge 所示。我们欢迎使用 NaviDC-OCR 参加竞赛。未来,我们将继续为社区提供有竞争力的解析模型。
- 2026/08/29
- 感谢 Nandraj 提供的 GGUF 转换和 llama.cpp 支持 🔗 NaviDC-OCR-GGUF (https://huggingface.co/nandraj/NaviDC-OCR-GGUF),以及社区分享的在 Ascend 910B 上部署 NaviDC-OCR 的经验!(https://zhuanlan.zhihu.com/p/2078516899093155893)
- 2026/08/17
- NaviDC-OCR 模型权重 (https://huggingface.co/StarDoc-AI/NaviDC-OCR) 和技术报告 (https://arxiv.org/pdf/2608.12898) 已发布。
https://huggingface.co/StarDoc-AI/TeleOCR#%F0%9F%93%96-introduction📖 简介
TeleOCR 是一个轻量级(约 1.2B 参数)的开源视觉语言模型,专为文档解析设计。与现有主要针对数字文档或相机捕获文档的方法不同,TeleOCR 将这两种场景统一在一个框架内。与之前的文档解析模型相比,TeleOCR 引入了:
- 用于自动生成伪标签的多节点共识投票 (Multi-node Consensus Voting, MCV)
- 针对相机捕获文档的几何感知文档建模
- 曲率引导的道格拉斯-普克采样 (Curvature-Guided Douglas-Peucker Sampling, CGDP)
- 用于自动数据精炼的图像到图像自验证
- 渐进式四阶段训练流程
- 用于表格和公式的“内容-结构解耦学习” 这些技术使得 TeleOCR 在数字文档和相机捕获文档基准测试中均达到了最先进的性能,同时保持了足够的轻量级以供实际部署。
https://huggingface.co/StarDoc-AI/TeleOCR#%F0%9F%93%8A-experimental-results📊 实验结果
TeleOCR 在多个公开的文档解析基准测试中取得了最先进的性能。
https://huggingface.co/StarDoc-AI/TeleOCR#layout-visualization-of-distorted-documents扭曲文档的布局可视化
为了评估模型理解复杂文档形变的能力,我们在公开的去畸变数据集 DocUNet 和 DIR300 上进行了视觉评估,代表性结果如图所示。TeleOCR 直接对扭曲文档进行布局和内容解析,无需去畸变预处理或专门的矫正模型,展示了在复杂几何形变下的稳健解析能力。
- DIR300 数据集上的解析评估。
- DocUNET 数据集上的解析评估。
https://huggingface.co/StarDoc-AI/TeleOCR#drdocbench-challengeDr.DocBench 挑战赛
| 模型 | 类型 | 参数 | overall ↑ | Text edit ↓ | formula cdm ↑ | Table teds ↑ | order edit ↓ |
|---|---|---|---|---|---|---|---|
| 专用 VLM | |||||||
| TeleOCR | 67.96 | 0.190 | 30.02 | 64.97 | 0.398 | ||
| Mineru 2.5 pro | 62.26 | 0.340 | 20.04 | 67.75 | 0.356 | ||
| OvisOCR2 | 59.25 | 0.388 | 30.00 | 61.59 | 0.379 | ||
| PaddleOCRvl 1.6 | 55.11 | 0.436 | 40.21 | 51.34 | 0.412 |
https://huggingface.co/StarDoc-AI/TeleOCR#omnidocbench-v16OmniDocBench v1.6
| 模型类型 | 方法 | 参数 | Overall ↑ | Text Edit ↓ | Formula CDM ↑ | Table TEDS ↑ | Table TEDS-S ↑ | Read Order Edit ↓ |
|---|---|---|---|---|---|---|---|---|
| 专用 VLM | ||||||||
| TeleOCR | 1.2B | 96.87 | 0.0279 | 6.36 | 97.05 | 98.52 | 0.122 | |
| OvisOCR2 | 0.8B | 96.58 | 0.025 | 97.53 | 94.76 | 97.16 | 0.111 | |
| PaddleOCR-VL-1.6 | 0.9B | 96.33 | 0.033 | 97.49 | 94.76 | 97.11 | 0.127 | |
| MinerU2.5-Pro | 1.2B | 95.75 | 0.036 | 97.45 | 93.42 | 95.92 | 0.120 | |
| GLM-OCR | 0.9B | 95.22 | 0.044 | 97.18 | 92.83 | 95.39 | 0.133 | |
| PaddleOCR-VL-1.5 | 0.9B | 94.87 | 0.038 | 96.69 | 91.67 | 94.37 | 0.130 | |
| HunyuanOCR-1.5 | 1B | 94.74 | 0.033 | 97.49 | 94.76 | 97.11 | 0.127 | |
| PaddleOCR-VL | 0.9B | 94.11 | 0.040 | 95.70 | 90.65 | 93.74 | 0.135 | |
| Youtu-Parsing | 2.5B | 93.68 | 0.044 | 93.45 | 92.02 | 95.00 | 0.116 | |
| Logics-Parsing-v2 | 4B | 93.27 | 0.041 | 95.47 | 88.42 | 91.98 | 0.137 | |
| FireRed-OCR | 2B | 93.20 | 0.037 | 95.27 | 88.04 | 91.06 | 0.131 | |
| MinerU2.5 | 1.2B | 92.98 | 0.045 | 95.59 | 87.88 | 91.47 | 0.130 | |
| OpenDoc-0.1B | 0.1B | 90.64 | 0.049 | 92.93 | 83.88 | 87.45 | 0.140 | |
| dots.ocr | 3B | 90.50 | 0.048 | 89.12 | 87.18 | 90.58 | 0.138 | |
| DeepSeek-OCR 2 | 3B | 90.17 | 0.050 | 91.59 | 83.89 | 87.75 | 0.144 | |
| HunyuanOCR | 1B | 89.87 | 0.089 | 87.44 | 91.01 | 93.23 | 0.171 | |
| Dolphin-v2 | 3B | 89.34 | 0.069 | 90.53 | 84.40 | 87.44 | 0.150 | |
| OCRVerse | 4B | 88.44 | 0.063 | 89.14 | 82.44 | 86.27 | 0.163 | |
| MonkeyOCR-pro-3B | 3B | 88.43 | 0.074 | 88.33 | 84.35 | 88.62 | 0.189 | |
| 通用 VLM | ||||||||
| Ovis2.6-30B-A3B | 30B | 93.62 | 0.035 | 94.93 | 89.44 | 92.40 | 0.135 | |
| Gemini 3 Pro | - | 92.85 | 0.064 | 95.83 | 89.15 | 92.96 | 0.165 | |
| Gemini 3 Flash | - | 92.58 | 0.066 | 95.03 | 89.29 | 93.51 | 0.173 | |
| Qwen3-VL-235B | 235B | 89.78 | 0.063 | 92.53 | 83.07 | 86.75 | 0.166 | |
| GPT-5.2 | - | 86.52 | 0.114 | 88.00 | 82.95 | 87.93 | 0.193 | |
| InternVL3.5-241B | 241B | 83.61 | 0.130 | 89.52 | 74.35 | 79.78 | 0.215 |
https://huggingface.co/StarDoc-AI/TeleOCR#wild_omnidocbenchWild_OmniDocBench
| 模型类型 | 方法 | 参数 | Overall ↑ | Text Edit ↓ | Formula CDM ↑ | Table TEDS ↑ | Table TEDS-S ↑ | Read Order Edit ↓ |
|---|---|---|---|---|---|---|---|---|
| 解耦 VLM | ||||||||
| TeleOCR | 1.2B | 88.53 | 0.1173 | 88.26 | 89.05 | 92.14 | 0.2011 | |
| PaddleOCR-VL-1.6 | 0.9B | 87.36 | 0.1369 | 88.42 | 85.76 | 90.14 | 0.2057 | |
| MinerU2.5-Pro | 1.2B | 87.33 | 0.1362 | 90.15 | 85.46 | 90.12 | 0.2013 | |
| GLM-OCR | 0.9B | 85.08 | 0.1514 | 89.09 | 81.31 | 85.90 | 0.2228 | |
| PaddleOCR-VL-1.5 | 0.9B | 84.64 | 0.1461 | 86.72 | 81.80 | 86.52 | 0.2138 | |
| 端到端 VLM | ||||||||
| OvisOCR2 | 0.8B | 87.91 | 0.129 | 90.37 | 85.13 | 89.11 | 0.2021 | |
| dots.ocr | 3B | 81.84 | 0.1483 | 85.07 | 75.32 | 80.20 | 0.2200 | |
| HunyuanOCR-1.5 | 1B | 77.62 | 0.1979 | 85.12 | 67.54 | 70.67 | 0.2750 | |
| Logics-Parsing-v2 | 4B | 77.10 | 0.4029 | 91.48 | 0.19 | 87.16 | 0.2355 |
https://huggingface.co/StarDoc-AI/TeleOCR#puredocbenchPureDocBench
| 模型类型 | 模型 | Clean Overall ↑ | Clean Text ↓ | Clean Formula ↑ | Clean Table ↑ | Digital Degraded Overall ↑ | Digital Degraded Text ↓ | Digital Degraded Formula ↑ | Digital Degraded Table ↑ | Real Degraded Overall ↑ | Real Degraded Text ↓ | Real Degraded Formula ↑ | Real Degraded Table ↑ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 解耦 VLM | TeleOCR | 86.90 | 0.111 | 81.01 | 91.09 | 77.47 | 0.206 | 72.59 | 80.45 | 70.85 | 0.302 | 65.11 | 77.66 |
| DotsMOCR | 76.27 | 0.151 | 66.23 | 77.65 | 73.16 | 0.198 | 64.32 | 74.95 | 61.73 | 0.312 | 54.39 | 61.97 | |
| MinerU2.5-Pro | 75.87 | 0.222 | 65.14 | 84.68 | 71.77 | 0.272 | 61.79 | 80.73 | 62.56 | 0.375 | 52.70 | 72.47 | |
| YouTu-Parsing | 75.02 | 0.230 | 67.34 | 80.74 | 69.66 | 0.270 | 61.44 | 74.49 | 60.29 | 0.360 | 52.20 | 64.69 | |
| PaddleOCR-VL-1.5 | 73.01 | 0.266 | 63.53 | 82.12 | 66.73 | 0.339 | 58.03 | 76.07 | 60.50 | 0.398 | 54.00 | 67.33 | |
| GLM-OCR | 68.65 | 0.314 | 57.89 | 79.44 | 63.06 | 0.383 | 53.23 | 74.21 | 58.31 | 0.433 | 50.34 | 67.83 | |
| Dolphin-v2 | 65.90 | 0.342 | 59.80 | 72.12 | 60.24 | 0.393 | 52.20 | 67.86 | 44.92 | 0.553 | 39.98 | 50.04 | |
| MonkeyOCR-pro-3B | 62.23 | 0.346 | 48.46 | 72.83 | 57.40 | 0.397 | 45.57 | 66.32 | 46.49 | 0.511 | 38.18 | 52.43 | |
| 端到端 VLM | OvisOCR2 | 82.14 | 0.149 | 71.29 | 90.12 | 77.77 | 0.192 | 67.87 | 84.71 | 66.61 | 0.316 | 57.64 | 73.79 |
| FD-RL | 78.38 | 0.193 | 68.21 | 86.22 | 76.33 | 0.214 | 67.16 | 83.22 | 67.04 | 0.298 | 58.82 | 72.08 | |
| Logics-Parsing-v2 | 76.35 | 0.213 | 67.67 | 82.67 | 73.85 | 0.248 | 67.33 | 79.02 | 67.64 | 0.304 | 61.65 | 71.64 | |
| dots.ocr | 72.01 | 0.248 | 61.37 | 79.51 | 65.95 | 0.307 | 56.67 | 71.86 | 55.68 | 0.403 | 47.70 | 59.63 | |
| Qianfan-OCR | 57.22 | 0.370 | 49.79 | 58.83 | 50.85 | 0.438 | 44.41 | 51.96 | 45.06 | 0.494 | 39.08 | 45.53 | |
| 通用 VLMs | Qwen3-VL-8B | 72.44 | 0.261 | 65.10 | 78.35 | 72.03 | 0.266 | 64.88 | 77.82 | 62.73 | 0.342 | 55.55 | 66.81 |
| Kimi K2.6 | 72.32 | 0.303 | 66.93 | 80.30 | 69.95 | 0.322 | 64.69 | 77.31 | 68.02 | 0.335 | 62.44 | 75.14 | |
| Gemini-3.1-Pro | 70.04 | 0.306 | 65.63 | 75.08 | 69.28 | 0.322 | 65.81 | 74.24 | 71.98 | 0.300 | 68.62 | 77.26 | |
| Qwen3.5-397B-A17B | 69.12 | 0.233 | 65.26 | 65.40 | 68.34 | 0.244 | 63.91 | 65.53 | 62.70 | 0.287 | 60.70 | 56.12 |
https://huggingface.co/StarDoc-AI/TeleOCR#icdar2026-sci-imageminerICDAR2026 Sci-ImageMiner
| #团队 | RMSTEDS | 加权 |
|---|---|---|
| 1 | TeleOCR | 17.23 |
| 2 | VLMinators | 17.29 |
| 3 | Ricoh_SRCB | 16.23 |
| 4 | Vassilis Sioros | 14.94 |
| 5 | DocMiner | 12.67 |
| 6 | Qwen3 VL 8B | 14.08 |
https://huggingface.co/StarDoc-AI/TeleOCR#%F0%9F%9A%80-installation🚀 安装
pip install transformers torch pillow
https://huggingface.co/StarDoc-AI/TeleOCR#quick-start快速开始
import html
import itertools
import json
import re
from dataclasses import dataclass
from PIL import Image
import torch
from transformers import AutoProcessor, AutoModel
@dataclass
class ContentBlock:
type: str
bbox: list[float]
angle: int | None = None
content: str | None = None
@dataclass
class TableCell:
text: str
start_row_offset_idx: int
end_row_offset_idx: int
start_col_offset_idx: int
end_col_offset_idx: int
row_span: int = 1
col_span: int = 1
OTSL_NL = ""
OTSL_FCEL = ""
OTSL_ECEL = ""
OTSL_LCEL = ""
OTSL_UCEL = ""
OTSL_XCEL = ""
OTSL_TOKENS = [OTSL_NL, OTSL_FCEL, OTSL_ECEL, OTSL_LCEL, OTSL_UCEL, OTSL_XCEL]
def _otsl_extract_tokens_and_text(text: str):
pattern = "(" + "|".join(map(re.escape, OTSL_TOKENS)) + ")"
tokens = re.findall(pattern, text)
parts = [part for part in re.split(pattern, text) if part.strip()]
return tokens, parts
def _count_right(rows, row_idx, col_idx, tokens):
span = 0
while col_idx < len(rows[row_idx]) and rows[row_idx][col_idx] in tokens:
span += 1
col_idx += 1
return span
def _count_down(rows, row_idx, col_idx, tokens):
span = 0
while row_idx < len(rows) and col_idx < len(rows[row_idx]) and rows[row_idx][col_idx] in tokens:
span += 1
row_idx += 1
return span
def _otsl_parse_texts(parts, tokens):
rows = [list(row) for is_nl, row in itertools.groupby(tokens, lambda token: token == OTSL_NL) if not is_nl]
if not rows:
return [], []
max_cols = max(len(row) for row in rows)
for row in rows:
row.extend([OTSL_ECEL] * (max_cols - len(row)))
cells = []
row_idx = 0
col_idx = 0
for idx, part in enumerate(parts):
if part in (OTSL_FCEL, OTSL_ECEL):
cell_text = ""
right_offset = 1
if part != OTSL_ECEL and idx + 1 < len(parts) and parts[idx + 1] not in OTSL_TOKENS:
cell_text = parts[idx + 1].strip()
right_offset = 2
next_right = parts[idx + right_offset] if idx + right_offset < len(parts) else ""
next_bottom = rows[row_idx + 1][col_idx] if row_idx + 1 < len(rows) and col_idx < len(rows[row_idx + 1]) else ""
col_span = 1 + (_count_right(rows, row_idx, col_idx + 1, {OTSL_LCEL, OTSL_XCEL}) if next_right in {OTSL_LCEL, OTSL_XCEL} else 0)
row_span = 1 + (_count_down(rows, row_idx + 1, col_idx, {OTSL_UCEL, OTSL_XCEL}) if next_bottom in {OTSL_UCEL, OTSL_XCEL} else 0)
cells.append(TableCell(
text=cell_text,
row_span=row_span,
col_span=col_span,
start_row_offset_idx=row_idx,
end_row_offset_idx=row_idx + row_span,
start_col_offset_idx=col_idx,
end_col_offset_idx=col_idx + col_span,
))
if part in (OTSL_FCEL, OTSL_ECEL, OTSL_LCEL, OTSL_UCEL, OTSL_XCEL):
col_idx += 1
elif part == OTSL_NL:
row_idx += 1
col_idx = 0
return cells, rows
def convert_otsl_to_html(otsl_content: str) -> str:
if otsl_content.startswith("<"):
return otsl_content
tokens, parts = _otsl_extract_tokens_and_text(otsl_content)
cells, rows = _otsl_parse_texts(parts, tokens)
if not cells or not rows:
return ""
grid = [[None for _ in range(len(rows[0]))] for _ in range(len(rows))]
for cell in cells:
for row_idx in range(cell.start_row_offset_idx, min(cell.end_row_offset_idx, len(rows))):
for col_idx in range(cell.start_col_offset_idx, min(cell.end_col_offset_idx, len(rows[0]))):
grid[row_idx][col_idx] = cell
html_rows = []
for row_idx, row in enumerate(grid):
html_rows.append("<tr>")
for col_idx, cell in enumerate(row):
if cell is None or cell.start_row_offset_idx != row_idx or cell.start_col_offset_idx != col_idx:
continue
attrs = ""
if cell.row_span > 1:
attrs += f' rowspan="{cell.row_span}"'
if cell.col_span > 1:
attrs += f' colspan="{cell.col_span}"'
html_rows.append(f"<td{attrs}>{html.escape(cell.text.strip())}</td>")
html_rows.append("</tr>")
return "<table>" + "".join(html_rows) + "</table>"
def post_process(blocks: list[ContentBlock]) -> list[ContentBlock]:
for block in blocks:
if block.type == "table" and block.content:
block.content = convert_otsl_to_html(block.content)
elif block.type == "equation" and block.content:
content = block.content.strip()
content = content.removeprefix("\\[").removesuffix("\\]").strip()
if not (content.startswith("$") and content.endswith("$")):
content = f"$${content}$$"
block.content = content
return [block for block in blocks if block.type != "equation_block"]
def infer(image: Image.Image, prompt: str) -> str:
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": prompt},
]},
]
chat_prompt = processor.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = processor(
text=[chat_prompt],
images=[image.convert("RGB")],
padding=True,
return_tensors="pt",
).to(device=model.device, dtype=model.dtype)
output_ids = model.generate(
**inputs,
use_cache=True,
max_new_tokens=4096,
do_sample=False,
)
output_ids = output_ids.cpu().tolist()[0][len(inputs.input_ids[0]):]
return processor.batch_decode(
[output_ids],
skip_special_tokens=True,
clean_up_tokenization_spaces=False,
)[0].strip()
processor = AutoProcessor.from_pretrained("StarDoc-AI/TeleOCR", trust_remote_code=True, use_fast=True)
model = AutoModel.from_pretrained(
"StarDoc-AI/TeleOCR",
trust_remote_code=True,
torch_dtype=torch.bfloat16,
).cuda().eval()
# 文本
image = Image.open("./assets/text.png").convert("RGB")
raw_text = infer(image, "Please output the text content from the image.")
print(raw_text.strip())
# 表格
image = Image.open("./assets/table.png").convert("RGB")
raw_otsl = infer(image, "This is the image of a table. Please output the table in OTSL format.")
print(convert_otsl_to_html(raw_otsl))
# 公式
image = Image.open("./assets/formula.png").convert("RGB")
raw_formula = infer(image, "Please write out the expression of the formula in the image using LaTeX format.")
formula_block = ContentBlock("equation", [0.0, 0.0, 1.0, 1.0], content=raw_formula)
formula = post_process([formula_block])[0].content
print(formula)
# 代码
image = Image.open("./assets/code.png").convert("RGB")
raw_code = infer(image, "The image contains a code snippet, please output the parsing result.")
print(raw_code.strip())
# 布局
image = Image.open("./assets/layout.jpg").convert("RGB")
image = image.resize((1036, 1036), Image.Resampling.BICUBIC)
raw_layout = infer(image, "Analyze the image layout.")
print(raw_layout.strip())
# 扭曲文档布局
layout_image = Image.open("./assets/layout_distorted.jpg").convert("RGB")
layout_image = layout_image.resize((1036, 1036), Image.Resampling.BICUBIC)
raw_layout = infer(layout_image, "\nMulti-point Layout Segmentation Analysis.")
print(raw_layout.strip())
# 科学图表
image = Image.open("./assets/scientific_figure.png").convert("RGB")
raw_scientific_figure = infer(image, "This is a scientific figure. Please extract the table implied by this figure.")
print(convert_otsl_to_html(raw_scientific_figure))
如需执行完整的文档解析,请参考我们的 GitHub 仓库:https://github.com/caipeng328/NaviDC-OCR。
https://huggingface.co/StarDoc-AI/TeleOCR#citation引用
@article{teleocr,
title={TeleOCR: Navigating Document Parsing Across Digital and Camera-Captured Documents},
author={Cai, Peng and Zou, Zhaofan and Liu, Shifa and Wang, Yikun and Tang, Jiawei and Yang, Kaicheng and Tong, Meng and He, Zhongjiang and Sun, Hao},
journal={arXiv preprint arXiv:2608.12898},
year={2026}
}
https://huggingface.co/StarDoc-AI/TeleOCR#community-contributions社区贡献
感谢 Nandraj 提供的 GGUF 转换和 llama.cpp 支持 🔗 NaviDC-OCR-GGUF
https://huggingface.co/StarDoc-AI/TeleOCR#acknowledgements致谢
TeleOCR 构建于以下项目:
- MinerU
- Qwen2.5-VL
- Qwen3
- Transformers
- PyTorch
- FlashAttention 我们衷心感谢这些优秀的开源项目。
https://huggingface.co/StarDoc-AI/TeleOCR#contact联系我们
如果您有任何问题,请随时提交 issue 或联系我们。
相似文章
XingChen-AGI/TeleOCR
TeleOCR 是一款轻量级的开源视觉语言模型,专注于文档解析,通过多节点共识投票等技术,在数字和相机拍摄的文档上均达到了行业领先水平。
ATH-MaaS/OvisOCR2
OvisOCR2 是一个紧凑的0.8B端到端模型,用于页面级文档解析,在OmniDocBench和PureDocBench基准测试中达到了最先进的性能。
@techNmak:1.7B 参数轻量 VLM,在 OmniDocBench 上碾压巨头的 OCR 新王者
仅 1.7B 参数的多语言文档解析器 dots.ocr,用轻量体积实现 SOTA,证明文档理解无需巨无霸模型。
OvisOCR3 技术报告
OvisOCR3 是一款紧凑的 0.8B 视觉语言模型,通过多教师在线策略蒸馏和混合任务强化学习,将文档解析、通用 OCR、关键信息提取、图表描述和跨页表格重建统一起来,在 OmniDocBench v1.6、OCRBench v2 和 PureDocBench 等基准测试中取得了最先进的成绩。
MonkeyOCRv2: 用于文档AI的视觉-文本基础模型
MonkeyOCRv2是一个用于文档AI的视觉-文本基础模型,在涵盖17种语言的1.13亿张图像的大规模语料库上进行了预训练,采用联合图像到文本生成和像素级文档重建。它在文档解析和理解任务上取得了最先进的结果,以更小的视觉编码器超越了之前的模型。