La Pipeline
Nella nostra implementazione, il classificatore è costruito come una pipeline a fasi. Se seguiamo il flusso di esecuzione effettivo, si presenta così:
1. Trasformare ogni input in singole pagine
I PDF vengono renderizzati pagina per pagina. Le immagini vengono convertite in un formato standard in memoria. Alla fine di questa fase, il sistema ha un elenco di singole pagine che possono essere elaborate tutte allo stesso modo.
2. Rilevare le pagine con più elementi e ritagliarle
Ogni pagina viene controllata per vedere se contiene più di un elemento visibile. In caso positivo, il sistema estrae ritagli separati in modo che ogni documento o immagine possa essere elaborato in autonomia.Questo è uno dei motivi più evidenti per cui il classificatore ingenuo fallisce: se un singolo file caricato contiene sia una patente che una carta d'identità, chiedere un'unica etichetta è già in partenza la domanda sbagliata.
3. Rilevare il tipo di pagina e scartare quelle vuote
La decisione successiva non è ancora l'etichetta di business definitiva. Per prima cosa, il sistema decide se ogni elemento è un documento, una foto o una pagina vuota.Le pagine vuote vengono rimosse. Le foto vengono immediatamente indirizzate a una categoria specifica. Le pagine con documenti proseguono lungo la pipeline dedicata.
4. Rilevare e correggere la rotazione
Solo le pagine di tipo documento passano attraverso il rilevamento dell'orientamento. Se una pagina è ruotata, viene raddrizzata prima dell'avvio dell'OCR. Questo passaggio è fondamentale perché l'estrazione successiva diventa molto più affidabile se la pagina è orientata nel verso giusto.
5. Avviare l'OCR e assegnare una categoria iniziale
Dopo la rotazione, il sistema esegue l'OCR su ciascuna pagina del documento. Estrae le informazioni strutturate dalla pagina e assegna una categoria iniziale.In questa implementazione, il lavoro semantico è concentrato nelle fasi visive e di OCR, mentre l'etichetta aziendale finale viene assegnata in modo prudente a partire dalle informazioni estratte utilizzando regole deterministiche. Se le prove sono deboli, la pagina viene lasciata come "sconosciuta". Questo è un principio di produzione importante: è meglio astenersi piuttosto che forzare un'etichetta sicura ma sbagliata.
6. Raggruppare le pagine correlate, recuperare le sconosciute e consolidare per categoria
Se alcune pagine risultano ancora sconosciute, la pipeline avvia una fase di raggruppamento per determinare quali pagine debbano stare insieme. Il risultato del raggruppamento viene convalidato e le pagine sconosciute possono così ereditare il contesto dalle pagine vicine nello stesso sottoinsieme, a patto che ci siano prove sufficientemente forti.
Questa fase di raggruppamento non è il classificatore principale. È un meccanismo di recupero che aiuta a gestire le pagine ambigue dopo il primo passaggio. Una volta che ogni pagina ha una categoria utilizzabile, la pipeline consolida le pagine in base all'etichetta finale, in modo che gli output correlati possano essere gestiti insieme nelle fasi successive.
Questo è ciò che trasforma il classificatore da un semplice prompt a un vero e proprio flusso di lavoro. Il modello non prende un'unica grande decisione; prende una sequenza di decisioni più piccole, e il codice circostante dà a queste decisioni struttura, convalida, comportamenti di fallback e percorsi di recupero.
Perché questo approccio funziona con i modelli privati piccoli
Questa architettura funziona perché le varie fasi sono chiamate reali al modello, ciascuna con un prompt mirato e un output vincolato. Invece di chiedere a un solo modello di risolvere l'intero flusso di ricezione, gli si chiede di prendere una sequenza di decisioni circoscritte.
Questo rende pratici i modelli più piccoli. Il modello gestisce il giudizio, mentre il codice deterministico si occupa di convalida, routing, comportamenti di fallback e dell'assegnazione prudente delle etichette finali.
Inoltre, rende il sistema più sicuro. Le pagine possono essere scartate, indirizzate come foto o lasciate come sconosciute finché non si ha a disposizione più contesto, invece di forzare una risposta troppo presto.
Ed è un approccio perfettamente compatibile con il deployment privato. Nessuna fase richiede un fine-tuning specifico per il task e gli errori rimangono controllati: se il ritaglio, la rotazione, l'OCR o il raggruppamento falliscono, la pipeline può comunque procedere in modo prudente.
Questa, in base alla nostra esperienza, è la vera lezione.
La domanda raramente è "come facciamo a far comportare un modello piccolo come uno enorme?". La domanda migliore è "come possiamo riprogettare il problema in modo che un modello più piccolo possa risolverlo in modo affidabile?".
Un modello mentale pratico
Se stai costruendo il tuo classificatore, immagina il sistema diviso in tre livelli:
- Normalizzazione: trasforma file caotici in unità di elaborazione coerenti.
- Micro-decisioni zero-shot: usa il modello per compiti circoscritti come il rilevamento del tipo, la segmentazione, la rotazione, l'OCR e il raggruppamento.
- Routing aziendale prudente: converti le informazioni estratte in categorie finali, mantenendo un percorso sicuro per i casi incerti.
Questa è un'architettura di produzione molto più realistica rispetto a un singolo prompt di classificazione gigante. È più facile da sottoporre a debug, più facile da valutare e più facile da migliorare nel tempo, perché ogni fase può essere misurata in modo indipendente.