Почему мы создали OmniParseBench

Фото: EvgeniT (Pixabay) — https://pixabay.com/photos/bridge-river-reflection-water-6181079/

Источник: Datalab•

Почему мы создали OmniParseBench

olmOCR-bench исчерпал свой потенциал, а ParseBench измеряет форматирование, а не чтение — мы вывели модель с 650M параметрами в верхнюю часть этого бенчмарка с помощью нескольких шагов обучения с подкреплением (RL). OmniParseBench — наша замена: в стиле юнит-тестов, сложнее и с честной системой…

Последний год мы активно полагались на бенчмарк olmOCR. Это хороший и качественно разработанный бенчмарк. Но сейчас он уже исчерпал себя — большинство приростов достигается за счет более сложной постобработки, а не за счет улучшения качества самих моделей.

Тем временем бенчмарк ParseBench от LlamaIndex стал использоваться шире. Мы потратили много времени на его оценку. Он в основном измеряет то, форматируете ли вы вывод так, как он ожидает (то есть совпадаете ли вы с тем, как LlamaIndex форматирует вывод) — мы подняли модель с 650 млн параметров почти на вершину таблицы лидеров всего за несколько шагов RL, без какого-либо улучшения качества базовой модели.

Pulse, другая компания по обработке документов, также получила прирост в 22 балла в одной из категорий бенчмарка просто за счет обновления своего промпта и конфигурации в соответствии с соглашениями LlamaIndex.

Мы создали новый бенчмарк, OmniParseBench, и выпустили его на прошлой неделе. Отныне мы будем использовать именно его для отчетов о наших релизах. В этом посте объясняется, почему он нам понадобился и почему мы считаем его справедливым.

Год на olmOCR

Мы использовали olmOCR-bench от AllenAI с момента запуска Chandra и для каждого последующего релиза (Chandra 1.5 и 2, а также Surya 2).

Он нам нравился по трем причинам:

  • Юнит-тесты, а не расстояние редактирования. Каждый тест представляет собой вопрос «да/нет» по одной странице: присутствует ли данное предложение, идет ли этот абзац перед тем, находится ли эта ячейка под тем заголовком. Непрошедший тест указывает на конкретную ошибку, которую можно посмотреть.
  • Его сложно обмануть. Бенчмарки, построенные на расстоянии редактирования по отношению к одной эталонной транскрипции, вознаграждают за соответствие форматированию эталона. Юнит-тестам в основном все равно, как вы форматируете, им важно лишь то, правильно ли вы передали контент.
  • Четкий сигнал. Долгое время оценки olmOCR совпадали с нашими субъективными ощущениями. Когда модель казалась лучше, она получала больше баллов.

olmOCR исчерпал себя

В ноябре прошлого года мы писали об исчерпании возможностей бенчмарка olmOCR. Мы попросили Gemini перепроверить каждый не прошедший тест и обнаружили, что большинство сбоев были придирками к форматированию, а не ошибками модели. С учетом этой корректировки показатель Chandra вырос с 85,5% до 93,9%. Около 3-4% тестов имеют неверную разметку ground truth или очень категоричные правила, поэтому реальный предел составляет около 96-97%.

Это означает, что запаса для роста почти не осталось. Большинство оставшихся приростов достигается за счет более точного соответствия форматированию бенчмарка, а не за счет лучшего чтения.

Насыщение также меняет то, что вознаграждает бенчмарк. Когда модели находятся так близко к пределу, оставшиеся баллы приносит нормализация вывода в ту самую форму, которую ожидают тесты. Поэтому в релизах моделей, таких как недавние Infinity Parser и LightOnOCR, теперь приводятся оценки olmOCR после постобработки, написанной специально для бенчмарка. Это разумная реакция на отсутствие других путей для улучшения. Но это означает, что оценка больше не коррелирует с качеством модели.

Эффект составляет 1-2 балла на модель. В собственной таблице постобработки LightOn модель Infinity-Parser2-Pro набирает 85,9 без обработки и 87,6 с оценочной постобработкой, а LightOnOCR-3-4B набирает 85,0 без обработки и 86,3 с нормализацией (86,0 в нашей репликации). Один балл больше, чем большинство разрывов между моделями в таблице лидеров.

И размер постобработчиков продолжает расти. Постобработчик Chandra OCR 2 занимает менее 100 строк и преобразует наши собственные соглашения вывода, такие как теги <sup>, в формат бенчмарка. Постобработчик LightOn занимает около 700 строк: он преобразует таблицы с формулами в текст, удаляет отточие, сокращает пробелы в формах и восстанавливает формулы внутри строк. Постобработчик Infinity-Parser2 также занимает около 700 строк и применяет различные перезаписи, нацеленные конкретно на каждую категорию olmOCR.

Стимул становится очевидным, когда мы применяем ту же нормализацию к нашей собственной модели. Без обработки Chandra OCR 2 и LightOnOCR-3-4B набирают одинаково в пределах погрешности: 85,1 и 85,0. С нормализацией LightOn поверх нашей собственной обработки результат Chandra OCR 2 вырастает до 86,2. Мы могли бы продолжать подниматься в рейтинге olmOCR, написав еще более крупный постобработчик. Однако мы предпочитаем улучшать саму модель, а не тратить время на манипуляции с бенчмарком.

Другая проблема — покрытие. olmOCR в основном англоязычный, состоит главным образом из статей с arXiv и сканов Internet Archive. В нем нет форм. Тесты таблиц проверяют только ближайших соседей ячейки, с чем простые таблицы легко справляются. Практически нет нелатинских письменностей. Это именно те документы, с которыми борются наши клиенты, и бенчмарк их «не видит».

ParseBench

ParseBench стал бенчмарком, который люди используют вместо предыдущего — он стартовал с поста в блоге, публичного датасета и статьи на arXiv, и теперь другие вендоры ссылаются на него в своих релизах. LlamaIndex создала этот бенчмарк, и ее собственный продукт, LlamaParse, занимает первое и второе места.

Проблема ParseBench заключается в том, что он измеряет не качество OCR, а то, насколько ваш вывод соответствует формату, ожидаемому ParseBench (что обычно означает, насколько хорошо вы согласованы с тем, как выдает результаты LlamaParse). Это бесполезно, если вы пытаетесь оценить качество модели.

Вот несколько причин почему:

Промпт дает 22 балла

Pulse занимала 7-е место в бенчмарке до сентябрьского обновления своей конфигурации и 3-е после него. Обновление включило этап доработки и добавило промпты, адаптированные под бенчмарк. В сентябре Pulse изменила эти промпты, чтобы детально прописать форматирование, которое проверяет бенчмарк:

«Сохраняйте подписи к графикам, иерархию заголовков, структуру таблиц и семантическое форматирование. Переносите встроенные стили в разметку markdown: **жирный**, *курсив*, <u>подчеркнутый</u>, ~~зачеркнутый~~, <sup>надстрочный</sup>, <sub>подстрочный</sub>, <mark>выделенный</mark> маркером, а также уровни заголовков (#, ##, ###), соответствующие визуальной иерархии».

«Сохраняйте подписи к графикам, иерархию заголовков, структуру таблиц и семантическое форматирование. Переносите встроенные стили в разметку markdown: **жирный**, *курсив*, <u>подчеркнутый</u>, ~~зачеркнутый~~, <sup>надстрочный</sup>, <sub>подстрочный</sub>, <mark>выделенный</mark> маркером, а также уровни заголовков (#, ##, ###), соответствующие визуальной иерархии».

Другой ее промпт заканчивается фразой «никогда не добавляйте акценты, которых там нет» — что точно соответствует штрафу за ложные срабатывания в коде оценки. В сообщении о коммите говорится прямо: это изменение заставляет «конфигурацию запрашивать то, что измеряет измерение семантического форматирования», и при повторном запуске от Pulse категория бенчмарка «Семантическое форматирование» подскочила с 51,39 до 73,97. Это 22,6 балла от изменения промпта и конфигурации.

Мы увидели тот же эффект вообще без изменения промпта. Включение задокументированных опций вывода в нашем API подняло нашу оценку семантического форматирования с 46,27 до 77,35 в нашем запуске их тестового инструмента (40,79 в опубликованном варианте). Текст был идентичным, и форматирование не стало лучше как таковое — оно просто совпало с соглашениями, которые ожидает ParseBench.

Модель с 650M параметров почти на вершине, с 70 шагами RL

Если ParseBench в основном измеряет формат, небольшая модель должна иметь возможность подняться на вершину. Поэтому мы попробовали это сделать.

Мы взяли Surya, нашу открытую OCR-модель с 650 млн параметров, и выполнили 70 шагов обучения с подкреплением (RL). Мы не обучали модель ни на каких документах ParseBench.

После 70 шагов и нескольких исправлений вывода Surya поднялась с 23-го на 3-е место из 148 (5-е без исправлений) по четырем измерениям, не связанным с графиками, опередив каждую пограничную модель и каждую открытую модель в таблице.

Surya — очень мощная модель OCR, но другие бенчмарки и субъективные оценки показывают, что в задачах OCR она на самом деле не лучше, чем Gemini 3.8 flash и Opus 5.5.

Это означает, что бенчмарк вознаграждает форматирование, а не реальное улучшение качества модели.

Мы выпускаем контрольную точку (checkpoint) вместе с конвертером и точными настройками, чтобы вы могли проверить это самостоятельно: datalab-to/surya-parsebench-rl.

Графики измеряют оценку, а не парсинг

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

  • 73% правил для графиков (3569 из 4864) являются оценками. Значение не указано на графике прямо, поэтому парсеру приходится считывать его с полосы или линии. Эталонными данными для них служат оценки самой VLM.
  • Оценки оцениваются так, будто они точны. Для большинства допускается относительная погрешность в 5-10%, а для 182 применяется стандартное значение по умолчанию в 1%.
  • Метки должны совпадать с наименованиями в эталоне. Парсер, который называет серию по-другому или ориентирует таблицу иначе, терпит неудачу, даже если в ней содержится правильное число.
  • Парсер, который сохраняет график в виде изображения или расшифровывает текст на нем, получает ноль баллов.

Таблица лидеров отражает результат. Медианная система набирает 37 баллов в категории «Графики», а лучшая передовая модель — 70,89. Самые высокие баллы достаются продуктам с конвейером преобразования графиков в таблицы: LlamaParse Agentic Plus (94,18), Pulse Ultra 2 (89,70) и LlamaParse Agentic (88,68).

Графики сортируют парсеры по наличию у них этого конвейера, а не по тому, насколько хорошо они читают страницу. И снова мы оцениваем не качество модели, а соответствие бенчмарку.

Визуальное позиционирование (Visual Grounding) следует за LlamaParse

Код, генерирующий эталонную разметку, указывает, что он работает «на основе нормализованного вывода парсера» и сопоставляет метки с помощью map_llamaparse_raw_label_to_canonical.

Мы попытались воспроизвести рамки с помощью модели открытой разметки. В нашем тесте модель открытой разметки PP-DocLayoutV2 совпала лишь с 68% текстовых блоков и 39% заголовков разделов при IoU 0,8. Ни один опробованный нами публичный инструмент не воспроизводит их.

Таблица лидеров показывает этот эффект. Все три уровня LlamaParse набирают баллы с разницей менее чем в полбалла друг от друга в категории Visual Grounding (от 83,77 до 84,25) при 15-кратном диапазоне цен. Лучшая из остальных 144 систем набирает 80,61 балла, а лучшая передовая модель — 72,91.

Сравните это с другими категориями. В каждой из них самый дешевый тарифный план LlamaParse отстает от лучшей из остальных систем в 2–12 раз. Visual Grounding — единственная категория, в которой он превосходит всех:

Мы точно не знаем, какая именно система нарисовала рамки, но похоже, что это тесно связано с тем, как рисует рамки LlamaIndex. Дешевый тариф, который проигрывает везде и выигрывает только здесь, — это как раз то, чего следовало ожидать, если эталонные данные соответствуют его условностям.

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

Что делает OmniParseBench по-другому

Мы хотели сохранить то, что делало olmOCR хорошим, и исправить то, из-за чего он исчерпал свой потенциал.

Сохраняется структура модульных тестов (unit tests). Каждый тест по-прежнему представляет собой вопрос «да/нет» по одной странице: этот текст присутствует, этот идет перед тем, эта ячейка находится под этими заголовками, эта строка находится внутри блока таблицы. OmniParseBench содержит 16 288 тестов на 2 937 страницах из 2 343 исходных документов.

Ему все равно на ваше форматирование. HTML или markdown, с красивым оформлением или без, $…$ или <math>: каждый вывод проходит через один и тот же конвертер и ту же нормализацию, применяемую к обеим сторонам каждого сравнения. Уравнения сравниваются по тому, во что их рендерит KaTeX, а не по тому, как написан LaTeX.

Каждый тест указывает, откуда взят ответ. Большинство тестов получено из источников, которым известен ответ: JATS XML издателя для таблиц, формы, которые мы заполнили сами, текстовые слои PDF, проверенные тесты самого olmOCR. Остальные поступают от группы независимых моделей, причем разногласия разрешаются человеком. В каждом тесте фиксируется источник, поэтому вы можете фильтровать их по степени доверия к нему.

Он охватывает сложные случаи. Формы (пустые, заполненные и сканированные), рукописный текст, ухудшенные сканы, мелкий текст на инженерных чертежах, повернутые страницы, 92 языка и таблицы с реальной структурой — многоуровневые заголовки, строки разделов и группы строк, сверенные с XML издателя.

У него есть запас прочности (headroom). Мы удалили 18 264 теста, которые прошли все системы и которые также прошел простой инструмент без модели (pdftotext, PyMuPDF, Tesseract), — они не могут различать парсеры. Лучшая система набирает в целом 92,9 балла, а в сложных срезах показатели намного ниже. Для нелатинских письменностей лучшая система успешно проходит 88,6% тестов, а медианная — 81,5%. На ухудшенных сканах лучший результат составляет 85,6%, а медианный — 78,6%. В случае рукописного текста лучший результат — 81,4%, а медианный — 72,2%. Мы продолжим добавлять новые сложные пограничные случаи, чтобы бенчмарк не исчерпал свой потенциал полностью.

В нашем посте о запуске подробно описано, как тесты получают теги и как разделять результаты.

Обеспечение справедливости

Мы создали бенчмарк, в котором участвуем сами, поэтому планка честности должна быть выше, а не ниже. Вот что мы сделали:

  • Ни один провайдер не получает пользовательский промпт. Каждое API парсинга работает с собственными оптимальными настройками, используя только документированные параметры. Универсальные модели (GPT, Gemini, Claude) получают одни и те же короткие промпты, опубликованные в репозитории. Никто не получает инструкций, написанных под критерии оценки, включая нас самих.
  • Адаптеры меняют только формат. Конвертация markdown провайдера в HTML или возврат заголовков, которые провайдер возвращает отдельно. Каждое изменение проверяется на предмет отсутствия потерь.
  • Одинаковое отношение к ошибкам. Каждый провайдер получает одинаковое время ожидания (таймаут) и одинаковое количество повторных попыток.
  • «Не поддерживается» не означает «ошибка». Если провайдер не может создавать блоки макета, эти тесты исключаются из его оценки, а не засчитываются как неверные.
  • Эталонные модели помечены. Gemini 3.8 Flash и Claude Sonnet 5.5 помогли создать или проверить некоторые тесты. Мы по-прежнему оцениваем их, но делаем пометку, поскольку они могут иметь преимущество в этих тестах.
  • Заголовок нельзя исказить количеством тестов. Это среднее значение для текста, таблиц и макета, поэтому добавление новых тестов какого-то одного типа делает эту оценку более точной, но не увеличивает ее вес.
  • Все находится в открытом доступе. Код распространяется под лицензией Apache 2.0, а каждая страница и каждый тест опубликованы.
  • Мы не обучаемся на нем. Страницы бенчмарка исключаются из наших обучающих данных.

Он будет продолжать развиваться

Статический бенчмарк со временем исчерпывает свой потенциал — именно это произошло с olmOCR. Поэтому OmniParseBench — это живой бенчмарк. Когда мы (или клиент) обнаруживаем сбой, который он не может зафиксировать, мы добавляем для него тесты. Несколько наборов уже находятся в разработке: больше рукописного текста, федеральные формы, газеты, где модели пропускают целые колонки, и символы из чужих систем письменностей, проникающие в текст.

Каждый релиз имеет версию, поэтому результаты всегда сравниваются для одной и той же версии.

Как мы будем сообщать о релизах

Отныне о каждом выпуске модели и API мы будем сообщать с указанием баллов OmniParseBench. Вот как обстоят дела на сегодняшний день:

* Используется при создании и проверке некоторых тестов. Полные результаты, данные о стоимости и задержках приведены в посте о запуске.

Мы создали этот бенчмарк и продаем парсер — вам стоит иметь это в виду, как и в случае с ParseBench. Разница, к которой мы стремимся, заключается в том, что вам не нужно верить нам на слово. У каждого теста есть записанный источник, а программа оценки представляет собой около 2000 строк простого кода на Python, который вы можете прочитать.

И как всегда: лучший бенчмарк — это ваши собственные документы. Запускайте собственные оценки.

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →

Ещё от Datalab