

Мы выпускаем jina-ocr-v1, парсер документов с 3,4 млрд параметров и примерно 570 млн активных параметров декодера на каждый 词元 (token). Модель набирает 91,14 балла в OmniDocBench v1.6 и 83,4 в olmOCR-Bench, а ее пропускная способность составляет 2,57 страницы в секунду — это самый высокий показатель среди четырнадцати протестированных нами систем. На NVIDIA L4 ее головка спекулятивного декодирования почти удваивает скорость декодирования, сохраняя при этом процесс декодирования без потерь.
Модель основана на кодировщике сжатого зрения и декодере mixture-of-experts из DeepSeek-OCR, к которым мы добавили две вещи. Головка FastMTP применяет один блок рекурсивно для трех шагов предсказания, поэтому параметры «черновика» не растут с увеличением глубины. Посттренировка проходит с использованием плотных верифицируемых вознаграждений, где каждая проверка представляет собой детерминированный код, сверяемый с эталоном, и каждая проверка оценивается. На этой основе посттренировка добавляет 7,4 балла в olmOCR-Bench и улучшает показатели по всем столбцам OmniDocBench.


tagМодель и обучение
Длинные выходные данные делают парсинг документов дорогостоящим процессом декодирования. DeepSeek-OCR устранила большую часть этих затрат с помощью кодировщика сжатого зрения и компактного декодера mixture-of-experts, а jina-ocr-v1 наследует оба решения и нацеливается на остающееся узкое место авторегрессии.

Выходные данные OCR почти детерминированы и локально структурированы, что делает их благоприятной нагрузкой для спекулятивного декодирования. Обычно используется конструкция с одной черновой головкой на каждую глубину предсказания, поэтому параметры черновика растут вместе с тем, насколько далеко модель заглядывает вперед. FastMTP использует единственный плотный блок, применяемый рекурсивно для K = 3 шагов. Верификатор жадно проверяет каждое предложение и принимает самый длинный префикс, в котором черновик и верификатор согласны, поэтому зафиксированная последовательность равна жадной последовательности верификатора, а спекуляция лишь ускоряет получение вывода.
| Компонент | Спецификация |
|---|---|
| Кодировщик зрения | DeepEncoder (~380M): SAM (80M) → 16x conv → CLIP-L (300M) |
| Визуальные 词元 (token)ы | 256 @ 1024x1024 (Base); 256+100n, n ≤ 9 (Gundam, ≤ 1156/стр.) |
| Декодер | DeepSeek-3B-MoE: 12 слоев, d = 1280, 64 маршрутизируемых + 2 общих, top-6 |
| Активные / всего параметров | ~570M / ~3B (декодер); < 1B / ~3.4B (вся модель) |
| Словарь | 129 280 |
| Лимит позиции | 32 768 (RoPE, θ = 106) |
| Головка MTP | 1 общий плотный блок, рекурсивные K = 3 шага (FastMTP) |
Спецификация модели. Декодер выдает Markdown, таблицы в формате HTML, формулы в LaTeX.
Обучающие данные взяты из публичных корпусов OCR, включая olmOCR-mix, FinePDFs, LightOnOCR, MMTab и UniMER, плюс намеренно сложные источники, такие как газеты Europeana, транскрипты Библиотеки Конгресса и пенсионные архивы NARA. Фильтр на основе правил удаляет вырожденные циклы и дубликаты, а проход через модель зрения-языка переразмечает сложные источники. Мы также синтезируем страницы по конкретной причине: на естественных страницах штрафы за формулы и таблицы применяются к очень немногим образцам, поэтому большинство прогонов не несут структурного сигнала. JinaOCRSynth наполняет каждую страницу оцениваемыми формулами и таблицами и включает модульные тесты.
Посттренировка включает контролируемое выравнивание, тонкую настройку устойчивости на деградированных страницах и GRPO, повторяемые в циклах внешнего контура. Вознаграждение GRPO — это произведение верифицируемых условий, каждое из которых вычисляется детерминированным кодом относительно эталонной транскрипции.
| Компонент | Сигнал | Роль |
|---|---|---|
| Контент | Нормализованное расстояние редактирования для смеси LaTeX/HTML | Текстовая точность |
| Формула | Сопоставление строк формул | Правильность формул |
| Таблица | TEDS, TEDS-S, расстояние редактирования таблицы | Восстановление структуры |
| Структурная валидность | Баланс скобок, закрытие тегов, целостность таблиц | Корректность формата |
| Модульные тесты | Доля пройденных тестов на присутствие, порядок, математику и таблицы | Плотная обратная связь |
| Повторы и формат | Штраф за повторы, соответствие HTML | Контроль дегенерации |
Мультипликативная композиция вознаграждений. Большинство условий имеют нижний порог, так как при произведении одна неудачная проверка может убрать градиент от страницы, которая в остальном верна. У условия повторов порога нет, поскольку вырожденные циклы — это тип ошибки, который легче всего завышает оценку контента.
Каждый раунд оставляет пул кандидатных контрольных точек. Агент ищет конфигурации слияния при фиксированном бюджете оценки и ранжирует их с помощью модульных тестов и проверок расстояния редактирования, а ошибки в выбранном слиянии определяют следующий раунд сбора данных. Головка черновика подбирается в последнюю очередь, на той версии верификатора, которую выбрал цикл.
tagРезультаты
| Модель | Параметры | ArXiv | OldScans-Math | Tables | OldScans | Multi-col | LongTiny | Hdr/Ftr | Base | Overall |
|---|---|---|---|---|---|---|---|---|---|---|
| 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 достигает общего показателя 83,4, что на 7,4 пункта выше, чем у базовой модели DeepSeek-OCR, на основе которой она была дообучена, и опережает olmOCR-2 с 8 млрд параметров. Столбец Hdr/Ftr проверяет отсутствие текста и поощряет исключение верхних и нижних колонтитулов, поэтому качественная постраничная транскрипция получает здесь низкие оценки.
| Метод | Параметры | Overall ↑ | TextEdit ↓ | FormulaCDM ↑ | TableTEDS ↑ | TableTEDS-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 достигает 91,14 при 570 млн активных параметров, опережая DeepSeek-OCR-2 по всем столбцам и обходя гораздо более крупную Qwen3-VL-235B.
tagСпекулятивная декодировка на L4
| Режим | k | Вывод 词元/с ↑ | Ускорение S ↑ | Коэффициент принятия | τ | 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 на olmOCR-Bench, NVIDIA L4, vLLM 0.20.1, размер пакета 1. τ — это среднее количество 词元, зафиксированных на один спекулятивный шаг, включая бонусный 词元, а c = τ/S — стоимость одного спекулятивного шага в единицах одного авторегрессионного шага. Измерения проводились на другом устройстве, отличном от указанного на графиках выше.
Качество черновика не зависит от режима выполнения, так как τ составляет 2,73 в режиме eager и 2,74 при использовании графов CUDA при k = 3. Базовый показатель меняется. Графы CUDA повышают скорость авторегрессионного декодирования с 42,7 до 158,3 词元 в секунду, в то время как накладные расходы на спекулятивный шаг остаются в районе 9 мс, поэтому его стоимость возрастает с 1,40 до 2,51 авторегрессионного шага. Прирост коррелирует со стоимостью шага верификатора, который он заменяет, что делает оптимальной глубину k = 3 в режиме eager и k = 1 при использовании графов.
tagНачало работы
Самый быстрый способ запустить её — использовать Jina Reader. Укажите r.jina.ai в качестве адреса URL и добавьте один заголовок: Reader загрузит страницу или PDF, отрендерит их, запустит jina-ocr-v1 поверх результата и вернет Markdown. Ничего не нужно развертывать, писать сложную логику обработки изображений, используется тот же API-ключ, что и для остальной платформы.
curl "https://r.jina.ai/https://example.com/document.pdf" \
-H "Authorization: Bearer $JINA_API_KEY" \
-H "X-Respond-With: jina-ocr-v1"Добавьте X-Page для транскрипции одной страницы многостраничного документа. Оба параметра доступны в редакторе Reader API, где переключатель автоматически создаст для вас заголовок.
Для прямого доступа к модели используется хостируемая конечная точка, совместимая с OpenAI, для которой нужен только API-ключ от 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"}}
]
}]
}'
Чтобы запустить модель самостоятельно, веса и код пользовательской модели поставляются в одном репозитории Hugging Face, который загружается с параметром trust_remote_code=True. Для FastMTP требуется vLLM 0.21 или новее и однократная регистрация архитектуры перед запуском движка.
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)
Одна деталь определяет, будет ли заметно ускорение. Вспомогательная функция регистрирует «голову» (head) с помощью method="eagle", поскольку FastMTP обучается с рекурсивной обратной связью по скрытому состоянию, а метод по умолчанию method="mtp" перепроверяет каждый черновой шаг на целевой модели. Путь через Transformers запускает только декодер MoE и игнорирует веса MTP.
Модель также поддерживает транскрипцию таблиц и формул на уровне элементов, описание изображений, ответы на вопросы по документам (VQA) и извлечение ключевой информации на английском и китайском языках. Веса выпущены по лицензии CC BY-NC 4.0.
tagЗаключение
При 570 млн активных параметров jina-ocr-v1 находится на границе эффективности «точность на параметр» для обоих бенчмарков и обладает самой высокой пропускной способностью страниц среди протестированных нами систем. Этого позволяют добиться два рычага, и ни один из них не требует более крупной модели: оценка с градированным вознаграждением при каждой верифицируемой проверке и черновая «голова», обученная по конечному верификатору.
Длину вывода стоит рассмотреть подробнее. Пропускная способность в 词元 и пропускная способность страниц ранжируют системы по-разному, а длина вывода не зависит от качества синтаксического анализа, поэтому лаконичность можно оптимизировать отдельно. Модель jina-ocr-v1 выдает самые короткие результаты среди всех систем с оценкой выше 83.






