Přeskočit na obsah

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.

# Stádia dokumentové pipeline. Dokument je adresovaný hashem obsahu a výsledek extrakce se cachuje podle hashe a verze extraktoru. Neprošlá kontrola citace nebo částky pošle pohledávku ke kontrole bez ohledu na ostatní. Dnes jen pro přihlášky; obecná klasifikace typu dokumentu, čtení rozvržení stránky a skóre po jednotlivých polích zatím postavené nejsou.

Barva uzlu je stav položky na roadmapě: Rozpracováno

Šest případů, které lepší prompt nevyřeší

PřípadProč 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 strannáklad a kontextové limity; před extrakcí je potřeba výběr stran
Řízení před rokem 2017protokoly 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ášceopakují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í kvality
  • docs/ACCEPTANCE.md — cíle přesnosti a zlatá sada, na které se měří regrese
  • src/progresus_isir/config.py — prahy 0,85 a 0,95 a hranice vysokého nominálu
  • docs/development/COST-MODEL.md — co se musí změřit, než se rozhodne o rozsahu

Souvisí

Zpět na sekci Dokumentace