Retrieval augmented generation
La Retrieval Augmented Generation (abbreviato RAG, in italiano: generazione potenziata da ricerca) è una tecnica che si propone di migliorare i risultati di uno strumento di intelligenza artificiale generativa tramite la ricerca in tempo reale di dati che si vanno ad aggiungere all'input utente.
In particolare, si parla di RAG nel caso di IA generativa testuali[1] (come ad esempio ChatGPT), questi modelli, chiamati LLM (large language model), sono capaci di sostenere una conversazione in base alle sole informazioni che sono state immagazzinate all'interno della rete neurale durante il suo addestramento, il che significa che qualsiasi informazione posteriore all'addestramento o estranea ai dati di addestramento è sconosciuta al modello. Tuttavia, ChatGPT è fornito di una componente di retrieval che cerca informazioni rilevanti su internet e le fornisce al modello perché le usi per rispondere meglio agli utenti. Questo è un esempio tipico di Retrieval Augmented Generation, altri esempi attingono a banche dati specializzate per fornire alla AI generativa informazioni settoriali o relative a una certa azienda o organizzazione.
Sistemi RAG degni di nota sono Perplexity e in generale ogni chatbot IA con accesso ad internet, GitHub Copilot e altri strumenti simili di assistenza alla programmazione, oltre a strumenti specialistici che attingono a banche dati settoriali, come ad esempio in campo legale o medico.
Cenni storici
[modifica | modifica wikitesto]Il concetto alla base della RAG è un elemento persistente nella storia dei sistemi di generazione automatica delle risposte, a partire quantomeno dai primi anni '70, attraverso diverse generazioni di modelli di generazione del testo[2]. L'espressione Retrieval Augmented Generation è stata coniata dai ricercatori di Meta (al tempo chiamata Facebook) nel 2020, in un contesto di crescente interesse per i modelli linguistici di grandi dimensioni, decisamente superiori ai modelli precedenti. Si era osservato come questi fossero capaci di immagazzinare al proprio interno conoscenze fattuali, ma non c'era metodo noto per inculcare efficacemente nel modello nuove conoscenze a piacere. La RAG proponeva di aggirare questo problema mantenendo un database esterno al modello, dal quale ricavare a necessità le informazioni rilevanti, e fornirle al modello allegate ai messaggi dell'utente[1].
Fin dall'articolo originale, la RAG è stata spessissimo associata ai database vettoriali, semplice strumento di ricerca semantica basato su un modello di intelligenza artificiale non generativa, capace di proiettare documenti di testo all'interno di uno spazio vettoriale (chiamato embedding) in modo tale da poter facilmente applicare un algoritmo di ricerca di prossimità per trovare documenti che abbiano tra loro un contenuto semanticamente affine[2]. Questo è semplicemente uno dei metodi con cui, a partire da una richiesta dell'utente, si possono trovare documenti rilevanti per questa richiesta, da un corpo complessivo di documenti da cui attingere. Di fatto, si è osservato che la ricerca tramite solo database vettoriale non è ottimale nel caso generale, e che sono più efficaci sistemi ibridi che integrano il DB vettoriale con una ricerca più convenzionale per parole chiave[3].
Componenti
[modifica | modifica wikitesto]I sistemi RAG sono concettualmente divisibili in una serie di processi distinti, più o meno necessari allo sviluppo della soluzione, a seconda del tipo di documenti disponibili e dei casi d'uso:
- Raccolta dati: innanzitutto occorre formare il corpo di documenti da cui attingere in fase di retrieval, e, se necessario, mantenerlo continuamente aggiornato.
- Parsing: spesso, i documenti raccolti non sono semplici file testuali, ma documenti impaginati, oppure file multimediali, in tal caso occorrerà processare questi file in modo da estrarne un contenuto testuale, quantomeno al fine della loro indicizzazione.
- Chunking: soprattutto nel caso di documenti particolarmente lunghi, è utile dividerli in spezzoni di testo singoli, invece che considerare ogni singolo documento come elemento indivisibile. Questa fase è particolarmente importante se si usa un database vettoriale, perché questi strumenti sono più efficaci con elementi testuali di lunghezza omogenea e limitata. Altri vantaggi della divisione dei testi in chunk sono una riduzione controllata del costo e della latenza in fase di generazione, e della potenziale diluizione del contesto con informazioni non rilevanti nel risultato della ricerca. Svantaggio del chunking è la potenziale decontestualizzazione dei singoli chunk estratti da ciascun documento.
- Indicizzazione: i documenti o chunk così realizzati saranno immagazzinati in un database, rintracciabili tramite l'algoritmo di ricerca adottato. A sistemi di indicizzazione diversi corrispondono diversi algoritmi di ricerca; casi tipici sono i database vettoriali, sistemi per parole chiave come TF-IDF o BM25, oppure sistemi basati su grafi di conoscenza. Si possono anche usare sistemi ibridi che utilizzano adattivamente o meno uno o più dei precedenti metodi[3][4].
I processi precedenti sono definiti off-line, cioè da svolgersi una tantum oppure secondo una programmazione necessaria all'aggiornamento della banca dati. I seguenti invece sono processi on-line, ovvero sono svolti ogni volta che l'utente utilizza lo strumento e ne attiva le funzionalità:
- RAG dinamico: è talvolta chiamata così la funzione presente in alcuni sistemi RAG che, in base alle interazioni dell'utente, decide se sia necessario o meno attivare i processi successivi[5]. Alcuni sistemi RAG particolarmente flessibili sono capaci di attivare il retrieval durante la generazione stessa della risposta; in tal caso la generazione viene messa in pausa per la durata dei processi di retrieval e aumento del prompt, e a seconda di dove porta il testo via via generato, il retrieval può essere attivato più o meno volte[6].
- Retrieval (o recupero): va a ricercare nel corpus disponibile le informazioni di interesse alle questioni sollevate dall'utente. Oltre ai differenti algoritmi di ricerca accennati per la fase di indicizzazione, sono state sviluppate ulteriori tecniche basate su IA per migliorare i risultati della ricerca. Tra queste, nominiamo la query rewriting, famiglia di tecniche che affidano a un modello di linguaggio la stesura della query per la ricerca nel database, e il reranking, che utilizza un modello di linguaggio di piccole dimensioni per vagliare un grande numero di testi recuperati, scartare i meno rilevanti, e passare solo i restanti alla fase seguente[7][3].
- Aumento del prompt: i dati ottenuti in fase di retrieval vengono aggiunti al contesto del modello di linguaggio prima (o in alcuni casi durante) che generi la risposta visibile all'utente. In pratica, le informazioni ottenute tramite retrieval, la domanda dell'utente, e gli eventuali messaggi precedenti nella conversazione, devono essere aggregati tramite prompt engineering[8].
- Generazione della risposta: il modello linguistico, ottenuto in input il contesto così elaborato, genera la risposta visibile all'utente.
- Rivelazione delle fonti: idealmente, vengono mostrati all'utente i riferimenti ai documenti estratti tramite retrieval, in modo tale da rendere più facilmente verificabile l'attendibilità della risposta generata e favorire un eventuale approfondimento.
Note
[modifica | modifica wikitesto]- ^ a b (EN) What is retrieval-augmented generation (RAG)?, su IBM Research, 9 febbraio 2021. URL consultato il 29 aprile 2025.
- ^ a b (EN) Rick Merritt, What Is Retrieval-Augmented Generation aka RAG?, su NVIDIA Blog, 31 gennaio 2025. URL consultato il 29 aprile 2025.
- ^ a b c (EN) Introducing Contextual Retrieval, su www.anthropic.com, 19 settembre 2024. URL consultato il 29 aprile 2025.
- ^ Soyeong Jeong, Jinheon Baek e Sukmin Cho, Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity, 28 marzo 2024, DOI:10.48550/arXiv.2403.14403. URL consultato il 30 aprile 2025.
- ^ Grounding con la Ricerca Google | Gemini API, su Google AI for Developers. URL consultato il 30 aprile 2025.
- ^ Weihang Su, Yichen Tang e Qingyao Ai, DRAGIN: Dynamic Retrieval Augmented Generation based on the Information Needs of Large Language Models, 21 settembre 2024, DOI:10.48550/arXiv.2403.10081. URL consultato il 30 aprile 2025.
- ^ (EN) Raising the bar for RAG excellence: introducing generative query rewriting and new ranking model, in TECHCOMMUNITY.MICROSOFT.COM. URL consultato il 30 aprile 2025.
- ^ (EN) What is RAG? - Retrieval-Augmented Generation AI Explained - AWS, su Amazon Web Services, Inc.. URL consultato il 30 aprile 2025.
Voci correlate
[modifica | modifica wikitesto]Altri progetti
[modifica | modifica wikitesto]Wikimedia Commons contiene immagini o altri file sulla retrieval augmented generation