LLM e basi di conoscenza esterne, ovvero cos’è un RAG.

L’integrazione degli LLM con basi di conoscenza esterne nasce dalla necessità di superare alcune delle loro limitazioni intrinseche, in particolare le allucinazioni e l’obsolescenza delle informazioni. Gli LLM, infatti, tendono a produrre risposte che, pur essendo linguisticamente plausibili, possono essere fattualmente imprecise o in conflitto con la realtà (allucinazioni di tipo “fact-conflicting”). Questo accade perché la loro “conoscenza parametrica”, appresa durante il pre-training, può essere errata, incompleta o non aggiornata. Inoltre, i dataset di pre-training hanno una “data di cutoff”, impedendo agli LLM di rispondere a domande su eventi recenti.

Retrieval-Augmented Generation (RAG): Un Approccio Strutturato

Il RAG è stato specificamente sviluppato per mitigare i problemi di retrieval impreciso o allucinatorio. Funziona sostanzialmente come un chatbot di Question Answering (QA) che recupera informazioni da un database fisso, anziché basarsi sulla conoscenza memorizzata durante il pre-training. Questo rende il sistema più affidabile e più estensibile a documenti che non facevano parte del dataset di pre-training dell’LLM.

Il processo RAG si articola in diverse fasi e incorpora varie ottimizzazioni.

Acquisizione e Indicizzazione della Conoscenza Esterna:

  • Fonti: La conoscenza esterna può essere recuperata da diverse fonti affidabili, come ampi corpora non strutturati (es. Common Crawl), database strutturati o siti web come Wikipedia.
  • Embedding e Archiviazione: I documenti vengono convertiti in “chunk” di testo, che vengono poi trasformati in rappresentazioni vettoriali (embedding) tramite un modello di embedding. Questi embedding vengono archiviati in un database vettoriale per consentire un recupero efficiente basato sulla somiglianza semantica.
  • Sfide nell’Indicizzazione: La qualità dei dati di partenza è cruciale; il web scraping, ad esempio, può contenere slang, errori o informazioni fuorvianti che richiedono un’adeguata pulizia. La scelta della strategia di “chunking” (come suddividere i documenti in segmenti) e la dimensione di questi segmenti influenzano la rilevanza del retrieval.

Recupero delle Informazioni (Retrieval):

  • Funzione di Recupero: La somiglianza tra la query dell’utente e i chunk di testo è generalmente determinata tramite la distanza del coseno. Il parametro k (numero di documenti più rilevanti da restituire) è regolabile: un k piccolo può migliorare la comprensione dell’LLM ma potrebbe tralasciare informazioni rilevanti, mentre un k grande aumenta il rischio di diluire il segnale desiderato con informazioni irrilevanti.
  • Query Rewriting: Per migliorare il retrieval, la query dell’utente può essere riscritta o espansa. Questo può includere la generazione di una “chunk ipotetica” di testo (nota come Generation-Augmented Retrieval o GAR, o HyDE) che potrebbe contenere la risposta, per poi usare l’embedding di questa chunk per cercare documenti semanticamente simili. Anche se la chunk ipotetica può essere allucinata, la sua formattazione è più vicina a quella dei documenti cercati, migliorando la pertinenza del retrieval.
  • Subquery Generation: Per query complesse che richiedono la sintesi di più informazioni da diverse parti del corpus, il sistema può generare sub-query (sotto-domande) per recuperare sistematicamente tutte le informazioni necessarie.
  • Reranking: Un problema comune è che i chunk di testo più pertinenti non sempre appaiono in cima alla classifica di somiglianza (“lost in the middle problem”). Il reranking risolve questo problema utilizzando un modello più potente per riordinare i primi k documenti recuperati da un modello di embedding meno potente. Questo assicura che i documenti più rilevanti siano in cima alla lista e vengano elaborati correttamente dall’LLM generatore.
  • Iterative Retrieval: Per domande “multi-hop” che richiedono più passaggi di ragionamento e la sintesi di informazioni da più documenti, il sistema può effettuare chiamate iterative all’indice vettoriale, affinando il contesto ad ogni passaggio.

Utilizzo della Conoscenza (Generation):

  • Prompt Augmentation: Le informazioni pertinenti recuperate vengono concatenate con la query originale dell’utente e passate all’LLM. Questo processo guida l’LLM nella generazione di risposte basate sui dati recuperati, piuttosto che sulla sua conoscenza parametrica.
  • Context Consolidation: Prima di passare i documenti all’LLM, possono essere sintetizzati per adattarsi alla finestra di contesto e migliorare la coerenza. Tecniche come la riassunzione dei fatti chiave in ogni chunk di testo o la creazione di un riassunto globale dell’intero corpus di documenti recuperati (es. tramite un approccio di “tree summarization” in LlamaIndex) sono impiegate per ottimizzare l’input all’LLM.
  • LLM Generatore: L’LLM genera la risposta finale combinando la sua capacità di ragionamento semantico con le informazioni contestuali fornite dai documenti recuperati. L’obiettivo è produrre risposte accurate e precise.

Ma come valutiamo le prestazioni di un modello rispetto alla knowledge base fornita? Prima di valutare effettivamente un modello, dobbiamo familiarizzare con il concetto di Contesto Rilevante. Gli LLM, per loro natura, sono progettati per comprendere e generare linguaggio umano, sfruttando meccanismi come l’auto-attenzione per gestire dati sequenziali e cogliere dipendenze a lungo raggio. Questa capacità di comprendere il contesto è fondamentale per la loro utilità e, di conseguenza, per la loro valutazione. Le metriche di valutazione sono sistemi di misurazione progettati per valutare l’efficacia degli LLM in compiti specifici. Possono essere classificate in base a varie dimensioni, come l’uso di riferimenti, il tipo di unità linguistica analizzata (carattere, parola, embedding) e la specificità del compito. Il ruolo del contesto diventa evidente in diverse fasi e tipi di valutazione.

RAG e il Contesto Rilevante

La “pertinenza del contesto” è una metrica di qualità del RAG che valuta l’efficacia del retriever (il componente che recupera le informazioni) nel restituire un contesto pertinente e nel filtrare quello irrilevante. Le metriche comuni includono:

  • Recall@K: Misura la percentuale di contesti rilevanti recuperati rispetto al totale dei contesti rilevanti presenti nel corpus di recupero, spesso automatizzata tramite LLM che ragionano sul contesto condizionato dalla query.
  • Precision@K: Misura la percentuale di documenti recuperati che sono rilevanti per la query, anch’essa automatizzabile tramite LLM.
  • Mean Reciprocal Rank (MRR): Particolarmente utile per valutare l’efficacia del recupero quando solo un piccolo numero di contesti viene passato al generatore, misurando l’efficacia nel recuperare il contesto più rilevante nella prima posizione.
  • Hit Rate: Misura la proporzione di query per le quali vengono recuperati i contesti più rilevanti.
  • Normalized Discounted Cumulative Gain (nDCG): Una metrica che tiene conto del ranking, misurando l’utilità del contesto recuperato in base al suo ordine di recupero, con un “sconto” applicato ai contesti altamente rilevanti con un ranking basso.
  • Fedeltà della Risposta (Answer Faithfulness/Groundedness): Questa metrica del RAG assicura che le risposte generate siano fattualmente accurate dato il contesto recuperato. Valuta quanto bene il generatore basa le sue risposte sulle conoscenze fornite dal retriever. Metodi basati su lessico (Knowledge-F1, K-precision) e basati su modelli (Q2, LLMCritic che usa GPT-4) sono impiegati per questa valutazione.
  • Pertinenza della Risposta (Answer Relevance): Valuta quanto la risposta generata sia pertinente alla query dell’utente e al contesto recuperato. Spesso viene misurata confrontando domande sintetiche generate dalla risposta e dal contesto con la query originale dell’utente.
  • Robustezza al Rumore (Noise Robustness): Misura la capacità del generatore LLM di sfruttare solo le informazioni utili all’interno di documenti di contesto recuperati rumorosi, rispondendo correttamente nonostante il contesto irrilevante.
  • Rifiuto Negativo (Negative Rejection): Un sistema RAG dovrebbe rifiutarsi di rispondere se nessun contesto recuperato contiene le informazioni rilevanti necessarie. Questa capacità viene valutata in base ai rifiuti corretti.
  • Integrazione delle Informazioni (Information Integration): Misura la capacità del generatore LLM di integrare informazioni da più documenti di contesto per rispondere a domande complesse.
  • Robustezza Controfattuale (Counterfactual Robustness): Valuta la capacità del generatore RAG di identificare falsità nei contesti recuperati. Questo si basa sulla conoscenza parametrica dell’LLM per verificare la fattualità del contesto.

Come intuibile gli altri due fattori di contesto sono il prompt, l’ICL (in-context learning) e il fine-tuning specifico di dominio. Vista l’ampiezza dell’argomento ne parlerò nei prossimi articoli, dedicandone uno al Prompt Engineering e al Context Engineering, facendo anche esempi concreti di utilizzo di Agentic RAG.