Адаптация архітектуры OCR адзінаму з сканаванымі звярненнямі з лабараторыяў на структураваныя даны
Як стартап у сфере охоры здароўя, які мае обмежаны бюджет, можа выбраць між бібліятэкамі OCR, API-сервісамі Google Cloud і самастаўленым большым мовным модулем для аналізу звуротных даўеджэнняў, калі трэба ператварыць медычныя сканаванні на структураваны JSON.
Крыніцы: How We Chose Our OCR Architecture for a Medical Reports Pipeline (Part 1 of 2)
Ператворэнне фота з выдрукаванага ў лабараторыі дакумента у рядок з тэкстам "Гемаглобін, 13.2, г/дЛ, норма 12.0–15.5" здаецца проблемай OCR, але распазнаванне звычайнага тэксту — толькі першы крок. Настоямая задача — дасягнуць значэння з неакуратна сканаванага дакумента дышча, надзеямо і без выліву дакументаў пацэнтав. У гэтым кераванні практыкай показаныя архітектурныя рашэнні, якія лежачы ў основе такога працэсу выкарыстоўвання дакументаў для MVP медычных атласоў, тады вы зможаце перыскарыстаць гэтыя падходы, калі станёсцеся да падобной проблемы распазнавання дакументаў з мяркавым бюджэтам.
Тэрэтарыў, які керуе всім
Уявіце прылад для дагляду на ранній стадыі. Паціўнты завантажаюць сканаваны медычны атлас – чырвоную кнігу у формате PDF або фота распрытай лабараторнай карткі з тэлефона. Система должна пераканструюваць яго ў структураваныя медычныя записі, якія могу переглядаць і паціўнт, і яго лекар, а таксама якія пазней зможа выкарыстоўваць аналіз, адбываецца за дапамогою штучнага інтэлекту. Кожны такі запис патрабуе чатырох элементаў: назву параметра, яго змераную значэнне, единіцу выражэння і дапустымы дыяпазон.
Гэты апошні пункт ёсць ключовым. Адзін толькі інструмент, який вяртае блок распазнаўаных симвалаў, сам по сабе не задовольняе ціх трэбаванняў. Што-та ўсё равно павінна вырашыць, якое число належыць да каторага тэсту, якая строка ёсць единіцай выражэння і якая пара цифр є дапустымым дыяпазонам. Кожна з такіх рашэнняў стосуецца таго, дзе адбываецца этап „розумэння“ і якія є выкарыстоўваны для цього ресурсы.
Абяцкія умовы былі типавыя для MVP: маленькая каманда, невялікі бюджет на інфраструктуру, а таксама прыбліжна колькасць у 500 заваношаных атласоў на дзень, што дае прыбліжна 30 000 сторанак у месяц.
Рашэнне 1: Выбір мовы для роботы
Прывілеў экасистемы Python ёсць рэальным
Якщо пачаць з пытання «якая мова мае найкращыя інструменты для OCR і ML», то Python без вялікіх сумневоў выгравае. Зрэлыя адкрытые інструменты, такія як PaddleOCR і EasyOCR, ў першую чаргу створаны для Python, у OpenCV таксама є першасортныя інтеграцыі, а большасць прыкладаў комп’ютернай візуалізаціі, якія вы знайдзеце, прыпускаюць викорыстоўванне саме яго. Практычна будь-якая система OCR, створаная з нуля, пачнёцца з Python.
Таксама варта быть чыстасаблівым ў тым, што не яўляецца фактарам разліку. API Vision ад Google была аднай з платных опцыяў, якія расследваліся, і Google публікуе бібліятэкі для кліентаў на Python асобна на Go. Таму наявнасць SDK не спрыяла ні аднаму з ягоў.
Чаму ж выграў Go
Рашаючыя фактары стосаваліся апошней системы, а не самага OCR. Рэшта асінхроннай ланцоўкі вучынена была як працоўнік на Go: ён спрацоўвае заданні з Redis Streams, завантажае аплодаваныя файлы з об’ектнага хранення Cloudflare R2 і запісвае рэзультаты ў Postgres. Адработка крока выкарыстоўвання на Python значыла б запуск двух працоўнікаў, з аднойчы разным розмешчэнням, калітвою залежнасцей і можлівасцямі адзору, для аднай-едзінай функцыі. Інжынер, які яго ствараў, таксама быў наяўнейшы ў працы з Go для такіх служб інфраструктурнага типу.
Загальны вывук: язык з наяўнасцю найбольшага каталогу бібліятэк не ўсегда яўляецца правым выборам. Якщо крок выкарыстоўвання можа быць спраўлены проста праз вызов модэлю через HTTP (што і є канцэнтрацыяй такога падходу), то выкарыстоўванне аднаго тэкучага рашэння для всіх элементаў рабочага шару часта мае большое значэнне, чым глыбіна бібліятэкі, якой вы практычна не будзеце выкарыстоўваць.
Рашэнне 2: Чыстыя API проты самастойнага хоставання, з урахоўваннем цэнаў
Команда параганяла чатыры варыянты на тле прыбліжна 30 000 сторанак у месяц. Наведаны нижэй цифры ўзяты з моменту ацэнкі; цены на чыстыя сервісы могу змяніцца, таму пераканайцеся ў актуальных цэнах пры выкарыстоўванні іх.
- Google Cloud Vision з
DOCUMENT_TEXT_DETECTION. Вернюе неапрануты текст з координатамі, без структураваных поль. Цена складае абоўшынкай $1,50 за 1 000 сторанак, тое ўсьго прыбліжна $45 за месяц.
Правильнае чытанне цых цифраў
API Vision здаецца дыявольна дешавым, але ён рашае іншую проблему. Ён паведамляе вам, што симвалы „13.2“ з’яўляюцца на певных координатах; ён не мае жаданняў пра тое, што гэта значэнні гемаглобіна. Вам усё рава патрэбна будзе самостайна стварыць весь слой парсінгу, таму яго цена не можа быць парабелічная з тыми варыянтамі, якія вяртаюць структураваныя даны.
Document AI дэйсна вяртае структуру, але цена у розмерзе 1 000–2 000 долераў у месяц – гэта вельмі высокі зменны расход для продукту, які ўжо не прыносіць доходу.
Gemini Flash – гэта справжній цікавы кандыдат. Цена, заснованая на токэнах для сканаваных сторанак, знаходзіцца ў той жа дыапазоне, чым самастаяная рэзыдэнція, і вы не мусіце эксплуатаваць жадную інфраструктуру GPU. То чаму бы не выбраць яго?
Чаму самастаяная рэзыдэнція ўсё ж застала лепшай
Тры аргументы вплылі на рашэнне:
- Пята для костоў. Спецыяльны вузел коштае адно і тое ж, незалежна ад таго, працоўвае ён з 5 000 чы 50 000 стораніцаў. API з метражам не мае такой пяты: разыгранне навантажэння, серія праказваў чы масавая імпортаванне адразу паўтарыюцца на рахунку-фактуре.
- Ізоляцыя дадзенняў. Медычныя атласы маюць захіщаную інформацыю пра здароў’е. Выкананне процэсу выкарыстоўвання дадзенняў у сае прыватной сеті каманды значыць, што дакументы пацэнтав ніколі не адправляюцца да API трохтоўскага прадавцы з кожнай загрузкі, чым ухілваецца ад цэлага класу пытанняў, зв’язаных з салідарнасцю і пераглядам прадавца, з якімі каманда MVP не можа эфектыва справляцца.
- Няма зовнішнях квот чы затрымкаў. Не існуе лімітавання частоты запытаў, рэвэнюсных рангаў чы дадатковых переходаў па сеті на критычным шляху.
Рэзультатам было адмова ад варыянтав Google Cloud і Vertex AI і выбор чыста самастойна хоставанай системы.
Цікава таксама ёсць і другая сторона медалі. Розметку за выкарыстоўванне сервера можна прыбліжна расчысляць толькі па меры працездатнасі, яку можа адрабатваць апаратна частка; за ўзгаленнымі межамі патрэбна пакупка дадзейнага апарата, а таксама самастоятельна планаванне ўместкі та гарантаванне стабільнага працы. Самастойна адрабатка таксама не падрыхтавляе да зваліканняя обавязакаў па сарэгуляцыі, адколі вы яшчэ несете адпаведальнасць за зберагчыцтва, кантроль даступу і аудыт гэтых дадзеных. Для невялікага, стабільнага обсягу роботы з чутлівымі дадзенням самастойна адрабатка зазвычай є прыемнейшым варыянтам; для рэзкаг, швытка расліваючагася обсягу роботы, калі у команды няма можлівасцей для аператывнага кантролю, кращым выборам можа стаць API з адпаведным керуванням.
Рашэнне 3: Адказа ад традыцыйных бібліятэкаў OCR
Адынаковыя на адкрытым кодам двайнікі, такія як PaddleOCR і Docling, ўсталяныя для выкарыстання, але іх рэзультаты прызначаны для відображэння. Зазвычай контент пакуецца ў тагі для макетавання або форматуецца як Markdown, ў результаты чаго ён добра відображаецца ў інтерфейсе або у HTML-відображэнні. Гэта ідеальна ситуацыя, калі результат чытае людзь, але некомфортна, калі коду патрэбна чыстая запіс „Гемаглобін: 13,2 г/дл“.
Складанне гэтага прыему ёсць самастоятны проект. Патрэбна будзе выявленне значэнняў з структуры тагоў, прабыткі і помылкі для адпаведнага падходу да розных лабораторых умов і форматаў звярнункоў, а таксама, верагатна, дадаванне функцый прадзеяння або выдзеяння дадзеных з апэратным камерам OpenCV для табелей і раёнаў, якія двыжак не сегментаваў чыста. Усё гэта дапамагае ў інтеграцыі та адрабоце OCR-двыжка. Для MVP гэта значны обсяг роботы, які стосуецца інфраструктуры, а не самага продукта.
Адзін момент, які трэба падчеркнуць: гэтае ацэнка ўскладненая на падставе оценкі каманды, а не остаточнага выніку ўжо зараз. Інжынеры з болей шырокым дазвілом у PaddleOCR або Docling можаць знайсці шырэйшы спосаб пры пераходзе з структураваных выхадных дадзеных да чыстых полей, а оба проекты развіваюцца быстра, таму варта знова пераканаліцца ў іх ныякіх форматах выхадных дадзеных.
Рашынак 4: Самастаяны модель LLM для аналізу звуроцяў, паслядовная да бюджэту
Выяўленне значэння заместо симвалаў
Альтернатыва падходу "OCR, а потым стварэнне парсера для выходных даных OCR" — это использованне мовной моделі, якая можа аналізаваць звурок, каб выпрацаваць оба крока адразу. Класычны OCR распазнаёт симвалы. Модель LLM, якая може аналізаваць звурок і мае чытлівае запрашэнне, можа рассмотрэць сканаваны аркуш і безпосереднія вернуць поля параметра, значэння і еўрана, пры чым адмахнуцца проміжнага крока перетварэння на маркдаун з атрыбутамі.
У гэтым случае можыць аналізаваць звурок ёсць неабходны элемент, а не дапаможны функцыя. Модель, якая працуе толькі з текстам, не можа дапамогчы з сканаваным адпраўкам, таму што ў яго ўжо няма тексту. Модэлю неабходна сама чытаць пікселі.
Этакі падходы маюць свои рызыкі, і варта планаваць ўсе можлыя наследкі з самага пачатку. Моделі мовы можу неправяльна працаваць з цифрамі або ствараць правдападобныя значэння, якіх няма на сторанцы; болей таго, меньшыя моделі не завжды вярнюют самэ гэтае формату JSON, якое вы прасілі. Чыста для дакументаў з медычнымі данымі, гэта выклекае патрэбу ў захоўнай обработцы адпаведзі моделі, перакананні значэнняў па адпаведным типам і дыапазонам, а таксама у можласці для корыстувачоў або клінічных спецялістаў бачыць і выправляць адпаведныя дакументы.
Выбір моделі, якую можна фактычна запусціць
Выбор модэлю адклікаўся той самай логіке бюджэту. Модэлі Qwen з большымя можлівасцямі аналізу звуртка ўваходных дадзенняў є супэрныя, але для роботы такіх масівных модэляў на власным апараты разумнае выкарыстоўванне большай колькасці VRAM і вычысловых ресурсаў, чым магла сабе пэрмітаваць інфраструктура, якую команда закупляла з бюджэту MVP. Таму быў выбран MiniCPM-V — значна меньшы модэль, які Ollama можа запускаць на недорогім апараты без працоўных труднасцей, але які ўсё ж дастатньва хорашы для структураванага аналізу звуртка з фота з лабораторных атласоў.
Якща вы практыкуеце гэтую задачу знову, теставаўце кандыдатскія модэлі на репрезентатывных прыкладах вашых рэальных дакументаў, уключаючы размытыя фота з тэлефонаў і незвычныя плянування лаборатарый, а не толькі на базе рэйтынгаў. Найлепшы модэль на паперы не мае значэння, якщо вы не можете сабе пэрмітаваць яго запуск.
Што ўсё ж патрэбна для реалізацыі
Вышэўжысць архітектуры вялікай меры выявляе што трэба запусціць; пры гэтым процес вырабаткі яшчэ трэба рашыць як гэта зрабіць. Наступныя задачы включаюць пераклад PDF-файлаў у зображэння, якія можа прачытаць модель, структуруванне запиту та прапанняў API Ollama, аберагаючы парсінг JSON, калі малая модель не падтрымлівае запрошанага формата, а таксама викорыстанне Redis Streams у працоўніку на Go, каб звясткі обрабляліся надзеямоўна ў меру зростання обсягу.
Ключовыя выводы
- Абмовіцеся з выходным результатам, які вам трэба (тут: назва, значэнне, еўрэквівалент, дыапазон), прычым перад параборам адзінакоў; неапрануты текст OCR і структураваныя даны — гэта разныя продукты з рознымі ценамі.
- Выберыце мову працоўніка для всей системы, а не тую, якая мае найбольшыя бібліятэкі для аднаго з елементаў.
- Параборыце пакулькі на хмаре за аднаковы выходны результат, а потым разважыце кантэкст цен, ізоляцію дадзенаў і квоты разам з базовай цэнай.