Как мы оценивали OCR на русских документах — и почему все, что «распозналось», можно читать без смеха

от автора

Привет, Хабр! Меня зовут Искандер, я — AI-инженер в Лаборатории искусственного интеллекта «Честного знака», и недавно мы всерьёз занялись оцифровкой русскоязычных документов: от простых текстовых файлов до сложных документов с таблицами, списками и изображениями, поступающими из различных систем. Цель — чтобы машина читала их быстро, точно и без творческой интерпретации.

Почему это так критично для нас? Потому что каждый день к нам приходят сотни и тысячи страниц: контракты, акты, техдокументация, анкеты… Всё это надо не просто перевести в текст, а сразу использовать — для поиска, анализа, генерации выжимок или отправки в другие сервисы. А если на выходе OCR вместо «субподрядчика» выдаст «cy6пoдpялчика» — начнутся проблемы, которые уже не починишь ни регулярками, ни sense of humor’ом.

На рынке сегодня большое количество OCR-решений — и все они активно развиваются, обновляются и обещают «максимальную точность даже на луне». Но как понять, кто из них реально справляется с нашими задачами? У нас своя специфика: кириллица, широкий разброс форматов — от простых текстов до многостраничных PDF с техдокументацией — и, что важнее всего, требование стабильно работать на реальных документах, а не на идеальных примерах из туториалов.

Чтобы не гадать на кофейной гуще, мы собрали собственный модуль тестирования. С его помощью сформировали репрезентативный набор данных — максимально приближенный к тому, с чем сталкиваемся ежедневно, — и протестировали лучшие open-source OCR-движки в боевых условиях. Что из этого вышло — расскажу дальше!

На чем тестировали

Чтобы оценить, как система справляется с распознаванием текста в русскоязычных документах, было собрано 6 датасетов из реальных файлов в формате DOCX.

В эти наборы данных включены и простые тексты, и сложные документы с таблицами, списками, изображениями — всё то, с чем приходится работать на практике.

Важно: все документы в датасетах изначально созданы в DOCX (не рукописные). Для тестирования они конвертировались в PDF с удалением текстового слоя — чтобы имитировать условия работы со сканами.

Оценка

Тип документов

Количество файлов

Количество страниц

1

Качества

Текст без форматирования

5

23

2

Качества

Текст с форматированием

5

20

3

Качества

Простые таблицы

6

6

4

Качества

Сложные таблицы

62

62

5

Производительности

Сложные таблицы

1

70

6

Производительности

Сложные таблицы

12

4662

Датасет 1 — документы, содержащие сплошной текст без форматирования (простые абзацы без выделений, списков, колонок и выравниваний).

Датасет 2 — документы с текстом, включающим базовое форматирование: жирный/курсивный шрифт, маркированные и нумерованные списки, заголовки, абзацы с отступами и т.п.

Датасет 3 — документы, содержащие простые таблицы (таблицы с чёткой структурой, без объединённых ячеек, вложенных элементов или сложного оформления).

Датасет 4 — документы со сложными таблицами и текстом с форматированием (таблицы с объединёнными ячейками, вложенными структурами, многоуровневыми заголовками, нестандартным выравниванием и/или фоновым оформлением, изображениями). Пример из этого датасета показан на Рисунке 1.1.

Рисунок 1.1 – Пример из датасета 4

Рисунок 1.1 – Пример из датасета 4

Датасет 5 – один из документов датасета 4 для тестирования производительности OCR-решений.

Датасет 6 — повторяющий по содержанию датасет 4, но используемый для измерения производительности обработки OCR-решений в многопоточном режиме.

Как тестировали

Оценка качества распознавания текста

Для объективной оценки качества различных решений распознавания текста разработан пайплайн тестирования, который использовался на датасетах 1-4.

  1. Из исходных документов экспортируется текст в «идеальном» виде (ground truth).

  2. Документы конвертируются в PDF с удалением текстового слоя, чтобы получить изображения страниц, имитирующие сканированные документы.

  3. К этим PDF документам применяются тестируемые решения для извлечения текста.

  4. Полученный текст очищается от данных форматирования (маркдаун, html теги и т.п.).

  5. Полученный текст сравнивается с исходным (ground truth) с помощью различных метрик точности.

Оценка производительности распознавания текста

В рамках оценки производительности различных OCR-решений проводился тест на обработку одного и того же большого документа (датасет 5). Основной метрикой являлось время и скорость распознавания текста.

Однако часть исследуемых решений (включая традиционные OCR-движки) не поддерживает эффективную многопоточность из-за архитектурных особенностей: их пайплайн обработки является строго последовательным, что не позволяет распараллеливать этапы анализа и распознавания на уровне отдельных страниц или фрагментов изображения.

В то же время современные решения на основе Vision-Language Models (VLM) обладают возможностью пакетной и параллельной обработки. Для таких решений дополнительно была проведена оценка производительности на датасете 6 в многопоточном режиме.

Как оценивали

Для всесторонней оценки тестируемых решений по извлечению текста из русскоязычных PDF-документов без текстового слоя использовались три группы метрик.

Оценка качества распознавания текста

Качество распознавания неструктурированного и форматированного текста оценивалось на основе расстояния Левенштейна, нормированного на длину эталонного текста. Считали по двум метрикам:

  • total_editops — средний процент ошибок (вставок, замен и удалений символов) по всем документам в выборке с учётом исходного форматирования (включая пробелы, переносы строк, пунктуацию и оформление);

  • total_editops_without_formatting — аналогичный показатель, рассчитанный без учета форматирования (пробелов, переносов строк и т.п.), позволяющий оценить точность распознавания именно содержательной части текста.

Обе метрики выражены в процентах и усреднены по всему датасету, предназначенном для оценки качества текстового распознавания.

Оценка качества распознавания таблиц

Для оценки корректности обработки табличных данных применялся комбинированный подход, включающий как структурную, так и текстовую точность:

  • table_recognize — агрегированный показатель корректности детекции таблиц. Для каждого документа он принимает значения:

    • –1, если в оригинале таблицы отсутствовали, но алгоритм ошибочно их обнаружил (ложноположительное срабатывание);

    • 0, если таблицы присутствовали и были корректно распознаны (структурно и содержательно);

    • 1, если таблицы присутствовали, но не были обнаружены (ложноотрицательное срабатывание).

      Итоговое значение — среднее по всем файлам в выборке: чем ближе к 0, тем выше точность детекции.

  • total_table_shape_accuracy — средняя точность в процентах совпадения размерности (числа строк и столбцов) распознанной таблицы с эталонной, рассчитанная только для документов, в которых таблица была обнаружена.

  • total_editops_table — средний процент ошибок в текстовом содержании таблиц с учётом форматирования (включая выравнивание, пробелы, границы ячеек и т.п.).

  • total_editops_without_formatting_table — средний процент ошибок в текстовом содержании таблиц без учёта форматирования, что позволяет оценить качество распознавания именно табличных данных, независимо от структурных особенностей их представления.

Оценка производительности распознавания текста

Для производительности смотрели на три метрики:

  • Time — среднее время обработки одного документа, рассчитанное по всем документам в соответствующем датасете (в секундах).

  • Page/time — средняя скорость обработки, рассчитанное по всем документам в соответствующем датасете (в секундах).

  • GPU utilization — максимальное использование GPU ресурсов во время проведения экспериментов.

Участники и железо

Для тестирования выбрали различные open-source решения, которые включают и классические модульные решения, так и VLM.

  1. DocsConvertor (≈ 0.1 млрд параметров) — наша собственная разработка. Мы искали решение, которое даёт качественное распознавание без зависимости от GPU: в продакшене это критично и для стоимости инфраструктуры, и для скорости масштабирования. Готовых инструментов с нужным балансом качества и ресурсоэффективности не нашлось — поэтому собрали свой пайплайн из проверенных легковесных компонентов: DocLayout-YOLO (детекция макета), DoclingTablePredictor (структура таблиц), Tesseract OCR (извлечение текста). Результат — высокая точность на CPU при минимальных аппаратных требованиях.

  2. Docling (≈ 0.1 млрд. параметров) — это открытый Python-пакет, предназначенный для преобразования документов в форматы, пригодные для последующего использования в генеративных ИИ-моделях. Он поддерживает широкий спектр входных форматов, включая PDF, DOCX, PPTX и изображения, и применяет последовательность специализированных ИИ-моделей для анализа макета, распознавания таблиц и извлечения текста на каждой странице документа. На бумаге выглядит солидно, но дьявол — в деталях.

  3. datalab-to/marker (≈ 0.2 млрд. параметров) — это решение для преобразования сложных неструктурированных документов (PDF, изображения, презентации и др.) в структурированные форматы, такие как Markdown, HTML и JSON. Marker использует композицию нескольких специализированных ИИ-моделей, включая Surya, для точного восстановления логической структуры, форматирования и содержимого документа, что делает его одним из ведущих open-source инструментов в области документной обработки.

  4. deepseek-ai/DeepSeek-OCR (≈ 3 млрд. параметров) — это современная мультимодальная модель для оптического распознавания символов и понимания структуры документов. Её архитектура основана на двухэтапном подходе: сначала визуальный энкодер DeepEncoder сжимает информацию о макете документа, а затем декодер на базе Mixture-of-Experts (MoE) генерирует текстовое представление. Эта технология «оптического сжатия» позволяет модели эффективно обрабатывать документы высокого разрешения с минимальными вычислительными затратами.

  5. Qwen/Qwen2.5-VL-7B-Instruct (≈ 7 млрд. параметров) — это мультимодальная языковая модель, которая демонстрирует передовые результаты в разнообразных задачах, включая анализ документов, распознавание диаграмм и визуальные рассуждения. Благодаря своей универсальности и высокой производительности, модель является мощным инструментом для комплексного мультимодального анализа.

  6. datalab-to/chandra (≈ 9 млрд. параметров) — это open-source OCR-модель для преобразования изображений и PDF-файлов в структурированные форматы (Markdown, HTML, JSON) с сохранением исходного макета. Chandra отличается продвинутыми возможностями: она умеет распознавать рукописный текст, сложные математические формулы, точно реконструировать формы, чекбоксы и таблицы, а также поддерживает более 40 языков. Это делает её одним из самых универсальных решений для обработки сложных и разнообразных документов.

  7. deepseek-ai/DeepSeek-OCR-2 (≈ 3 млрд. параметров) – это обновлённая версия модели DeepSeek-OCR, в которой вместо оригинального CLIP-энкодера используется Qwen2-энкодер, а также внедрена новая архитектура DeepEncoder V2. Этот энкодер реализует механизм Visual Causal Flow, позволяющий модели динамически переупорядочивать визуальные токены на основе их семантической значимости, а не фиксированного пространственного порядка. Кроме того, была скорректирована обучающая выборка. Решение DeepSeek-OCR-2 вышло уже в процессе подготовки статьи, и мы решили добавить его в тестирование, чтобы оценить актуальные возможности модели.

  8. Qwen/Qwen3-VL-8B-Instruct — это мультимодальная языковая модель, представляющая собой значительное обновление по сравнению с предыдущими версиями. Она поддерживает контекст длиной до 256K токенов и демонстрирует улучшенные способности в распознавании текста на изображениях (OCR, а также повышенную устойчивость к сложным условиям, таким как низкая освещённость, размытость или наклон текста.

Все эксперименты проводились на единой вычислительной платформе для обеспечения сопоставимости результатов. Конфигурация тестовой системы включала: процессор AMD EPYC 7513 32-Core Processor, 1 TБ оперативной памяти и графический ускоритель NVIDIA A100 с 40 ГБ видеопамяти.

Все VLM-решения в рамках исследования тестировались с использованием фреймворка vLLM 0.12.0, что обеспечивало единые условия для сравнения производительности и масштабируемости моделей.

Итак, участники собраны, арена размечена, секундомер на старте. Пусть лучший распознает!

Скрытый текст

Полученные результаты тестирования

Наилучшие метрики среди всех OCR-решений выделены полужирным шрифтом

Результаты тестирования на датасете № 1

table_recognize

total_editops

total_editops_without_formatting

DocsConvertor

0

1,23

0,09

Docling

-0,2

14,39

9,76

datalab-to/marker

0

0,98

0,26

deepseek-ai/DeepSeek-OCR

0

1

0,04

Qwen/Qwen2.5-VL-7B-Instruct

0

0,83

0,094

datalab-to/chandra

0

0,78

0,12

deepseek-ai/DeepSeek-OCR-2

0

1,09

0,03

Qwen/Qwen3-VL-8B-Instruct

0

1,18

0,056

Результаты тестирования на датасете № 2

table_recognize

total_editops

total_editops_without_formatting

DocsConvertor

0

2,52

0,56

Docling

0

10,79

7,92

datalab-to/marker

0

5,21

3,44

deepseek-ai/DeepSeek-OCR

0

1,68

0,52

Qwen/Qwen2.5-VL-7B-Instruct

0

1,05

0,17

datalab-to/chandra

0

0,92

0,22

deepseek-ai/DeepSeek-OCR-2

-0,4

6,99

3,88

Qwen/Qwen3-VL-8B-Instruct

0

1,25

0,08

Результаты тестирования на датасете № 3

table_recognize

total_table_shape_accuracy

total_editops

total_editops_without_formatting

DocsConvertor

0,17

100

2,68

1,13

Docling

0

83,33

10,47

8,21

datalab-to/marker

0,33

75

6,76

3,98

deepseek-ai/DeepSeek-OCR

0,33

100

0,31

0,03

Qwen/Qwen2.5-VL-7B-Instruct

0,17

100

0,62

0,2

datalab-to/chandra

0,17

100

0,79

0,43

deepseek-ai/DeepSeek-OCR-2

0

100

0,52

0,04

Qwen/Qwen3-VL-8B-Instruct

0,5

100

0,24

0,05

Результаты тестирования на датасете № 4

table_recognize

total_table_shape_accuracy

total_editops

total_editops_without_formatting

DocsConvertor

0

77,97

9,03

4,22

Docling

0

34,17

11,06

6,42

datalab-to/marker

0,03

47,41

13,19

4,04

deepseek-ai/DeepSeek-OCR

0,15

38,68

4,82

2,1

Qwen/Qwen2.5-VL-7B-Instruct

0,05

31,9

7,39

4,86

datalab-to/chandra

0,05

53,5

5,73

1,88

deepseek-ai/DeepSeek-OCR-2

0,016

64,17

3

0,56

Qwen/Qwen3-VL-8B-Instruct

0,2

41,84

3,66

0,62

Результаты тестирования на датасете № 5

GPU Utilization

Time (1 thread)

Page/Time (1 thread)

Time (multi-threaded)

Page/Time (multi-threaded)

DocsConvertor

0,02

954,33

0,07

Docling

0,27

108,86

0,64

datalab-to/marker

0,34

96,76

0,72

deepseek-ai/DeepSeek-OCR

0,85

167,25

0,42

33,81

2,07

Qwen/Qwen2.5-VL-7B-Instruct

0,85

299,17

0,23

56,05

1,25

datalab-to/chandra

0,85

579,34

0,12

76,58

0,91

deepseek-ai/DeepSeek-OCR-2

0,85

102,65

0,68

37,24

1,88

Qwen/Qwen3-VL-8B-Instruct

0,85

341,02

0,21

60,37

1,16

Результаты тестирования на датасете №6

Результаты тестирования на датасете № 6

Результаты тестирования на датасете № 6

Обощенные результаты

Результатов накопилось много, и смотреть на них по отдельности — глаз разбегается. Поэтому свели всё в одну таблицу: качество текста, таблицы, скорость, параллелизм.

Ошибка распозн. таблиц*

Ошибка распозн. текста, %

Распозн. структуры таблицы, %

Ошибка распозн. текста в таблицах, %

Скорость обработки, c

Макс. число паралл. обработок*

DocsConvertor

0,043

1,100

88,985

4,265

0,07

1

Docling

0,050

10,715

58,750

9,040

0,64

1

datalab-to/marker

0,090

2,473

61,205

6,993

0,72

1

deepseek-ai/DeepSeek-OCR

0,12

0,81

69,34

1,815

0,42

2048

Qwen/Qwen2.5-VL-7B-Instruct

0,055

0,536

65,950

3,268

0,23

256

datalab-to/chandra

0,055

0,510

76,750

2,208

0,12

128

deepseek-ai/DeepSeek-OCR-2

0,104

2,998

82,085

1,030

0,68

560

Qwen/Qwen3-VL-8B-Instruct

0,175

0,642

70,920

1,143

0,21

256

*Ошибка распознавания таблиц – для данной категории считалась средняя абсолютная ошибка.

*Макс. число параллельных обработок – число, определенное по Рисунку А1.1, это количество страниц при которой скорость обработки перестает расти.

Чтобы совсем не мучиться с цифрами — перевели всё в ранги. Кто первый, кто последний, по каждой категории отдельно.

Ошибка распозн. таблиц*

Ошибка распозн. текста, %

Распозн. структуры таблицы, %

Ошибка распозн. текста в таблицах, %

Скорость обработки, c

Макс. число паралл. обработок*

DocsConvertor

1

5

1

6

8

6

Docling

2

8

8

8

3

6

datalab-to/marker

5

6

7

7

1

6

deepseek-ai/DeepSeek-OCR

7

4

5

3

4

1

Qwen/Qwen2.5-VL-7B-Instruct

3

2

6

5

5

3

datalab-to/chandra

3

1

3

4

7

5

deepseek-ai/DeepSeek-OCR-2

6

7

2

1

2

2

Qwen/Qwen3-VL-8B-Instruct

8

3

4

2

6

3

Ну и финальный аккорд — усредняем ранги и получаем итоговую таблицу. Это и есть ответ на главный вопрос: кто лучший, если смотреть сразу по всем критериям.

Среднее значение ранга

DocsConvertor

4,50

Docling

5,83

datalab-to/marker

5,33

deepseek-ai/DeepSeek-OCR

4,00

Qwen/Qwen2.5-VL-7B-Instruct

4,00

datalab-to/chandra

3,83

deepseek-ai/DeepSeek-OCR-2

3,33

Qwen/Qwen3-VL-8B-Instruct

4,33

Выводы

Проведённое тестирование выявило ключевую закономерность: ни одно из существующих OCR-решений не является универсальным. Каждое оптимизировано под определённый класс задач, и выбор должен определяться не маркетинговыми обещаниями, а конкретными требованиями к инфраструктуре, типу документов и критичным метрикам качества. Распознавание текста.

По точности извлечения неструктурированного текста лидируют решения на базе Vision-Language Models. Сhandra показал минимальную ошибку — 0,51%, что критично для задач, где недопустимы искажения: юридические документы, финансовая отчётность, контракты. Близкие результаты демонстрируют семейство моделей Qwen (0,536 % и 0,642 %). Однако все три решения требуют GPU-инфраструктуры, что существенно влияет на стоимость эксплуатации и усложняет масштабирование. Работа с таблицами — отдельный вызов.

Здесь картина принципиально иная. DocsConvertor показал лучшие результаты как по детекции таблиц (ошибка 0,043), так и по восстановлению их структуры (88,985% точности). Это объясняется архитектурой решения: комбинация специализированных компонентов (DocLayout-YOLO для макета, DoclingTablePredictor для структуры) оказалась эффективнее универсальных VLM-моделей в задачах, требующих точного понимания геометрии документа. При этом для распознавания текста внутри ячеек VLM-решения сохраняют преимущество — DeepSeek-OCR-2 показал ошибку 1,03 % против 4,265% у DocsConvertor.

Производительность и масштабирование.

В однопоточном режиме быстрее всех работает Marker (0,72 стр/сек), однако классические OCR-движки архитектурно ограничены в параллелизации. VLM-решения здесь выигрывают: DeepSeek-OCR способен обрабатывать до 2048 параллельных запросов, что делает его предпочтительным для высоконагруженных сценариев — при условии доступности соответствующих GPU-ресурсов.

На момент написания статьи DeepSeek-OCR-2 официально не поддерживается в vLLM, гоняли через сырой экспериментальный скрипт. Так что цифры по производительности для неё — скорее ориентир, чем приговор. Как только появится нормальная поддержка — перепрогоним и обновим результаты.

Инфраструктурный контекст.

Отдельно стоит отметить разницу в требованиях к железу. DocsConvertor работает на CPU с минимальной нагрузкой (GPU utilization — 0,02), тогда как VLM-решения утилизируют GPU на 85%. Для enterprise-внедрений, где стоимость инфраструктуры и независимость от дефицитного железа критичны, это может быть определяющим фактором.

Практические рекомендации:

Сценарий

Рекомендуемое решение

Обоснование

Документы с таблицами, ограниченные ресурсы

DocsConvertor

Лучшая точность по таблицам, работа на CPU

Максимальная точность текста, есть GPU

datalab-to/chandra

Минимальная ошибка распознавания

Плотные табличные данные с цифрами

deepseek-ai/DeepSeek-OCR-2

Лучшее качество текста внутри ячеек

Высокая скорость, простые документы

datalab-to/marker

Максимальная производительность в однопоточном режиме

Высокая точность, большое количество запросов

deepseek-ai/DeepSeek-OCR

Низкая ошибка распознавания, высокая масштабируемость

Быстрые эксперименты, ограниченные ресурсы

Docling

Низкий порог входа

Отдельно про Docling: в продакшен его тащить точно не нужно. Документация сырая, memory leak’и вылезают при длительной работе, и в целом ощущение, что инструмент ещё не дорос до серьёзных нагрузок. Для быстрого прототипа или разового эксперимента — сойдёт, но не более.

Рынок OCR-решений меняется быстро, и я уверен, что через полгода часть этих результатов устареет. Постараемся держать бенчмарк актуальным, но без фанатизма. Если знаете что-то, что мы пропустили — пишите в комментарии, будем рады.

Наш выбор

Для обработки документов в «Честном знаке» мы решили использовать комбинированный подход. Основным OCR-решением стал DeepSeek-OCR-2 — он показал наиболее сбалансированные результаты по всем ключевым метрикам. При этом часть нашей инфраструктуры работает без GPU, и в этих сценариях лучше всего себя показывает DocsConvertor: он стабильно справляется со сложными документами, даёт высокую точность на таблицах, требует минимальных ресурсов и при этом выдаёт хорошо интерпретируемый результат.

Автор статьи: Закирьянов Искандер — AI-инженер, Лаборатории искусственного интеллекта «Честного знака»

ссылка на оригинал статьи https://habr.com/ru/articles/1027484/