RAG depinde de relevanța documentelor regăsite: dacă regăsirea greșește, generarea pornește de la date proaste. Corrective Retrieval Augmented Generation (Yan, Gu, Zhu și Ling, 2024) adaugă un evaluator de regăsire ușor, care dă un grad de încredere pentru documentele găsite. În lucrare, evaluatorul este un T5-large ajustat (fine-tuned), mult mai mic decât LLM-urile obișnuite.
Pe baza scorurilor și a două praguri, unul superior și unul inferior, se declanșează o acțiune. Correct: cel puțin un document depășește pragul superior; documentele trec prin rafinare (decompose-then-recompose): sunt împărțite în fâșii de cunoștințe (knowledge strips), fiecare fâșie este punctată de evaluator, cele irelevante sunt eliminate, iar restul se concatenează în ordine. Incorrect: toate documentele sunt sub pragul inferior; sunt eliminate și se face o căutare web. Ambiguous: în rest; se combină cunoștințele interne rafinate cu cele de pe web.
Pentru căutarea web, intrarea este rescrisă de ChatGPT în interogări din cuvinte cheie; autorii au folosit Google Search API, au preferat pagini de autoritate precum Wikipedia și au aplicat aceeași rafinare pe conținutul paginilor. CRAG este plug-and-play: lucrarea îl combină cu RAG standard și cu Self-RAG (Self-CRAG) și raportează îmbunătățiri pe patru seturi de date, cu generare scurtă și lungă.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
Retrieval evaluator |
T5-large ajustat; scor de încredere pentru fiecare document și, la rafinare, pentru fiecare fâșie. |
Prag superior / inferior |
Hiperparametri aleși de autori; lucrarea nu dă valori universale. |
Correct |
Cel puțin un document peste pragul superior → rafinare. |
Incorrect |
Toate documentele sub pragul inferior → documentele se elimină, urmează căutarea web. |
Ambiguous |
Restul cazurilor → cunoștințe interne rafinate + cunoștințe de pe web. |
Knowledge refinement |
Decompose-then-recompose: fâșii, filtrare, recompunere în ordine. |
Exemple practice și scenarii reale
Exemplul 1: Fluxul de decizie CRAG, după lucrare
Pseudocod; pragurile se calibrează pe date etichetate.
documente = retrieve(intrebare)
scoruri = [evaluator(intrebare, d) for d in documente]
if max(scoruri) > PRAG_SUPERIOR: # Correct
cunostinte = rafinare(documente)
elif all(s < PRAG_INFERIOR for s in scoruri): # Incorrect
cunostinte = cautare_web(cuvinte_cheie(intrebare))
else: # Ambiguous
cunostinte = rafinare(documente) + cautare_web(cuvinte_cheie(intrebare))
raspuns = llm(intrebare, cunostinte)
Greșeli frecvente și capcane
- Să copiezi praguri „standard” (de exemplu 0,7 și 0,3). Lucrarea nu dă valori universale; calibrează-le pe date etichetate din domeniul tău.
- Să trimiți pagini web brute în prompt. CRAG aplică pe rezultatele web aceeași rafinare pe fâșii ca pe documentele interne.
- Să ignori costul căutării web. Fiecare caz Incorrect sau Ambiguous adaugă rescrierea interogării, un apel de căutare și descărcarea paginilor.