Retrieval augmented generation: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
WIP |
→Cenni storici: titolo vietato |
||
(7 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1:
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<ref name=":0">{{Cita web|lingua=en-US|url=https://research.ibm.com/blog/retrieval-augmented-generation-RAG|titolo=What is retrieval-augmented generation (RAG)?|sito=IBM Research|data=2021-02-09|accesso=2025-04-29}}</ref> (come ad esempio [[ChatGPT]]),
Sistemi RAG degni di nota sono [[Perplexity.ai|Perplexity]] e in generale ogni [[Chat bot|chatbot]] IA con accesso ad internet, [[GitHub Copilot]] e altri strumenti simili di assistenza alla [[Programmazione (informatica)|programmazione]], oltre a strumenti specialistici che attingono a banche dati settoriali, come ad esempio in campo legale o medico.
== Storia ==
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<ref name=":1" />. L'espressione ''Retrieval Augmented Generation'' è stata coniata dai ricercatori di [[Meta Platforms|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
Fin dall'articolo originale, la RAG è stata spessissimo associata ai [[Database vettoriale|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 ''[[Immersione (matematica)|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<ref name=":1">{{Cita web|lingua=en-US|autore=Rick Merritt|url=https://blogs.nvidia.com/blog/what-is-retrieval-augmented-generation/|titolo=What Is Retrieval-Augmented Generation aka RAG?|sito=NVIDIA Blog|data=2025-01-31|accesso=2025-04-29}}</ref>. 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<ref name=":2">{{Cita web|lingua=en|url=https://www.anthropic.com/news/contextual-retrieval|titolo=Introducing Contextual Retrieval|sito=www.anthropic.com|data=19 settembre 2024|accesso=2025-04-29}}</ref>.▼
== Componenti ==
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 (motori di ricerca)|'''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 [[Okapi BM25|BM25]], oppure sistemi basati su [[Grafo di conoscenza|grafi di conoscenza]]. Si possono anche usare sistemi ibridi che utilizzano adattivamente o meno uno o più dei precedenti metodi<ref name=":2" /><ref>{{Cita pubblicazione|nome=Soyeong|cognome=Jeong|nome2=Jinheon|cognome2=Baek|nome3=Sukmin|cognome3=Cho|data=2024-03-28|titolo=Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity|accesso=2025-04-30|doi=10.48550/arXiv.2403.14403|url=https://arxiv.org/abs/2403.14403}}</ref>.
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<ref>{{Cita web|url=https://ai.google.dev/gemini-api/docs/grounding?hl=it|titolo=Grounding con la Ricerca Google {{!}} Gemini API|sito=Google AI for Developers|accesso=2025-04-30}}</ref>. 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<ref>{{Cita pubblicazione|nome=Weihang|cognome=Su|nome2=Yichen|cognome2=Tang|nome3=Qingyao|cognome3=Ai|data=2024-09-21|titolo=DRAGIN: Dynamic Retrieval Augmented Generation based on the Information Needs of Large Language Models|accesso=2025-04-30|doi=10.48550/arXiv.2403.10081|url=https://arxiv.org/abs/2403.10081}}</ref>.
# '''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<ref>{{Cita news|lingua=en-US|url=https://techcommunity.microsoft.com/blog/azure-ai-services-blog/raising-the-bar-for-rag-excellence-query-rewriting-and-new-semantic-ranker/4302729/|titolo=Raising the bar for RAG excellence: introducing generative query rewriting and new ranking model|pubblicazione=TECHCOMMUNITY.MICROSOFT.COM|accesso=2025-04-30}}</ref><ref name=":2" />.
# '''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]]<ref>{{Cita web|lingua=en-US|url=https://aws.amazon.com/what-is/retrieval-augmented-generation/|titolo=What is RAG? - Retrieval-Augmented Generation AI Explained - AWS|sito=Amazon Web Services, Inc.|accesso=2025-04-30}}</ref>.
# '''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 ==
<references/>
== Voci correlate ==
* [[Intelligenza artificiale generativa]]
* [[Modello linguistico di grandi dimensioni]]
* [[Chat bot]]
==
{{Interprogetto|preposizione=sulla}}
▲L'espressione ''Retrieval Augmented Generation'' è stata coniata dai ricercatori di [[Meta Platforms|Meta]] (al tempo chiamata ''Facebook'') in un contesto di crescente interesse per i [[modelli linguistici di grandi dimensioni]]. Si era osservato come questi modelli 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 le informazioni ricercare le informazioni necessarie e fornirle al modello allegate ai messaggi dell'utente<ref name=":0" />.
{{Intelligenza artificiale}}
▲Fin dall'articolo originale, la RAG è stata spessissimo associata ai [[Database vettoriale|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 ''[[Immersione (matematica)|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<ref>{{Cita web|lingua=en-US|autore=Rick Merritt|url=https://blogs.nvidia.com/blog/what-is-retrieval-augmented-generation/|titolo=What Is Retrieval-Augmented Generation aka RAG?|sito=NVIDIA Blog|data=2025-01-31|accesso=2025-04-29}}</ref>. 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<ref>{{Cita web|lingua=en|url=https://www.anthropic.com/news/contextual-retrieval|titolo=Introducing Contextual Retrieval|sito=www.anthropic.com|data=19 settembre 2024|accesso=2025-04-29}}</ref>.
{{Portale|informatica}}
[[Categoria:Intelligenza artificiale]]
|