Salta ai contenuti
Service status

Digita per cercare

Documentazione Tecnica · 11 min di lettura

Pipeline OCR

Come Intric trasforma un documento caricato in un indice consultabile: estrazione attenta al layout, OCR, descrizione delle immagini, riassunto, chunking e gli strumenti di retrieval costruiti su questa base.

Quando alleghi un file a un assistente, Intric non si limita a estrarne il testo e a tagliarlo a pezzi. Elabora il documento in più fasi, così che alla prima domanda l’assistente sappia già di cosa parla il file, riesca a trovare un passaggio in base alle parole esatte o al significato e possa scorrere il documento pagina per pagina. Questo articolo descrive le fasi a livello tecnico. Per capire cosa cambia quando usi un assistente, consulta Come Intric interroga i tuoi documenti.

Molti sistemi di retrieval funzionano allo stesso modo: estraggono il testo grezzo, lo tagliano in pezzi di lunghezza fissa, trasformano ogni pezzo in un vettore e incollano nel prompt i pochi pezzi più vicini. Per domande brevi su documenti brevi basta. Con il materiale che le organizzazioni usano davvero, invece, non regge:

  • Una pagina scansionata non ha testo da estrarre, quindi non contribuisce con nulla, e nessuno se ne accorge.
  • Un grafico, un diagramma di flusso o un’infografica vanno persi, anche quando contengono la risposta.
  • Una tabella tagliata a metà perde il legame tra l’intestazione e le righe.
  • A una domanda su un intero capitolo arriva in risposta una manciata di frammenti scollegati.
  • Con decine di file allegati, ogni ricerca passa su tutto, e le corrispondenze deboli dei file irrilevanti scalzano quello giusto.

Ciascuna delle fasi descritte qui sotto esiste per risolvere uno di questi problemi.

L’elaborazione parte non appena alleghi un file e prosegue in background, come una serie di job che dipendono l’uno dall’altro:

  1. Estrazione — Intric legge il documento pagina per pagina. Le pagine che lo richiedono passano per l’OCR, e le figure vanno a un modello di visione.
  2. Riassunto — Intric scrive un breve riassunto dell’intero file.
  3. Chunking e indicizzazione — Intric divide il testo in piccoli passaggi, contrassegna ciascuno con la sua posizione nel documento e lo indicizza sia per la ricerca per parole chiave sia per quella semantica.

Riassunto e indicizzazione partono entrambi al termine dell’estrazione e procedono in parallelo. Se un PDF è molto grande, Intric lo divide in sezioni, le estrae in parallelo e poi le ricompone nell’ordine originale.

L’OCR è più lento e meno preciso della lettura di un livello di testo già presente, quindi Intric non lo applica a tutto. Esamina ogni pagina singolarmente e la manda all’OCR solo quando non può fidarsi che il suo livello di testo sia completo. Per esempio quando:

  • la pagina non ha un livello di testo, come in un documento scansionato
  • il testo incorporato è illeggibile o copre solo una parte di ciò che appare sulla pagina
  • la pagina contiene immagini abbastanza grandi da avere un contenuto proprio
  • la pagina contiene annotazioni, oppure una tabella senza bordi visibili

Intric legge direttamente le pagine con un livello di testo pulito. Per questo un documento in parte nativo digitale e in parte scansionato riceve il trattamento giusto pagina per pagina, anziché finire tutto da una parte o dall’altra.

L’estrazione preserva gli elementi di una pagina il cui significato dipende dalla posizione:

  • Tabelle: Intric le riconosce e le ricostruisce come tabelle strutturate, così ogni valore resta legato all’intestazione della sua colonna.
  • Campi dei moduli: caselle spuntate e campi di testo compilati confluiscono nel testo, così un modulo compilato risulta compilato anche dopo l’estrazione.
  • Confini di pagina: restano esattamente dove sono, ed è questo che in seguito rende possibili i riferimenti alla singola pagina.

Quando una pagina contiene una figura (un diagramma, un grafico, una tabella fotografata, un’infografica), Intric ritaglia l’area della figura e la passa a un vision language model. Il modello scrive una descrizione testuale di ciò che la figura mostra:

  • trascrive il testo presente nell’immagine
  • descrive i diagrammi in base alle loro parti e a come sono collegate
  • converte in dati strutturati le tabelle contenute nelle immagini
  • descrive i grafici in base agli assi e ai punti dati
  • descrive foto, disegni come le planimetrie e campioni di caratteri in base a ciò che mostrano, invece di ridurli alla didascalia

Intric inserisce la descrizione nella posizione della figura sulla pagina, così compare nel suo contesto e finisce nell’indice come qualsiasi altro testo. A quel punto l’assistente può rispondere a una domanda la cui risposta si trova solo in un diagramma di flusso, e citare quella pagina come fonte.

La descrizione delle figure è facoltativa. Sulle installazioni senza un modello di visione configurato l’estrazione funziona comunque, ma si limita al testo.

Tipo Come Intric lo legge
PDF L’intera pipeline descritta sopra, compresi OCR e descrizione delle figure
Word, PowerPoint Estrazione diretta di testo e struttura
Testo semplice, Markdown, HTML, RTF, JSON e formati simili Lettura come testo
Excel, CSV Un percorso a parte: vedi Fogli di calcolo

Intric scrive un breve riassunto di ogni file partendo da un estratto rappresentativo del contenuto.

Sono i riassunti a permettere all’assistente di scegliere in quale file guardare prima di cercare. Se i file sono pochi, il modello riceve subito tutti i riassunti. Se sono molti, il modello può sfogliare l’elenco dei file e lanciare una ricerca trasversale su tutti per individuare i candidati. In entrambi i casi restringe prima il campo, invece di cercare in cinquanta documenti contemporaneamente e dover setacciare le corrispondenze deboli di ognuno. Così i falsi positivi diminuiscono e il contesto di lavoro resta ridotto.

Intric divide il testo estratto in chunk di circa 300 token al massimo. Ogni taglio cade sul confine più naturale disponibile: prima tra un paragrafo e l’altro, poi tra le righe, poi tra le frasi e, solo come ultima risorsa, tra le parole. In un PDF un chunk non oltrepassa mai il confine di una pagina, e una tabella o un altro elemento estratto resta intero, se rientra nel chunk.

Nessuna sovrapposizione, ma una posizione esplicita

Sezione intitolata “Nessuna sovrapposizione, ma una posizione esplicita”

Molti sistemi ripetono il 10–20% di ogni chunk all’inizio del successivo, perché una frase tagliata sul confine sopravviva almeno in uno dei due pezzi. Il risultato è un indice più grande e un prompt pieno di testo ripetuto due volte.

I chunk di Intric non si sovrappongono. Ogni chunk registra invece la propria posizione:

  • numero di pagina: la pagina del documento originale da cui proviene il chunk
  • indice del chunk: la sua posizione nella sequenza di chunk del documento

Dato che la posizione è esplicita, l’assistente può chiedere direttamente “il chunk successivo” o “tutto ciò che c’è a pagina 66”. Così l’assistente recupera il testo circostante solo quando gli serve, invece di pagarne il prezzo in ogni chunk.

Intric indicizza ogni chunk due volte: per la ricerca per parole chiave e, come vector embedding, per la ricerca semantica. Ogni installazione configura il proprio modello di embedding, e ogni indice della conoscenza resta legato al modello di embedding che lo ha creato.

Intric volutamente non divide in chunk né trasforma in embedding i fogli di calcolo e i file CSV. Ridurre una tabella a frammenti di testo e confrontarli come vettori distrugge ciò che la rende una tabella: da poche righe dall’aspetto simile non puoi ricavare una media o un conteggio filtrato.

L’assistente riceve invece la struttura di ogni foglio (le intestazioni delle colonne, alcune righe di esempio e il numero di righe) e risponde alle domande scrivendo ed eseguendo codice sui dati reali, in una sandbox isolata. A una domanda come “quante pratiche sono state chiuse a marzo” risponde calcolando il dato, non tirando a indovinare dai frammenti. Anche i fogli di calcolo ricevono comunque un riassunto, così l’assistente può sceglierli tra gli altri file.

Quando arriva una domanda, l’assistente non lancia un’unica ricerca predefinita. Dispone di una serie di strumenti di retrieval e decide, in base alla domanda, quali usare e in quale ordine.

Strumento Cosa fa
Ricerca ibrida Cerca in un file per parole chiave e per significato allo stesso tempo. Il modello regola il bilanciamento per ogni ricerca, dalla pura corrispondenza per parole chiave alla pura corrispondenza semantica.
Lettura navigazionale Recupera i chunk in base al numero di pagina o all’indice esatto, così il modello può leggere in avanti o all’indietro a partire da un punto che ha trovato.
Lettura integrale Legge un file per intero, per i compiti che richiedono tutto il documento.
Ricerca trasversale Cerca in tutti i file di un assistente per capire quali sono pertinenti.

La ricerca ibrida accetta un peso compreso tra 0 e 1. Con 0 è pura corrispondenza per parole chiave (BM25), con 1 pura similarità semantica, e qualsiasi valore intermedio combina le due. Il modello sceglie il peso per ogni ricerca:

  • un numero di pratica, il riferimento a un articolo o il nome di una persona richiedono un peso basso, così vince la stringa esatta
  • una domanda concettuale richiede un peso alto, così “effetti sulla salute degli orari irregolari” può corrispondere a una domanda sul lavoro notturno
  • la maggior parte delle domande sta da qualche parte nel mezzo

La lettura navigazionale è ciò che permette a un assistente di gestire una richiesta come “riassumi il capitolo 8”:

  1. Una ricerca ibrida di “Capitolo 8” trova il chunk in cui inizia il capitolo, a pagina 65.
  2. Il modello ricava il numero di pagina dalla posizione di quel chunk.
  3. Recupera le pagine successive in ordine (66, 67, 68) finché non arriva al titolo del capitolo 9.
  4. Riassume l’intero capitolo, con i riferimenti alle pagine che ha letto.

Una singola ricerca avrebbe restituito il paragrafo d’apertura del capitolo e qualche passaggio sparso. Leggendo in avanti, il modello ottiene tutto ciò che sta in mezzo.

Leggere un file per intero è utile per i documenti brevi e per compiti come il confronto tra due contratti, ma un file molto grande inonderebbe il contesto. Per i file indicizzati la lettura integrale ha un limite di 60.000 caratteri. Se un file è più grande, lo strumento si rifiuta e indica al modello di usare la ricerca ibrida o la lettura navigazionale: il modello deve così restringere il campo invece di leggere tutto.

Perché non usare semplicemente una finestra di contesto ampia

Sezione intitolata “Perché non usare semplicemente una finestra di contesto ampia”

I modelli con finestre di contesto molto ampie possono, in teoria, assorbire un’intera raccolta di documenti in una volta. In pratica, su centinaia di migliaia di token l’attenzione si diluisce: il modello trascura i passaggi a metà testo e dimentica i vincoli indicati all’inizio. Recuperare una piccola quantità di testo molto pertinente, e allargarla in modo mirato quando serve, mantiene breve e denso il materiale su cui lavora il modello. E permette di ricondurre ogni frammento alla sua origine.

Per ogni chunk che l’assistente recupera sono registrati il file e il numero di pagina di provenienza, e l’assistente è tenuto a citare le fonti che ha usato. Nella risposta ogni riferimento compare come citazione numerata. Per un PDF, la citazione apre il documento originale in un visualizzatore accanto alla conversazione, direttamente alla pagina citata. Gli altri tipi di file si aprono in anteprima.

I riferimenti rimandano alla pagina, non a un passaggio evidenziato, e puntano al file che hai caricato. Per questo caricare il documento originale, e non una copia esportata o convertita, ti dà i riferimenti più utili.

I file allegati a un assistente e quelli caricati direttamente in una conversazione seguono percorsi diversi.

Allegato all’assistente Caricato in una conversazione
Estrazione Pipeline completa, OCR compreso Pipeline completa per i PDF, OCR compreso; gli altri file letti come testo
Riassunto e indicizzazione Sì No
Come viene usato Consultato con gli strumenti di retrieval Il testo estratto va direttamente al modello
Durata Finché resta allegato Per quella conversazione
Scala Grandi biblioteche, molti file Limitata dalla finestra di contesto del modello
Ideale per Manuali, raccolte di policy, archivi Revisioni e confronti occasionali

Gli strumenti di retrieval funzionano solo sui file allegati. Intric legge per intero i file caricati in una conversazione, quindi questi file dipendono dalla finestra di contesto del modello in uso. Vedi Allegati.

Mentre Intric elabora un file, le impostazioni della conoscenza dell’assistente ne mostrano lo stato: prima Waiting… (in attesa), poi Analysing… (analisi in corso) con una barra di avanzamento, infine Done (completato). Lo stato si aggiorna in tempo reale, senza ricaricare la pagina. Se l’elaborazione non va a buon fine, il file mostra Failed (non riuscito) e un pulsante Try again che la riavvia.

Prima di segnalare un errore, la pipeline riprova da sola, e tenta di riparare i PDF danneggiati prima di arrendersi. Un file che non ha ancora finito l’elaborazione resta visibile all’assistente, ma solo come breve estratto, e l’assistente non può cercarci dentro finché l’indicizzazione non è terminata.

Limite Valore
File allegato a un assistente 100 MB
PDF elaborato con OCR 3.000 pagine
File caricato in una conversazione 25 MB
File per domanda in una conversazione 20

Intric rifiuta già al caricamento un PDF che supera il limite di pagine, con un messaggio di errore che ne indica il numero di pagine e il limite.

Ogni fase si svolge all’interno della piattaforma Intric oppure su un endpoint di modello scelto dall’installazione:

  • OCR e analisi del layout avvengono all’interno della piattaforma stessa, senza alcun servizio esterno.
  • Descrizione delle figure, riassunto ed embedding chiamano ciascuno un endpoint di modello configurato separatamente per ogni installazione.

In un’installazione on-premise, ciascuno di questi endpoint può puntare a un modello in esecuzione sulla tua infrastruttura, così un documento passa dal caricamento all’indice senza mai lasciare il tuo ambiente. La pipeline si basa su una coda di job e su un indice di ricerca che fanno parte delle installazioni attuali; un’installazione on-premise meno recente che non li esegue ancora continua a usare la precedente elaborazione della conoscenza finché non viene aggiornata. Per capire come si muovono i dati dei documenti tra Intric e il modello di embedding nel servizio cloud, consulta Flussi di dati della conoscenza.