Руководство разработчика по OmniParseBench: бенчмарки рейтинга и тестирование OCR
В этом руководстве мы реализуем OmniParseBench — открытый бенчмарк Datalab для парсеров документов, который оценивает результаты парсера с помощью 16 288 небольших тестов «пройдено/не пройдено» на 2 937 страницах: от отсканированных форм и рукописного текста до математических формул arXiv и плотных таблиц. Вместо того чтобы доверять таблице лидеров, мы восстанавливаем её по вердиктам, опубликованным Datalab для 27 парсеров, предварительно передав системе оценки созданную вручную страницу, чтобы проверить, какие ошибки меняют вердикт. Затем мы измеряем надёжность ранжирования, разбиваем результаты по типам документов, проверяем, ведут ли себя две модели, названные в карточке как участвовавшие в создании тестов, иначе на тестах, исправленных моделью, и самостоятельно запускаем Tesseract и Indra OCR на выборке из 50 страниц. В процессе выясняется, что первые два парсера статистически неразличимы, лидер меняется на большинстве срезов, а одна из опубликованных при запуске цифр не соответствует доступным файлам.
Мы устанавливаем omni-parse-bench версии 1.0.0rc1, поскольку обычная установка через pip по-прежнему выбирает версию 0.2.0 — более старый выпуск с другим API. Дополнительный пакет benchmark включает адаптеры парсеров, клиент Hugging Face и pyarrow для манифеста, а в Colab мы устанавливаем Tesseract и его модели для различных письменностей через apt. Мы также фиксируем датасет на одном коммите, поскольку репозиторий меняется по мере добавления парсеров. Вывод семейств показывает структуру, на которой основан бенчмарк: тесты present, order и repeat образуют текстовое семейство; table_cell — семейство таблиц; а layout_kind — семейство структуры.
Прежде чем доверять оценке, мы хотим понять, что означает каждый вердикт, поэтому вручную создаём gold-файл с тринадцатью тестами для вымышленной страницы и оцениваем предсказания с помощью unit_tests.score — функции, которую использует сам бенчмарк. Базовое предсказание проходит все тесты, а каждый вариант изменяет что-то одно. Опечатка в одну букву, потерянный знак минус, другой символ в уравнении, переставленные заголовки и неправильно размеченный блок каждый раз меняют ровно один тест на fail, при этом добавляется объяснение. Контрольные варианты также проходят: прописные буквы, удалённый разделитель тысяч и dfrac вместо frac, поскольку текст приводится к единому виду, а уравнения сравниваются после их рендеринга KaTeX.
После изучения системы оценки мы загружаем манифест, gold-файлы и опубликованные вердикты для зафиксированной ревизии, пропуская 1,5 ГБ изображений страниц, и считываем тесты каждой страницы через unit_tests.gold. Количественные показатели совпадают с карточкой датасета, включая 92 языка после исключения кодов для неопределённого языка и отсутствия языка. Особого внимания заслуживают два поля. Такие теги, как handwriting, rotated или table, не влияют на вердикт; они лишь позволяют разбивать результаты на срезы. Поле derivation показывает, как был установлен каждый ответ: по разметке издателя, текстовым слоям, панелям моделей или проверке человеком. Благодаря этому позже можно проверить, не отдавал ли способ создания тестов предпочтение какому-либо парсеру.
Поскольку results.parquet содержит по одной строке для каждого парсера и теста, мы можем восстановить таблицу лидеров, передав строки каждого парсера в unit_tests.summarize. Итоговый показатель представляет собой среднее значение долей пройденных тестов для текста, таблиц и структуры, при этом неподдерживаемые тесты исключаются. Поэтому парсер, который не умеет возвращать структурные блоки, например Tesseract, вообще не получает итогового показателя. Все 108 значений в таблице карточки совпадают с округлёнными до одного знака числами. Пересчёт также выявляет почти равный результат наверху: Datalab accurate и Gemini 3.8 Flash округляются до 92,9 и отличаются всего на 0,024 пункта, а объединение всех тестов вместо усреднения семейств ставит Gemini на первое место.
Столь небольшой разрыв заставляет задуматься, насколько порядок зависит от случайных колебаний. Тесты на одной странице обычно проходят или не проходят одновременно, поэтому мы повторно выбираем страницы, а не отдельные тесты: в каждом из 2 000 повторных выборов 2 343 документа выбираются с возвращением, после чего каждый итоговый показатель пересчитывается по количеству пройденных тестов на документ с помощью одного матричного умножения. Разрыв между двумя лидерами находится примерно в диапазоне от −0,9 до +0,9 пункта, и каждый из них лидирует примерно в половине выборок, поэтому корректнее говорить о ничьей. Datalab balanced, отстающий от лидера на 1,35 пункта, заметно отделён от него, как и все последующие парсеры.
Разбиение по тегам показывает, что один итоговый показатель скрывает особенности имеющихся документов. Мы пересчитываем итоговый показатель для рукописных и повёрнутых страниц, таблиц, отдельных письменностей и других срезов по тому же правилу усреднения семейств, предварительно проверяя утверждением, что это правило воспроизводит официальные показатели для всего набора. Общий лидер занимает первое место лишь в трёх из тринадцати срезов. Gemini 3.8 Flash лидирует в рукописном тексте, математике и формах; Claude Sonnet 5.5 — на повёрнутых страницах; а Mistral OCR — в греческом языке. Армянский и лаосский представлены шестью и пятью документами соответственно, поэтому мы рассматриваем эти результаты скорее как ориентиры, а не как устойчивые рейтинги.
В карточке указано, что Gemini 3.8 Flash и Claude Sonnet 5.5 использовались при создании и проверке некоторых тестов, но не сказано каких именно. Поэтому мы задаём более узкий вопрос с помощью разности разностей: меняется ли относительная доля пройденных тестов парсера на одном из разбиений derivation по-разному для этой пары моделей? На 102 тестах model_review, исправленных моделью компьютерного зрения, обе группы проходят тесты значительно реже, чем остальные, однако у отмеченной пары снижение примерно на 25 пунктов меньше. Плацебо-разбиение human_review показывает меньший разрыв в том же направлении, а model_panel даёт противоположный результат, поэтому мы рассматриваем это как сигнал, а не как доказательство.
Восстановить таблицу лидеров по опубликованным вердиктам — одно дело; самостоятельно получить вердикты — совсем другое. data.select выбирает фиксированную выборку из 50 страниц, распределённых по всем 22 наборам, и мы загружаем только эти страницы. Цикл использует собственные механизмы бенчмарка: needs определяет недостающие выходные данные страницы, harness.predict запускает парсер, record сохраняет предсказание, а затем оценивается папка, поэтому прерванный запуск можно продолжить. В Ubuntu мы также связываем модели письменностей Tesseract с каталогом, которого ожидает адаптер. Tesseract проходит 30,4% текстовых тестов в выборке против 17,6% на полном наборе; эта разница зависит от того, какие страницы попали в выборку.
Indra OCR — открытая модель, работающая на CPU, а пакет поставляется с HTTP-сервером, к которому обращается её адаптер. Поэтому мы устанавливаем версии, зафиксированные в Dockerfile этого сервера, в отдельное окружение и запускаем его в фоновом режиме. При сравнении с опубликованными вердиктами на тех же страницах Tesseract совпадает с ними для каждого оценённого теста, поэтому его результат на выборке совпадает с опубликованным. Indra совпадает в 203 из 221 теста, причём все расхождения по таблицам приходятся на одну страницу. Это полностью объясняет разницу между опубликованной оценкой таблиц 36,1 и нашей оценкой 69,4. То, что одна страница способна настолько изменить показатель семейства, — самый наглядный аргумент в пользу повторной выборки документов.
Любой парсер можно оценить без адаптера: достаточно создать по одному файлу predictions для каждой страницы и вызвать benchmark.grade, объявив неподдерживаемые выходные данные unsupported. Наш парсер считывает встроенный текстовый слой PDF с помощью pypdfium2, а для изображений, где такого слоя нет, возвращает пустую строку. На PDF-страницах он проходит ровно столько же текстовых тестов, сколько Tesseract, — 42,3%, не выполняя OCR, тогда как на изображениях не извлекает ничего, а Indra OCR проходит 43,1% тестов. Обычный текст не проходит ни одного теста таблиц, поскольку для успешного результата нужна структура ячеек. Поэтому соотношение PDF и изображений важно при сравнении двух парсеров.
Вместо того чтобы повторять утверждения, опубликованные при запуске, мы проверяем каждое из них по имеющимся файлам. Все количественные показатели совпадают: от числа тестов и страниц до языков и подмножеств; строки для Claude и Tesseract также соответствуют данным. Однако строка Datalab не совпадает: в статье о запуске и блоге Datalab accurate получает 92,7 и занимает второе место после Gemini, тогда как опубликованные вердикты дают 92,92 против 92,89 — ничью, которая при округлении превращается в одно и то же значение. Утверждение об отсутствии судьи-модели подтверждается для самой системы оценки: её модули не импортируют модели или HTTP-клиенты; KaTeX запускается во встроенном JavaScript-движке для сравнения уравнений. Задержку и стоимость по этим файлам проверить невозможно.
В сводке выводится однострочный результат каждого шага и каждая проверка, выполненная в ходе запуска, с указанием того, подтвердилась она или нет: подтвердились 13 из 17, а четыре неподтвердившиеся проверки являются результатами анализа, а не сбоями. Речь идёт о разрыве в плацебо-тесте, воспроизведении результатов Indra и двух опубликованных показателях Datalab. В сводке также перечисляется то, что здесь не запускалось: размещённые парсеры, которым нужны платные ключи, модели для GPU, задержка и стоимость, а также полный набор из 2 937 страниц.
В заключение, OmniParseBench — это бенчмарк, который можно проверить от начала до конца: система оценки представляет собой открытый код и не обращается к моделям, вердикты опубликованы, а каждую запись в карточке можно восстановить по этим данным. Первые два парсера статистически неразличимы, объединение тестов вместо усреднения семейств меняет порядок, а другой парсер занимает первое место на рукописных и повёрнутых страницах, в таблицах и в нескольких письменностях. Две модели, названные в карточке, меньше отстают от остальных на тестах, исправленных моделью; мы рассматриваем это как сигнал, а не как доказательство. Опубликованные вердикты Tesseract полностью воспроизвелись на нашей выборке, тогда как результаты Indra OCR совпали в 92% тестов. Практический вывод таков: следует адаптировать срезы бенчмарка к собственным документам, публиковать интервалы неопределённости и фиксировать версии всех компонентов.
Ознакомьтесь с ноутбуком и репозиторием. Вся благодарность принадлежит исследователю этого проекта. Также подписывайтесь на нас в Twitter и не забудьте присоединиться к нашему сабреддиту о машинном обучении с более чем 150 тыс. участников и подписаться на нашу рассылку. Стоп! Вы есть в Telegram? теперь вы также можете присоединиться к нам в Telegram.
Хотите сотрудничать с нами для продвижения своего репозитория GitHub, страницы Hugging Face, выпуска продукта, вебинара и т. д.? Свяжитесь с нами
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.