Extrakce
Tady projekt uspěje, nebo selže. Dokument nezačíná návrhem, ale výčtem toho, co na těch PDF nefunguje, a končí seznamem případů, u kterých autor přiznává, že řešení zatím nemá.
- Stav
- plánováno — žádný kód pipeline neexistuje
- Výchozí práh
- 0,85 skóre spolehlivosti
- Přísnější práh
- 0,95 pro pohledávky nad 1 000 000 Kč
- Klíč cache
- SHA-256 dokumentu plus verze extraktoru
- LLM stádium
- volitelné na úrovni nasazení; bez něj vše končí v kontrole
Proč to nejde vyřešit klasickým OCR
- Dokumenty jsou převážně skeny velmi různé kvality z desetiletí různých skenerů.
- Přihláška je formulář, jehož význam nese layout — o tom, jestli je číslo jistina nebo příslušenství, zajištěná nebo nezajištěná část, rozhoduje políčko, ve kterém stojí.
- Přílohy o stovkách stran jsou běžné, což je zároveň nákladový i kontextový problém.
- Novela z roku 2017 změnila formulář i režim přezkumu, takže parser psaný na dnešní dokumenty u starších případů tiše nevrátí nic.
Stádia a routing
Stažení adresuje dokument hashem obsahu, takže známý hash se přeskočí. Následuje klasifikace typu dokumentu a oddílu spisu, OCR na text a layoutové boxy, extrakce do deklarovaného JSON schématu (model si tvar výstupu nevolí) a validace: schéma, doménová pravidla, konzistence napříč poli a u závěrek účetní identity.
Skóre je per pole i per záznam. Záznam, u kterého je nominál jistý a příznak zajištění ne, pošle do kontroly příznak a nominál zapíše — pokud záznam zůstane vnitřně konzistentní. Pokud ne, jde do kontroly celý.
Selhané validační pravidlo a selhaná účetní identita míří do kontroly vždy, bez ohledu na skóre. Prompt navíc modelu výslovně přikazuje vrátit null místo odhadu.
Šest případů, které lepší prompt nevyřeší
| Případ | Proč rozbíjí naivní extrakci |
|---|---|
| Přihláška mimo úřední formulář | ruční podání nemá layout, o který by se šlo opřít |
| Přílohy o stovkách stran | náklad a kontextové limity; před extrakcí je potřeba výběr stran |
| Řízení před rokem 2017 | protokoly z přezkumného jednání místo zpráv o přezkumu — jiný dokument, jiný slovník |
| Rozvrhová usnesení | odkazují pořadová čísla ze seznamu přihlášených pohledávek, ne P-pozice |
| Více dílčích pohledávek v jedné přihlášce | opakující se sekce formuláře se musí rozdělit správně, jinak se částky slijí |
| Opravy a doplnění | pozdější dokument mění dřívější; seznam událostí to musí zaznamenat, ne přepsat historii |
Cache a náklad
Výsledky se ukládají podle hashe dokumentu a verze extraktoru. Není to optimalizace, je to podmínka, aby byl event-sourced návrh vůbec finančně únosný — bez cache by každá oprava projektoru stála celý backfill v OCR a tokenech a tým by chyby v projektoru přestal opravovat. Zvýšení verze extraktoru zneplatňuje cache záměrně a výběrově, jen pro typy dokumentů, které se změnily.
Každý dokument stojí čas OCR a tokeny. Rozhodnutí o rozsahu backfillu je proto v prvé řadě nákladové — a nákladový model má být vyplněný před startem fáze 1, ne po něm. Zatím vyplněný není.
Kde to v repozitáři žije
docs/EXTRACTION.md— proč je to těžké, stádia, prahy, cache, obtížné případy, měření kvalitydocs/ACCEPTANCE.md— cíle přesnosti a zlatá sada, na které se měří regresesrc/progresus_isir/config.py— prahy 0,85 a 0,95 a hranice vysokého nomináludocs/development/COST-MODEL.md— co se musí změřit, než se rozhodne o rozsahu
Souvisí
OCR + LLM extrakce do schématu
Klasické OCR na formulářích přihlášek selhává. Pipeline kombinuje OCR a multimodální extrakci do deklarovaného JSON schématu, výsledek validuje a teprve pak zapisuje.
Detail
Výsledky extrakce jsou content-addressed a cachované
Dokument je identifikovaný SHA-256 svých bajtů a výsledek extrakce je uložený proti tomuto hashi. Přehrání projekce znovu použije cache a nespustí OCR ani LLM. Bez toho by každá oprava projektoru stála celý backfill znovu.
Detail
Dokumentová pipeline
PlánovánoStahování do content-addressed úložiště, OCR, extrakce do deklarovaného schématu, validace a skóre spolehlivosti. Výsledky budou cachované podle hashe dokumentu, takže přehrání projekce nic nestojí.
Detail