Datalab представляет OmniExtractBench, чтобы устранить предвзятость и непрозрачность в бенчмарках для извлечения данных
Datalab выпустила OmniExtractBench — открытый бенчмарк для структурированного извлечения данных из документов. Он проверяет, насколько точно система заполняет JSON-схему на основе PDF-файла. Бенчмарк объединяет 620 документов из 4 существующих наборов тестов. Один детерминированный оценщик проверяет их все и объясняет каждое решение.
Релиз состоялся в момент, когда поставщики решений для извлечения данных публикуют собственные таблицы лидеров. Datalab утверждает, что такие таблицы сложно сравнивать и проверять. OmniExtractBench — это попытка создать общий эталон.
Подходит ли он для использования? Да, оценщик устанавливается из PyPI как omni-extract-bench (v0.1.7, Python 3.11+, только SciPy) и распространяется по лицензии Apache 2.0. Для повторного запуска тестов поставщиков потребуются собственные API-ключи и оплаченные кредиты.
Что такое OmniExtractBench?
OmniExtractBench — бенчмарк структурированного извлечения данных, созданный Datalab. В каждой задаче системе предоставляются PDF-файл и JSON-схема. Система возвращает JSON, который оценивается по каждому значению в сравнении с эталонным файлом. Код доступен на GitHub, а данные — на Hugging Face по лицензии CC BY 4.0.
4 недостатка, на которые он нацелен
В публикации Datalab, посвящённой запуску, названы 4 регулярно встречающиеся проблемы существующих бенчмарков извлечения данных:
- Предвзятость: документы и система оценки могут отдавать предпочтение поставщику, создавшему бенчмарк.
- Непрозрачные тестовые средства: низкий результат может быть следствием неисправного тестового средства, а не слабой модели.
- Непонятная система оценки: читатели не могут понять, почему конкретный документ получил низкий результат.
- Узкое разнообразие документов: некоторые наборы содержат только плотные таблицы, другие — только чистые, неотсканированные файлы.
Откуда взялись 620 документов
| Набор | Документы | Исходный издатель | Содержимое |
| ExtractBench | 329 | LlamaIndex | Формы, отчётность, презентации |
| Внутренний | 202 | Datalab (синтетический) | Плотные скалярные схемы, небольшие документы |
| LongExtractBench | 47 | micro1 (по заказу Reducto) | Очень большие таблицы |
| LongArray-Extract | 42 | Extend | Большие таблицы с повторяющимися скалярными значениями |
Формы нормативной отчётности — крупнейшая категория, 88 документов. 128 документов состоят из одной страницы. С другой стороны, 33 документа объёмом более 100 страниц содержат 40% всех страниц. Собственный синтетический набор Datalab занимает вторую по величине долю.
Как работает оценщик
Оценщик преобразует прогноз и эталонный JSON в адреса — пути к отдельным значениям. Сначала он нормализует каждое значение, поэтому «03/31/2024» совпадает с «2024-03-31».
Таблицы — самая сложная часть. При сравнении по позициям одна пропущенная строка смещает все последующие строки. Мы повторно запустили оценщик на таблице из 100 строк с пропущенной первой строкой. При позиционном сравнении результат составил 0%, тогда как OmniExtractBench получил 99%.
Решение — сопоставление на основе содержимого с использованием венгерского алгоритма. ExtractBench и LongArray-Extract уже выравнивают строки таким образом. OmniExtractBench добавляет поверх этого уровень вердиктов.
6 вердиктов для каждого значения
- matched: сопоставлено, и значения совпадают.
- misread: сопоставлено, но значения различаются.
- unfound: в эталоне есть значение, а в прогнозе его нет.
- fabricated: схема это допускает, эталон не содержит значения, а прогноз его заполняет.
- invented_item: часть спрогнозированной строки, которой ничего не соответствует.
- invented_field: адрес, который схема никогда не объявляла.
Точность — это количество совпавших значений, делённое на общее количество вердиктов. Precision делит количество совпавших значений на количество спрогнозированных значений. Recall делит их на количество эталонных значений. Полные правила приведены в спецификации метрик.
Правило для null
Пустые строки, None и пробелы считаются пропусками, поэтому такие адреса исключаются. Строки вроде «NA» или «-» остаются реальными ответами. Это блокирует незаметный способ получить преимущество: заполнить схему пустыми необязательными полями и получить бесплатные совпадения. В нашем тесте добавление заполненных null-полей не добавило ни одного вердикта.
Сравнение с другими бенчмарками извлечения данных
| Бенчмарк | Издатель | Документы | Выравнивание строк | Объяснение для каждого значения | Лицензия оценщика | Лицензия данных |
| OmniExtractBench | Datalab | 620, из 4 источников | Венгерский алгоритм, по содержимому | Да, 6 типов вердиктов | Apache 2.0 | CC BY 4.0 |
| ExtractBench | LlamaIndex | 370 | Венгерский алгоритм | Различия по полям, HTML-отчёт | Apache 2.0 | Apache 2.0 |
| LongArray-Extract | Extend | 45, синтетические | Венгерский алгоритм | Оценка для каждого документа | Не указана | CC BY 4.0 |
| LongExtractBench | micro1 | 225, из них 50 общедоступных | По ключу строки | Не указано | MIT | CC BY 4.0, только метки |
Источники указаны в названиях каждого бенчмарка. Проверено 27 сентября 2026 года.
Кто пропускает поля, а кто выдумывает значения
Datalab оценила 10 конфигураций систем на полном корпусе. Режим accurate от Datalab лидировал с точностью 93,85. Datalab balanced (93,48) и Reducto deep_extract v2 (93,47) фактически идут вровень. Precision и recall затем показывают, как каждая система ошибается.
- Сбалансированные результаты: у Datalab (в обоих режимах) и Reducto precision и recall отличаются не более чем на 0,6 пункта.
- Склонность к пропускам: GPT 5.6-sol показывает precision 95,11, но recall 84,99. Система теряет 11,88% из-за отсутствующих значений. Gemini и Claude демонстрируют ту же закономерность, но менее выраженную.
- Склонность к выдуманным значениям: LlamaExtract имеет recall 93,13, но precision 86,57, теряя 9,03% из-за сфабрикованных значений. Extend теряет 4,01% из-за выдуманных элементов.
- Низкие показатели по обоим параметрам: Mistral OCR 4.1 и Azure Content Understanding отстают по обеим метрикам, причём recall у них ещё ниже.
Как каждая система не дотягивает до 100% в зависимости от типа вердикта. Источник: Datalab.
Запустите самостоятельно
uv pip install omni-extract-bench
oeb score --pred pred.json --gt gold.json --schema schema.json --verdictsУстановите дополнительный компонент [benchmark] и запустите oeb benchmark, чтобы повторно протестировать поставщиков. Запуски можно возобновлять, а каждому провайдеру нужны собственные учётные данные. Datalab также предлагает протестировать его площадку на собственных документах.
Основные выводы
- OmniExtractBench объединяет 620 документов из наборов LlamaIndex, micro1, Extend и Datalab.
- Детерминированный оценщик присваивает каждому значению 1 из 6 проверяемых вердиктов.
- Сопоставление строк по содержимому не позволяет одной пропущенной строке обнулить результат для всей таблицы.
- Исключение адресов со значением null не позволяет заполнением схемы искусственно завышать результаты.
- Режим accurate от Datalab лидирует с результатом 93,85; Datalab balanced и Reducto делят место примерно на уровне 93,5.
Часто задаваемые вопросы
- Что измеряет OmniExtractBench? Он измеряет, насколько точно система извлекает значения из PDF в JSON-схему, с оценкой по каждому значению.
- Является ли OmniExtractBench проектом с открытым исходным кодом? Да. Оценщик распространяется по лицензии Apache 2.0 на GitHub и PyPI. Набор данных доступен по лицензии CC BY 4.0 на Hugging Face.
- Кто создал OmniExtractBench? Его создала Datalab. Datalab также поддерживает инструменты для работы с документами с открытым исходным кодом Marker и Surya.
Благодарим команду Datalab за ресурсы, использованные при подготовке этой статьи. Datalab поддержала и проспонсировала этот материал.
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.