

Lanzamos jina-ocr-v1, un analizador de documentos de 3.4 mil millones de parámetros con alrededor de 570 millones de parámetros de decodificador activos por cada 词元. Obtiene una puntuación de 91.14 en OmniDocBench v1.6 y 83.4 en olmOCR-Bench, y con 2.57 páginas por segundo posee el mayor rendimiento de páginas de los catorce sistemas que medimos. En una NVIDIA L4, su cabezal de decodificación especulativa casi duplica la velocidad de decodificación mientras mantiene la decodificación sin pérdidas.
El modelo se basa en el codificador de visión comprimida y el decodificador de mezcla de expertos de DeepSeek-OCR y añade dos cosas. Un cabezal de borrador FastMTP aplica un bloque de forma recursiva para tres pasos de predicción, por lo que los parámetros del borrador no crecen con la profundidad. El post-entrenamiento se ejecuta bajo recompensas verificables densas, donde cada comprobación es código determinista frente a una referencia y cada comprobación se califica. Frente a esa estructura, el post-entrenamiento añade 7.4 puntos en olmOCR-Bench y mejora cada columna de OmniDocBench.


tagModelo y entrenamiento
Las salidas largas son las que hacen que el análisis de documentos sea costoso de decodificar. DeepSeek-OCR eliminó la mayor parte de ese coste con un codificador de visión comprimido y un decodificador compacto de mezcla de expertos, y jina-ocr-v1 hereda ambos y se dirige al cuello de botella autorregresivo que permanece.

La salida de OCR es casi determinista y está estructurada localmente, lo que la convierte en una carga de trabajo favorable para la decodificación especulativa. La construcción habitual conecta un cabezal de borrador por profundidad de predicción, por lo que los parámetros del borrador crecen según qué tan lejos mire el modelo. FastMTP utiliza un único bloque denso aplicado recursivamente para pasos de K = 3. El verificador comprueba cada propuesta de forma codiciosa y acepta el prefijo más largo en el que el borrador y el verificador coinciden, por lo que la secuencia comprometida es igual a la secuencia codiciosa del verificador y la especulación solo cambia cuánto tarda la salida.
| Componente | Especificación |
|---|---|
| Codificador de visión | DeepEncoder (~380M): SAM (80M) → 16x conv → CLIP-L (300M) |
| 词元 visuales | 256 @ 1024x1024 (Base); 256+100n, n ≤ 9 (Gundam, ≤ 1,156/página) |
| Decodificador | DeepSeek-3B-MoE: 12 capas, d = 1280, 64 enrutados + 2 compartidos, top-6 |
| Parámetros activos / totales | ~570M / ~3B (decodificador); < 1B / ~3.4B (modelo completo) |
| Vocabulario | 129,280 |
| Límite de posición | 32,768 (RoPE, θ = 106) |
| Cabezal MTP | 1 bloque denso compartido, pasos recursivos K = 3 (FastMTP) |
Especificación del modelo. El decodificador emite Markdown, con tablas en HTML y fórmulas en LaTeX.
Los datos de entrenamiento provienen de corpus de OCR públicos que incluyen olmOCR-mix, FinePDFs, LightOnOCR, MMTab y UniMER, además de fuentes deliberadamente difíciles como periódicos de Europeana, transcripciones de la Biblioteca del Congreso y archivos de pensiones de la NARA. Un filtro basado en reglas elimina bucles de degeneración y duplicados, y una pasada de lenguaje visual vuelve a etiquetar las fuentes difíciles. También sintetizamos páginas por una razón específica: en las páginas naturales, los términos de recompensa de fórmulas y tablas se aplican a muy pocas muestras, por lo que la mayoría de los despliegues no conllevan ninguna señal estructural. JinaOCRSynth llena cada página con fórmulas y tablas puntuables y las envía con pruebas unitarias.
El post-entrenamiento ejecuta una alineación supervisada, un ajuste de robustez en páginas degradadas y GRPO, repetido a lo largo de las rondas de un bucle exterior. La recompensa GRPO es un producto de términos verificables, cada uno calculado mediante código determinista frente a una transcripción de referencia.
| Componente | Señal | Rol |
|---|---|---|
| Contenido | Distancia de edición normalizada en LaTeX/HTML mixto | Fidelidad textual |
| Fórmula | Coincidencia de cadenas de fórmulas | Corrección de fórmulas |
| Tabla | TEDS, TEDS-S, distancia de edición de tabla | Recuperación de estructura |
| Validez estructural | Equilibrio de llaves, cierre de etiquetas, integridad de tablas | Formación correcta |
| Pruebas unitarias | Fracción de pruebas aprobadas de presencia, orden, matemáticas y tablas estilo olmOCR | Retroalimentación densa |
| Repetición y formato | Penalización por repetición, conformidad HTML | Control de degeneración |
Composición de recompensa multiplicativa. La mayoría de los términos tienen un mínimo, ya que bajo un producto, una comprobación fallida eliminaría el gradiente de una página por lo demás correcta. El término de repetición no tiene ninguno, porque los bucles degenerados son el modo de fallo que infla más fácilmente la puntuación de contenido.
Cada ronda deja un conjunto de puntos de control candidatos. Un agente busca configuraciones de combinación bajo un presupuesto de evaluación fijo y las califica con comprobaciones de pruebas unitarias y distancia de edición, y los errores en la combinación seleccionada impulsan la siguiente ronda de recolección. El cabezal de borrador se ajusta al final, sobre el verificador que selecciona el bucle.
tagResultados
| Modelo | Parámetros | ArXiv | OldScans-Math | Tablas | OldScans | Multi-col | LongTiny | Hdr/Ftr | Base | General |
|---|---|---|---|---|---|---|---|---|---|---|
| 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 alcanza 83.4 en el puntaje general, 7.4 puntos por encima del modelo base DeepSeek-OCR con el que fue post-entrenado y supera al modelo olmOCR-2 de 8B. La columna Hdr/Ftr evalúa la ausencia de texto y premia la omisión de encabezados y pies de página, por lo que la transcripción fiel de página completa obtiene puntuaciones bajas en esa categoría.
| Método | Parámetros | General ↑ | TextoEdición ↓ | FórmulaCDM ↑ | TablaTEDS ↑ | TablaTEDS-S ↑ | ROEdición ↓ |
|---|---|---|---|---|---|---|---|
| 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 alcanza 91.14 con 570M de parámetros activos, superando a DeepSeek-OCR-2 en todas las columnas y por encima del modelo mucho más grande Qwen3-VL-235B.
tagDecodificación especulativa en una L4
| Modo | k | Salida tok/s ↑ | Aceleración S ↑ | Tasa de aceptación | τ | 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 en olmOCR-Bench, NVIDIA L4, vLLM 0.20.1, tamaño de lote 1. τ es el número medio de词元 (tokens) confirmados por paso especulativo incluyendo el 词元 (token) de bonificación, y c = τ/S es el costo de un paso especulativo en unidades de un paso autorregresivo. Medido en un dispositivo distinto a las cifras anteriores.
La calidad del borrador no depende del modo de ejecución, ya que τ es 2.73 en modo eager y 2.74 bajo grafos CUDA en k = 3. La línea base sí depende. Los grafos CUDA aumentan la decodificación autorregresiva de 42.7 a 158.3 词元 (tokens) por segundo, mientras que la sobrecarga de un paso especulativo se mantiene cerca de los 9 ms, por lo que su costo aumenta de 1.40 a 2.51 pasos autorregresivos. La ganancia sigue el costo del paso de verificación que reemplaza, lo que sitúa la profundidad óptima en k = 3 en modo eager y k = 1 bajo grafos.
tagCómo empezar
La forma más rápida de ejecutarlo es con Jina Reader. Apunte r.jina.ai a una URL y añada un encabezado: Reader recupera la página o PDF, lo renderiza, ejecuta jina-ocr-v1 sobre el resultado y devuelve Markdown. No hay nada que implementar, no hay que escribir tuberías de imágenes y utiliza la misma clave de API que el resto de la plataforma.
curl "https://r.jina.ai/https://example.com/document.pdf" \
-H "Authorization: Bearer $JINA_API_KEY" \
-H "X-Respond-With: jina-ocr-v1"Añada X-Page para transcribir una página de un documento de varias páginas. Ambos parámetros están en el editor de la API de Reader, donde el interruptor escribe el encabezado por usted.
Para el acceso directo al modelo, el endpoint alojado es compatible con OpenAI y solo necesita una clave de API de 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"}}
]
}]
}'
Para servirlo usted mismo, los pesos y el código de modelado personalizado se suministran en un repositorio de Hugging Face cargado con trust_remote_code=True. FastMTP necesita vLLM 0.21 o posterior y un registro de arquitectura único antes de que se inicie el motor.
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)
Un detalle determina si aparece la aceleración. El asistente registra la cabecera con method="eagle", ya que FastMTP está entrenado con retroalimentación de estado oculto recursivo y el method="mtp" predeterminado vuelve a basar cada paso del borrador en el objetivo. La ruta de Transformers ejecuta el decodificador MoE solo e ignora los pesos MTP.
El modelo también maneja la transcripción a nivel de elemento de tablas y fórmulas, subtítulos, VQA de documentos y extracción de información clave, en inglés y chino. Los pesos se publican bajo CC BY-NC 4.0.
tagConclusión
Con 570M de parámetros activos, jina-ocr-v1 se sitúa en la frontera de precisión por parámetro de ambos benchmarks y tiene el mayor rendimiento de páginas de los sistemas que medimos. Dos palancas hacen ese trabajo y ninguna necesita un modelo más grande: una recompensa graduada en cada verificación comprobable y una cabecera de borrador entrenada contra el verificador final.
Vale la pena analizar más de cerca la longitud de la salida. El rendimiento de 词元 (tokens) y el rendimiento de páginas clasifican los sistemas de forma diferente, y la longitud de la salida es independiente de la calidad del análisis, por lo que la concisión puede optimizarse por sí sola. jina-ocr-v1 tiene las salidas más cortas de cualquier sistema con una puntuación superior a 83.






