Ръководство за разработчици за 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. Допълнителният пакет за бенчмарка включва адаптерите за парсерите, клиента на Hugging Face и pyarrow за манифеста, а в Colab добавяме Tesseract заедно с моделите за различни писмености чрез apt. Фиксираме и набора от данни към един commit, тъй като хранилището се променя при добавянето на нови парсери. Извеждането на семействата показва структурата, върху която се основава бенчмаркът: тестовете за наличие, подредба и повторение образуват текстовото семейство; table_cell образува семейството на таблиците; а layout_kind — семейството на оформлението.
Преди да се доверим на дадена оценка, искаме да видим какво означава един резултат, затова ръчно създаваме златен файл с тринадесет теста върху измислена страница и оценяваме прогнозите с unit_tests.score — функцията, която използва самият бенчмарк. Базовата прогноза преминава всички тестове, а всеки вариант променя само едно нещо. Една печатна грешка, изпуснат знак минус, различен символ във формула, разменени заглавия и неправилно означен блок променят точно един тест на „не преминава“, като към резултата е добавена и причина. Контролните варианти също преминават: главни букви, пропуснат разделител за хилядите и dfrac вместо frac, защото текстът се нормализира, а уравненията се сравняват след визуализиране от KaTeX.
След като разбрахме как работи оценяващата система, изтегляме манифеста, златните файлове и публикуваните резултати при фиксираната ревизия, пропускаме 1,5 GB изображения на страниците и прочитаме тестовете на всяка страница чрез 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. Фактът, че една страница може да промени толкова силно оценката на дадено семейство, е най-ясният аргумент в полза на повторното изваждане на документи.
Всеки парсер може да бъде оценен и без адаптер: създаваме по един файл с прогнози за всяка страница и извикваме benchmark.grade, като обявяваме изходите, които не можем да произведем, за неподдържани. Нашият парсер прочита вградения текстов слой на 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% от тестовете. Практическият извод е да разделяме бенчмарка според собствените си документи, да представяме интервали и да фиксираме всяка версия.
Разгледайте Notebook и хранилището. Цялата заслуга е на изследователя на проекта. Също така последвайте ни в Twitter и не забравяйте да се присъедините към нашия ML SubReddit с над 150 хил. членове и да се абонирате за нашия бюлетин. Чакайте! Използвате ли Telegram? Вече можете да се присъедините към нас и в Telegram.
Имате нужда от партньор за популяризиране на вашето GitHub хранилище, страница в Hugging Face, продуктово представяне, уебинар и други? Свържете се с нас
Преведено автоматично от английски. Оригиналната статия е на връзката по-долу.