

Wir veröffentlichen jina-ocr-v1, einen Dokumenten-Parser mit 3,4 Mrd. Parametern und etwa 570 Mio. aktiven Decoder-Parametern pro 词元. Er erreicht 91,14 Punkte auf OmniDocBench v1.6 und 83,4 auf olmOCR-Bench. Mit 2,57 Seiten pro Sekunde weist er den höchsten Seitendurchsatz der von uns gemessenen vierzehn Systeme auf. Auf einer NVIDIA L4 verdoppelt sein spekulativer Decoding-Head die Decoding-Geschwindigkeit fast, während das Decoding verlustfrei bleibt.
Das Modell basiert auf dem komprimierten Vision-Encoder und dem Mixture-of-Experts-Decoder von DeepSeek-OCR und fügt zwei Dinge hinzu. Ein FastMTP-Draft-Head wendet einen Block rekursiv für drei Vorhersageschritte an, sodass die Draft-Parameter nicht mit der Tiefe wachsen. Das Post-Training erfolgt unter dicht verteilten verifizierbaren Belohnungen, wobei jede Prüfung deterministischer Code gegenüber einer Referenz ist und bewertet wird. Im Vergleich zu dieser Basis fügt das Post-Training 7,4 Punkte auf der olmOCR-Bench hinzu und verbessert jede Spalte der OmniDocBench.


tagModell und Training
Lange Ausgaben machen das Dekodieren beim Dokumenten-Parsing teuer. DeepSeek-OCR hat den größten Teil dieser Kosten mit einem komprimierten Vision-Encoder und einem kompakten Mixture-of-Experts-Decoder eliminiert; jina-ocr-v1 erbt beides und zielt auf den verbleibenden autoregressiven Flaschenhals ab.

OCR-Ausgaben sind nahezu deterministisch und lokal strukturiert, was sie zu einer günstigen Arbeitslast für spekulatives Decoding macht. Beim üblichen Aufbau wird ein Draft-Head pro Vorhersagetiefe angehängt, sodass die Draft-Parameter mit der Tiefe der Vorausplanung des Modells wachsen. FastMTP verwendet einen einzelnen dichten Block, der rekursiv für K = 3 Schritte angewendet wird. Der Verifizierer prüft jeden Vorschlag gierig (Greedy) und akzeptiert das längste Präfix, auf dem sich Entwurf und Verifizierer einig sind, sodass die festgeschriebene Sequenz der gierigen Sequenz des Verifizierers entspricht und die Spekulation lediglich die Dauer der Ausgabe beeinflusst.
| Komponente | Spezifikation |
|---|---|
| Vision-Encoder | DeepEncoder (~380M): SAM (80M) → 16x conv → CLIP-L (300M) |
| Vision-词元 | 256 @ 1024x1024 (Basis); 256+100n, n ≤ 9 (Gundam, ≤ 1.156/Seite) |
| Decoder | DeepSeek-3B-MoE: 12 Schichten, d = 1280, 64 geroutet + 2 geteilt, top-6 |
| Aktive / Gesamt-Parameter | ~570M / ~3B (Decoder); < 1B / ~3.4B (Gesamtmodell) |
| Vokabular | 129.280 |
| Positionslimit | 32.768 (RoPE, θ = 106) |
| MTP-Head | 1 geteilter dichter Block, rekursive K = 3 Schritte (FastMTP) |
Modellspezifikation. Der Decoder gibt Markdown aus, mit Tabellen in HTML und Formeln in LaTeX.
Die Trainingsdaten stammen aus öffentlichen OCR-Korpora einschließlich olmOCR-mix, FinePDFs, LightOnOCR, MMTab und UniMER sowie absichtlich schwierigen Quellen wie Europeana-Zeitungen, Transkripten der Library of Congress und NARA-Pensionsakten. Ein regelbasierter Filter entfernt degenerierte Schleifen und Duplikate, und ein Vision-Language-Durchgang etikettiert die schwierigen Quellen neu. Wir synthetisieren auch Seiten aus einem bestimmten Grund: Auf natürlichen Seiten gelten die Belohnungsbegriffe für Formeln und Tabellen nur für sehr wenige Beispiele, sodass die meisten Durchläufe kein strukturelles Signal tragen. JinaOCRSynth bestückt jede Seite mit bewertbaren Formeln und Tabellen und liefert entsprechende Unit-Tests mit.
Das Post-Training umfasst überwachtes Alignment, Robustheits-Feinabstimmung auf beeinträchtigten Seiten und GRPO, wiederholt über die Runden einer äußeren Schleife. Die GRPO-Belohnung ist ein Produkt aus verifizierbaren Begriffen, die jeweils durch deterministischen Code gegenüber einer Referenztranskription berechnet werden.
| Komponente | Signal | Rolle |
|---|---|---|
| Inhalt | Normalisierte Editierdistanz auf gemischtem LaTeX/HTML | Textuelle Genauigkeit |
| Formel | Formel-String-Abgleich | Formel-Korrektheit |
| Tabelle | TEDS, TEDS-S, Tabellen-Editierdistanz | Strukturwiederherstellung |
| Strukturelle Validität | Klammerausgleich, Tag-Schluss, Tabellenintegrität | Wohlgeformtheit |
| Unit-Tests | Anteil der bestandenen Tests nach olmOCR-Art (Präsenz, Reihenfolge, Mathe, Tabelle) | Dichtes Feedback |
| Wiederholung/Format | Wiederholungsstrafe, HTML-Konformität | Degenerationskontrolle |
Multiplikative Belohnungszusammensetzung. Die meisten Begriffe haben einen Mindestwert, da bei einem Produkt eine fehlgeschlagene Prüfung den Gradienten von einer ansonsten korrekten Seite entfernen würde. Der Wiederholungsbegriff hat keinen, da degenerierte Schleifen die Fehlerart sind, die den Inhalts-Score am ehesten künstlich aufblähen.
Jede Runde hinterlässt einen Pool von Kandidaten-Checkpoints. Ein Agent sucht nach Merge-Konfigurationen unter einem festen Evaluierungsbudget und bewertet diese mit Unit-Test- und Editierdistanz-Prüfungen; Fehler in der ausgewählten Merge-Konfiguration treiben die nächste Sammelrunde voran. Der Draft-Head wird zuletzt auf den Verifizierer angepasst, den die Schleife auswählt.
tagErgebnisse
| Modell | Parameter | ArXiv | OldScans-Math | Tabellen | OldScans | Mehrspaltig | LongTiny | Hdr/Ftr | Basis | Gesamt |
|---|---|---|---|---|---|---|---|---|---|---|
| Gemini 3 Flash | – | 80,1 | 73,6 | 64,6 | 45,8 | 75,3 | 90,3 | 27,4 | – | – |
| Qwen3-VL-235B | 235B/22B | 88,4 | 81,2 | 86,7 | 49,6 | 85,9 | 88,9 | 33,6 | – | – |
| DeepSeek-OCR | 3B/570M | 77,5 | 74,5 | 77,3 | 33,1 | 67,3 | 83,0 | 96,1 | 99,3 | 76,0 |
| dots.mocr | 3B | 85,9 | 85,5 | 90,7 | 48,2 | 85,3 | 81,6 | 94,0 | 99,7 | 83,9 |
| olmOCR-2 | 8B | 82,9 | 82,1 | 84,3 | 48,3 | 84,3 | 81,4 | – | 99,7 | 82,4 |
| LightOnOCR-2 | 1B | 89,6 | 85,6 | 89,0 | 42,2 | 84,8 | 91,4 | 19,7 | 99,6 | 83,2 |
| chandra-ocr-2 | 4B | 86,9 | 89,1 | 92,1 | 51,1 | 82,1 | 93,7 | 91,4 | 99,9 | 85,8 |
| jina-ocr-v1 | 3B/570M | 86,1 | 82,3 | 88,8 | 42,6 | 85,5 | 93,2 | 88,7 | 99,9 | 83,4 |
olmOCR-Bench. jina-ocr-v1 erreicht insgesamt 83,4, was 7,4 Punkte über dem DeepSeek-OCR-Backbone liegt, auf dem es nachtrainiert wurde, und übertrifft das 8B olmOCR-2. Die Hdr/Ftr-Spalte prüft das Fehlen von Text und belohnt das Weglassen von Kopf- und Fußzeilen, weshalb eine getreue Vollseiten-Transkription dort niedrig bewertet wird.
| Methode | Parameter | Gesamt ↑ | TextEdit ↓ | FormelCDM ↑ | TabelleTEDS ↑ | TabelleTEDS-S ↑ | ROEdit ↓ |
|---|---|---|---|---|---|---|---|
| Gemini 3 Flash | – | 92,62 | 0,066 | 95,16 | 89,29 | 93,51 | 0,172 |
| Qwen3-VL-235B | 235B/22B | 89,78 | 0,063 | 92,55 | 83,07 | 86,75 | 0,166 |
| DeepSeek-OCR-2 | 3B/570M | 90,25 | 0,050 | 91,84 | 83,89 | 87,75 | 0,144 |
| HunyuanOCR-1.5 | 1B | 94,74 | 0,039 | 94,50 | 93,67 | 94,71 | 0,129 |
| PaddleOCR-VL-1.6 | 0,9B | 96,34 | 0,033 | 97,53 | 94,76 | 97,10 | 0,128 |
| jina-ocr-v1 | 3B/570M | 91,14 | 0,046 | 93,28 | 84,68 | 89,01 | 0,142 |
OmniDocBench v1.6. jina-ocr-v1 erreicht 91,14 bei 570M aktiven Parametern, liegt in jeder Spalte vor DeepSeek-OCR-2 und schlägt das deutlich größere Qwen3-VL-235B.
tagSpekulatives Decoding auf einer L4
| Modus | k | Ausgabe-Tokens/s ↑ | Beschleunigung S ↑ | Akzeptanzrate | τ | c ↓ |
|---|---|---|---|---|---|---|
| Eager | 0 | 42,7 | 1,00x | – | – | 1,00 |
| Eager | 1 | 64,0 | 1,50x | 82,6% | 1,83 | 1,22 |
| Eager | 2 | 77,9 | 1,82x | 69,1% | 2,38 | 1,30 |
| Eager | 3 | 83,1 | 1,95x | 57,6% | 2,73 | 1,40 |
| Graph | 0 | 158,3 | 1,00x | – | – | 1,00 |
| Graph | 1 | 185,6 | 1,17x | 82,9% | 1,83 | 1,56 |
| Graph | 2 | 183,8 | 1,16x | 69,3% | 2,38 | 2,05 |
| Graph | 3 | 172,9 | 1,09x | 57,9% | 2,74 | 2,51 |
FastMTP auf olmOCR-Bench, NVIDIA L4, vLLM 0.20.1, Batch-Größe 1. τ ist die durchschnittliche Anzahl der pro spekulativem Schritt festgeschriebenen 词元 (Tokens) inklusive des Bonus-Tokens, und c = τ/S sind die Kosten eines spekulativen Schritts in Einheiten eines autoregressiven Schritts. Gemessen auf einem anderen Gerät als die obigen Zahlen.
Die Entwurfsqualität hängt nicht vom Ausführungsmodus ab, da τ im Eager-Modus 2,73 und unter CUDA-Graphen bei k = 3 bei 2,74 liegt. Die Baseline tut dies jedoch. CUDA-Graphen steigern das autoregressive Decoding von 42,7 auf 158,3 Tokens pro Sekunde, während der Overhead eines spekulativen Schritts bei etwa 9 ms bleibt, sodass seine Kosten von 1,40 auf 2,51 autoregressive Schritte steigen. Der Gewinn folgt den Kosten des Verifiziererschritts, den er ersetzt, was die optimale Tiefe bei k = 3 im Eager-Modus und k = 1 unter Graphen festlegt.
tagErste Schritte
Der schnellste Weg zur Ausführung ist Jina Reader. Verweisen Sie r.jina.ai auf eine URL und fügen Sie einen Header hinzu: Reader ruft die Seite oder das PDF ab, rendert es, lässt jina-ocr-v1 über das Ergebnis laufen und liefert Markdown zurück. Nichts zu implementieren, keine Bild-Infrastruktur zu schreiben und derselbe API-Schlüssel wie für den Rest der Plattform.
curl "https://r.jina.ai/https://example.com/document.pdf" \
-H "Authorization: Bearer $JINA_API_KEY" \
-H "X-Respond-With: jina-ocr-v1"Fügen Sie X-Page hinzu, um eine einzelne Seite eines mehrseitigen Dokuments zu transkribieren. Beide Parameter befinden sich im Reader-API-Editor, wo der Schalter den Header für Sie schreibt.
Für den direkten Zugriff auf das Modell ist der gehostete Endpunkt OpenAI-kompatibel und benötigt nur einen API-Schlüssel von jina.ai.
curl https://api.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "jina-ocr-v1",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Transcribe the provided document image into a clean Markdown format, preserving the natural reading order."},
{"type": "image_url", "image_url": {"url": "https://example.com/document.png"}}
]
}]
}'
Um es selbst zu hosten, werden die Gewichte und der benutzerdefinierte Modellcode in einem Hugging-Face-Repository bereitgestellt, das mit trust_remote_code=True geladen wird. FastMTP benötigt vLLM 0.21 oder neuer und eine einmalige Architekturregistrierung, bevor die Engine startet.
import sys
from huggingface_hub import snapshot_download
from PIL import Image
from vllm import LLM
sys.path.insert(0, snapshot_download('jinaai/jina-ocr-v1'))
from deepseek_ocr_mtp import DEFAULT_OCR_PROMPT, register, vllm_llm_kwargs, vllm_sampling_params
register()
llm = LLM(**vllm_llm_kwargs('jinaai/jina-ocr-v1',
num_speculative_tokens=3,
mtp_heads=1,
mtp_recursive=True))
image = Image.open('document.png').convert('RGB')
outputs = llm.chat(
[{'role': 'user', 'content': [{'type': 'image_pil', 'image_pil': image},
{'type': 'text', 'text': DEFAULT_OCR_PROMPT}]}],
sampling_params=vllm_sampling_params(max_tokens=4096),
)
print(outputs[0].outputs[0].text)
Ein Detail entscheidet darüber, ob sich die Beschleunigung zeigt. Der Helper registriert den Head mit method="eagle", da FastMTP mit rekursivem Hidden-State-Feedback trainiert wurde und die Standard-Methode method="mtp" jeden Entwurfsschritt auf dem Ziel neu grundiert. Der Transformers-Pfad führt nur den MoE-Decoder aus und ignoriert die MTP-Gewichte.
Das Modell verarbeitet auch die elementweise Transkription von Tabellen und Formeln, Captioning, Dokumenten-VQA und die Extraktion von Schlüsselinformationen auf Englisch und Chinesisch. Die Gewichte werden unter CC BY-NC 4.0 veröffentlicht.
tagFazit
Mit 570M aktiven Parametern liegt jina-ocr-v1 an der Grenze der Genauigkeit pro Parameter beider Benchmarks und bietet den höchsten Seitendurchsatz der von uns gemessenen Systeme. Zwei Hebel leisten diese Arbeit, und keiner von ihnen benötigt ein größeres Modell: eine abgestufte Belohnung bei jeder überprüfbaren Kontrolle und ein Entwurfs-Head, der gegen den finalen Verifizierer trainiert wurde.
Die Ausgabelänge ist einen genaueren Blick wert. 词元 (Token)-Durchsatz und Seitendurchsatz bewerten Systeme unterschiedlich, und die Ausgabelänge ist unabhängig von der Parsing-Qualität, sodass die Prägnanz eigenständig optimiert werden kann. jina-ocr-v1 hat die kürzesten Ausgaben aller Systeme, die über 83 punkten.






