Downloads · 30 days
22
76% of all-time downloads
VietAlphaLabs/SenOCR-Zh
SenOCR-Zh is a image-text-to-text model from VietAlphaLabs. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as apache-2.0.
<p align="center" <img alt="SenOCR-Zh" src="https://huggingface.co/VietAlphaLabs/SenOCR-Zh/resolve/main/banner.png" </p
Downloads · 30 days
22
76% of all-time downloads
All-time downloads
29
Public
Parameters
959M
3.8 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors3.8 GB · 100%
From the Hugging Face model README
SenOCR-Zh is a Chinese-specialized document OCR model built on PaddleOCR-VL-1.6.
The model retains the approximately 0.96B-parameter PaddleOCR-VL-1.6 architecture while adapting the language decoder for Chinese text, tables, formulas, and historical CJK material. On our controlled 160-page Chinese/ZH evaluation group, SenOCR-Zh reaches an 85.19 Chinese document composite.
Fine-tuning updates 12.09M parameters, about 1.26% of the model, using decoder-only LoRA on a single NVIDIA A10G.
SenOCR-Zh is intended for Chinese document parsing, historical Chinese material, mixed text-table-formula pages, photographed documents, and Hán-Nôm digitization workflows.
1 - NED), 81.57 table (TEDS) and 79.47 formula (CDM) rather than by a single task.transformers for element-level recognition, or as the recognition model inside the PaddleOCR-VL 1.6 page-parsing pipeline.SenOCR-Zh follows the PaddleOCR-VL-1.6 model interface.
For direct element recognition:
pip install "transformers>=5.0.0" torch pillow
from PIL import Image
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
model_id = "VietAlphaLabs/SenOCR-Zh"
image_path = "document.png"
task = "ocr" # "ocr" | "table" | "formula"
prompts = {
"ocr": "OCR:",
"table": "Table Recognition:",
"formula": "Formula Recognition:",
}
device = "cuda" if torch.cuda.is_available() else "cpu"
model = (
AutoModelForImageTextToText
.from_pretrained(model_id, torch_dtype=torch.bfloat16)
.to(device)
.eval()
)
processor = AutoProcessor.from_pretrained(model_id)
image = Image.open(image_path).convert("RGB")
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": prompts[task]},
],
}
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(device)
outputs = model.generate(**inputs, max_new_tokens=512)
text = processor.decode(
outputs[0][inputs["input_ids"].shape[-1]:-1]
)
print(text)
For page-level document parsing, SenOCR-Zh can be used as the multimodal recognition model inside the PaddleOCR-VL 1.6 pipeline.
pip install -U "paddleocr[doc-parser]>=3.6.0" huggingface_hub
from pathlib import Path
from huggingface_hub import snapshot_download
from paddleocr import PaddleOCRVL
model_dir = snapshot_download(repo_id="VietAlphaLabs/SenOCR-Zh")
output_dir = Path("./output")
output_dir.mkdir(parents=True, exist_ok=True)
pipeline = PaddleOCRVL(
pipeline_version="v1.6",
vl_rec_model_dir=model_dir,
)
output = pipeline.predict("document.png")
for result in output:
result.print()
result.save_to_json(save_path=output_dir)
result.save_to_markdown(save_path=output_dir)
See the PaddleOCR-VL documentation for PDF input, document restructuring, and optimized serving backends.
hf download VietAlphaLabs/SenOCR-Zh --local-dir SenOCR-Zh/
SenOCR-Zh is evaluated on a controlled 480-page MDPBench slice covering Vietnamese, English, and Chinese, with 160 pages per language.
[!NOTE] SenOCR-Zh has not yet been officially verified on the MDPBench leaderboard. The SenOCR-Zh scores below come from our project-controlled evaluation. External comparison scores come from the official MDPBench leaderboard.
| Model | Type | Chinese / ZH score |
|---|---|---|
| SenOCR-Zh | Specialized OCR, 0.959B | 85.19* |
| Gemini-3-pro-preview | General VLM | 85.10 |
| PaddleOCR-VL-1.5 | Specialized OCR | 84.80 |
| dots.mocr | Specialized OCR | 84.60 |
| MonkeyOCRv2-S-Parsing | Specialized OCR | 84.40 |
* Project-controlled result; official MDPBench verification is pending.
Within this selected comparison, SenOCR-Zh is 0.09 points above Gemini-3-pro-preview, 0.39 above PaddleOCR-VL-1.5, 0.59 above dots.mocr, and 0.79 above MonkeyOCRv2-S-Parsing on Chinese/ZH.
| Chinese capability | Score | Evaluation support |
|---|---|---|
| Composite | 85.19 | 160 pages |
Text, 1 - NED | 84.77 | 156 pages / 3,016 instances |
| Table, TEDS | 81.57 | 68 pages / 128 instances |
| Formula, CDM | 79.47 | 32 pages / 88 instances |
The 85.19 composite is supported across text, tables, and formulas rather than by a single task.
| Chinese metric | Digital | Photographed |
|---|---|---|
| Composite | 92.69 | 82.69 |
Text, 1 - NED | 91.19 | 82.64 |
| Table, TEDS | 98.72 | 75.86 |
| Formula, CDM | 95.45 | 74.24 |
Photographed pages are materially harder than clean digital pages, especially for tables and formulas.
The controlled Vietnamese + English + Chinese composite is 83.38.
This three-language score is supporting context rather than the primary optimization target. SenOCR-Zh is specialized for Chinese document parsing.
SenOCR-Zh keeps the PaddleOCR-VL-1.6 architecture intact and concentrates adaptation in the language decoder.
| Setting | Value |
|---|---|
| Base model | PaddlePaddle/PaddleOCR-VL-1.6 |
| Total parameters | 958.6M |
| Trainable parameters | 12.09M |
| Trainable share | ~1.26% |
| Decoder layers | 18 |
| LoRA rank | 32 |
| LoRA alpha | 64 |
| LoRA dropout | 0.0 |
| Adapted projections | 126 |
| Peak learning rate | 1e-4 |
| Minimum learning rate | 1e-5 |
| Warmup | 3% |
| Weight decay | 0.01 |
| Gradient clipping | 1.0 |
| Microbatch | 8 |
| Gradient accumulation | 8 |
| Effective batch size | 64 |
| Precision | BF16 |
| Maximum sequence length | 4,096 |
| Training steps | 2,367 |
| Training passes | ~3.0 |
| Training GPU | 1 x NVIDIA A10G |
LoRA is applied to seven projections in each of the 18 decoder layers:
q_projk_projv_projo_projgate_projup_projdown_projThe vision encoder, vision-language aligner, embeddings, and output head remain frozen.
Training interleaves three task prompts:
<image>OCR:
<image>Table Recognition:
<image>Formula Recognition:
SenOCR-Zh is trained on a 50,451-record Chinese OCR corpus built from open, attributable sources.
| Corpus lane | Records | Share |
|---|---|---|
| Chinese modern historical archives | 18,000 | 35.7% |
| Broad Chinese OCR regions | 14,000 | 27.7% |
| Hán-Nôm and Literary Chinese | 12,000 | 23.8% |
| Chinese table synthesis | 3,000 | 5.9% |
| Formula recognition | 3,451 | 6.8% |
| Total | 50,451 | 100% |
The lanes draw on:
The data pipeline applies source-overlap checks, duplicate-page filtering, sequence-length audits, target-token analysis, annotation review, and manuscript-level train/test separation.
Dataset licenses vary by source and each retains its original terms.
SenOCR-Zh is designed for historical Chinese and Hán-Nôm document workflows where OCR must recover both transcription and document structure.
Target material includes:
Historical evaluation is not yet complete. Planned benchmarks include AncientDoc, ChineseOCRBench, and a manuscript-level held-out Hán-Nôm evaluation.
The main measured weakness is the performance gap between digital and photographed pages.
Other difficult cases include:
For scholarly, legal, historical, or otherwise high-stakes transcription, human review is recommended.
SenOCR-Zh is released under the Apache License 2.0.
The model is built on PaddleOCR-VL-1.6, which is also distributed under Apache 2.0.
Dataset licenses vary by source. The training source mix includes datasets under MIT and CC-BY-4.0 terms, and each source retains its original licensing terms.
@misc{vietalphalab2026senocrzh,
title={SenOCR-Zh: A Chinese-Specialized Document OCR Model},
author={VietAlpha Lab},
year={2026},
publisher={Hugging Face},
url={https://huggingface.co/VietAlphaLabs/SenOCR-Zh},
}