La Generazione Aumentata da Recupero (RAG) si è affermata come il caso d'uso più adottato dell'intelligenza artificiale generativa tra i nostri clienti. RAG migliora l'accuratezza dei modelli di linguaggio di grandi dimensioni (LLM) recuperando informazioni da fonti esterne, che possono includere documenti non strutturati o dati strutturati. Con la crescente disponibilità di LLM che supportano lunghezze di contesto sempre maggiori, come Anthropic Claude (lunghezza di contesto di 200k), GPT-4-turbo (lunghezza di contesto di 128k) e Google Gemini 1.5 pro (lunghezza di contesto di 2 milioni), gli sviluppatori di applicazioni basate su LLM possono ora alimentare un numero significativamente maggiore di documenti nelle loro applicazioni RAG.
Spingendo all'estremo il concetto di lunghezze di contesto più lunghe, è persino sorto un dibattito sulla possibilità che i modelli linguistici a contesto lungo possano eventualmente sostituire i flussi di lavoro RAG. La logica alla base di questa discussione è semplice: perché recuperare documenti individuali da un database se è possibile inserire l'intero corpus nella finestra di contesto del modello?
Questo articolo di blog esplora l'impatto dell'aumento della lunghezza del contesto sulla qualità delle applicazioni RAG. Abbiamo condotto oltre 2000 esperimenti su 13 popolari LLM, sia open-source che commerciali, per scoprirne le prestazioni su vari set di dati specifici per dominio. Le nostre scoperte sono molteplici e gettano luce sulle capacità e le limitazioni attuali di questi approcci.
Che cos'è la Generazione Aumentata da Recupero (RAG)?
Un flusso di lavoro RAG tipico implica almeno due passaggi. È stato dimostrato che RAG aumenta la qualità dei sistemi di QA (Question Answering) in molti domini e attività (Lewis et al. 2020), fornendo ai modelli l'accesso a informazioni esterne e pertinenti per la generazione delle risposte.
Modelli di linguaggio a contesto lungo
I moderni LLM supportano lunghezze di contesto sempre maggiori, segnando un'evoluzione significativa rispetto alle generazioni precedenti. Mentre l'originale GPT-3.5 aveva una lunghezza di contesto di soli 4k token, GPT-4-turbo e GPT-4o vantano una lunghezza di contesto di 128k. Allo stesso modo, Claude 2 offre una lunghezza di contesto di 200k token e Gemini 1.5 pro si spinge fino a 2 milioni di token. La lunghezza massima di contesto degli LLM open-source ha seguito una tendenza simile: se la prima generazione di modelli Llama aveva una lunghezza di contesto di 2k token, modelli più recenti come Mixtral e DBRX presentano una lunghezza di contesto di 32k token. Il Llama 3.1, recentemente rilasciato, arriva a un massimo di 128k token.
Il beneficio dell'utilizzo del contesto lungo per RAG è che il sistema può migliorare il passaggio di recupero per includere più documenti recuperati nel contesto del modello di generazione, aumentando così la probabilità che un documento rilevante per rispondere alla domanda sia disponibile per il modello. Questo è cruciale per la precisione e la pertinenza delle risposte generate.
D'altra parte, recenti valutazioni dei modelli a contesto lungo hanno messo in evidenza due limitazioni diffuse:
- Lost in the Middle: I modelli di contesto lungo spesso faticano a recuperare le informazioni più rilevanti quando si trovano nel mezzo di una lunga finestra di contesto. Questo significa che le informazioni cruciali posizionate al centro del prompt potrebbero essere ignorate, anche se il modello ha la capacità di vederle.
- Allucinazione: Un contesto più ampio può potenzialmente aumentare le allucinazioni, soprattutto quando vengono fornite informazioni irrilevanti. La presenza di dati superflui o contrastanti può confondere il modello e portarlo a generare risposte imprecise o inventate.
Tenendo conto di queste osservazioni di ricerca, abbiamo progettato esperimenti multipli per sondare il valore potenziale dei modelli a contesto lungo, la loro lunghezza di contesto effettiva nei flussi di lavoro RAG e valutare quando e come questi modelli possono fallire.
Domande di ricerca
Per esaminare l'effetto del contesto lungo sul recupero e sulla generazione, sia individualmente che sull'intera pipeline RAG, abbiamo esplorato le seguenti domande di ricerca:
- RQ1: Come si scala la performance di recupero con la dimensione del contesto?
- RQ2: Come si scala la performance RAG con la dimensione del contesto?
- RQ3: Come influisce la lunghezza di contesto effettiva dei modelli sulla performance RAG?
Impostazioni sperimentali
Abbiamo utilizzato le seguenti impostazioni di recupero per gli esperimenti 1 e 2:
- Dimensione del chunk: 512 token.
- Buffer di recupero: 1.5k token (per il prompt e la generazione).
- Modello di embedding: OpenAI text-embedding-3-large.
Abbiamo utilizzato le seguenti impostazioni di generazione LLM per l'esperimento 2:
- Temperatura: 0.
- Top-P: 1.
- Token massimi: 256.
Durante il benchmarking delle prestazioni a una lunghezza di contesto X, abbiamo utilizzato il seguente metodo per calcolare quanti token utilizzare per il prompt:
Tokens_per_prompt = Lunghezza_contesto_massima - Tokens_per_buffer_generazione - Tokens_per_documenti_recuperati
Abbiamo impostato la lunghezza massima del contesto a 125k token invece di 128k, per lasciare un buffer sufficiente (1.5k) ed evitare errori di "out-of-context". Il resto è il limite di quanto può essere lungo il prompt.
Set di dati utilizzati
In questo studio, abbiamo sottoposto a benchmark tutti gli LLM su 4 set di dati RAG curati, formattati sia per il recupero che per la generazione. Questi includevano Databricks DocsQA e FinanceBench, che rappresentano casi d'uso industriali, e Natural Questions (NQ) e HotPotQA, che rappresentano contesti più accademici. Di seguito sono riportati i dettagli dei set di dati:
- Databricks DocsQA: un set di dati specifico per il settore, basato sulla documentazione di Databricks.
- FinanceBench: un benchmark specifico per il settore, che include documenti più lunghi come le dichiarazioni SEC 10k.
- Natural Questions (NQ): un set di dati pubblico di risposta a domande generali.
- HotPotQA: un set di dati accademico che richiede la combinazione di informazioni da più fonti per rispondere alle domande.
Esperimento 1: Prestazioni di recupero con contesto lungo
In questo esperimento, abbiamo valutato come il recupero di più risultati avrebbe influenzato la quantità di informazioni rilevanti inserite nel contesto del modello di generazione. Specificamente, abbiamo ipotizzato che il recuperatore restituisca un numero X di token e abbiamo quindi calcolato il punteggio di recupero a quel punto di cutoff. Da un'altra prospettiva, la prestazione di recupero rappresenta il limite superiore della prestazione del modello di generazione quando al modello è richiesto di utilizzare solo i documenti recuperati per generare risposte.
Di seguito sono riportati i risultati di recupero per il modello di embedding OpenAI text-embedding-3-large su 4 set di dati e diverse lunghezze di contesto. Abbiamo utilizzato una dimensione del chunk di 512 token e lasciato un buffer di 1.5k per il prompt e la generazione.
Punto di saturazione
Come si può osservare dai dati non mostrati (che sarebbero presenti in una tabella di riferimento), il punteggio di recupero di ogni set di dati si satura a una lunghezza di contesto diversa. Per il set di dati NQ, la saturazione avviene presto, a una lunghezza di contesto di 8k, mentre i set di dati DocsQA, HotpotQA e FinanceBench si saturano a lunghezze di contesto di 96k e 128k rispettivamente. Questi risultati dimostrano che con un semplice approccio di recupero, sono disponibili informazioni rilevanti aggiuntive per il modello di generazione fino a 96k o 128k token. Pertanto, l'aumento delle dimensioni del contesto dei modelli moderni offre la promessa di catturare queste informazioni aggiuntive per migliorare la qualità complessiva del sistema.
Esperimento 2: Prestazioni RAG end-to-end
In questo esperimento, abbiamo combinato il passaggio di recupero e il passaggio di generazione in una semplice pipeline RAG. Per misurare la prestazione RAG a una certa lunghezza di contesto, abbiamo aumentato il numero di chunk restituiti dal recuperatore per riempire il contesto del modello di generazione fino a una data lunghezza di contesto. Successivamente, abbiamo chiesto al modello di rispondere alle domande di un dato benchmark. Di seguito sono illustrate le osservazioni principali relative alle prestazioni di questi modelli a diverse lunghezze di contesto.
Natural Questions (NQ)
Il set di dati Natural Questions è un set di dati di risposta a domande generali disponibile pubblicamente. Speculiamo che la maggior parte dei modelli di linguaggio sia stata addestrata o ottimizzata su attività simili a Natural Questions e, pertanto, abbiamo osservato differenze di punteggio relativamente piccole tra i diversi modelli a lunghezze di contesto brevi. Man mano che la lunghezza del contesto cresce, alcuni modelli iniziano a mostrare una riduzione delle prestazioni, suggerendo che il sovraccarico di informazioni può diventare problematico.
Databricks DocsQA
In confronto a Natural Questions, il set di dati Databricks DocsQA non è disponibile pubblicamente (sebbene il set di dati sia stato curato da documenti disponibili pubblicamente). Le attività sono più specifiche del caso d'uso e si concentrano sulla risposta a domande aziendali basate sulla documentazione di Databricks. Speculiamo che, poiché è meno probabile che i modelli siano stati addestrati su attività simili, la prestazione RAG tra i diversi modelli varia più che nel caso di Natural Questions. Inoltre, poiché la lunghezza media del documento per il set di dati è di 3k, molto più corta di quella di FinanceBench, la saturazione delle prestazioni avviene prima rispetto a FinanceBench.
FinanceBench
Il set di dati FinanceBench è un altro benchmark specifico per caso d'uso che consiste in documenti più lunghi, ovvero le dichiarazioni SEC 10k. Per rispondere correttamente alle domande del benchmark, il modello necessita di una maggiore lunghezza di contesto per catturare informazioni rilevanti dal corpus. Questa è probabilmente la ragione per cui, rispetto ad altri benchmark, il recupero per FinanceBench è basso per dimensioni di contesto piccole (come indicato nella Tabella 1 del contesto originale). Di conseguenza, la prestazione della maggior parte dei modelli si satura a una lunghezza di contesto più lunga rispetto a quella di altri set di dati.
Mediando questi risultati delle attività RAG, abbiamo derivato la tabella di prestazione RAG a contesto lungo (che si trova nella sezione dell'appendice del testo originale) e abbiamo anche tracciato i dati come un grafico lineare nella Figura 1 del testo originale. La Figura 1 all'inizio della pubblicazione mostra la media delle prestazioni su 4 set di dati. Abbiamo riportato i punteggi medi nella Tabella 2 nell'Appendice del testo originale, fornendo una panoramica completa delle prestazioni dei modelli esaminati in diverse condizioni di contesto.