RAG-prestanda: Längre kontext = bättre AI?

RAG-prestanda: Längre kontext = bättre AI?

Sep 17

Långt kontext RAG-prestanda för LLM-modeller

Retrieval Augmented Generation (RAG) är det mest utbredda användningsområdet för generativ AI bland våra kunder. RAG förbättrar precisionen hos språkmodeller genom att hämta information från externa källor som ostrukturerade dokument eller strukturerad data. Med tillgången till språkmodeller med längre kontextlängder som Anthropic Claude (200k kontextlängd), GPT-4-turbo (128k kontextlängd) och Google Gemini 1.5 pro (2 miljoner kontextlängd), kan utvecklare av LLM-applikationer mata in fler dokument i sina RAG-tillämpningar. Om man tar längre kontextlängder till sin spets pågår det till och med en debatt om huruvida språkmodeller med lång kontext så småningom kommer att ersätta RAG-arbetsflöden. Varför hämta enskilda dokument från en databas om du kan infoga hela korpuset i kontextfönstret?

Detta blogginlägg undersöker effekten av ökad kontextlängd på kvaliteten hos RAG-tillämpningar. Vi genomförde över 2000 experiment på 13 populära open source och kommersiella språkmodeller för att avslöja deras prestanda på olika domänspecifika dataset. Vi fann att:

  • Att hämta fler dokument kan faktiskt vara fördelaktigt: Att hämta mer information för en given fråga ökar sannolikheten att rätt information skickas vidare till språkmodellen. Moderna språkmodeller med långa kontextlängder kan dra nytta av detta och därmed förbättra det övergripande RAG-systemet.
  • Längre kontext är inte alltid optimalt för RAG: De flesta modellers prestanda minskar efter en viss kontextstorlek. Anmärkningsvärt nog börjar Llama-3.1-405b:s prestanda minska efter 32k tokens, GPT-4-0125-preview börjar minska efter 64k tokens, och endast ett fåtal modeller kan upprätthålla konsekvent RAG-prestanda med lång kontext på alla dataset.
  • Modeller misslyckas med lång kontext på mycket distinkta sätt: Vi genomförde djupdykningar i prestandan med lång kontext för Llama-3.1-405b, GPT-4, Claude-3-sonnet, DBRX och Mixtral och identifierade unika felmönster som att avvisa på grund av upphovsrättsliga problem eller alltid sammanfatta kontexten. Många av beteendena tyder på en brist på tillräcklig efterträning på lång kontext.

Bakgrund

RAG: Ett typiskt RAG-arbetsflöde involverar minst två steg:

  • Hämtning: Givet användarens fråga, hämta relevant information från en korpus eller databas. Informationshämtning är ett rikt område inom systemdesign. En enkel, modern metod är dock att bädda in enskilda dokument för att producera en samling vektorer som sedan lagras i en vektordatabas. Systemet hämtar sedan relevanta dokument baserat på likheten mellan användarens fråga och dokumentet. En viktig designparameter vid hämtning är antalet dokument och därmed det totala antalet tokens att returnera.
  • Generering: Givet användarens fråga och hämtad information, generera motsvarande svar (eller vägra om det inte finns tillräckligt med information för att generera ett svar). Genereringssteget kan använda ett brett spektrum av tekniker. En enkel, modern metod är dock att promptma en språkmodell genom en enkel prompt som introducerar den hämtade informationen och relevant kontext för frågan som ska besvaras.

RAG har visat sig öka kvaliteten på frågesvarssystem inom många domäner och uppgifter (Lewis et.al 2020).

Språkmodeller med lång kontext: moderna språkmodeller stöder allt större kontextlängder.

Medan den ursprungliga GPT-3.5 endast hade en kontextlängd på 4k tokens, har GPT-4-turbo och GPT-4o en kontextlängd på 128k. På liknande sätt har Claude 2 en kontextlängd på 200k tokens och Gemini 1.5 pro skryter med en kontextlängd på 2 miljoner tokens. Den maximala kontextlängden för open source språkmodeller har följt en liknande trend: medan den första generationen av Llama-modeller endast hade en kontextlängd på 2k tokens, har nyare modeller som Mixtral och DBRX en kontextlängd på 32k tokens. Den nyligen släppta Llama 3.1 har maximalt 128k tokens.

Fördelen med att använda lång kontext för RAG är att systemet kan utöka hämtningssteget till att inkludera fler hämtade dokument i genereringsmodellens kontext, vilket ökar sannolikheten att ett dokument som är relevant för att besvara frågan finns tillgängligt för modellen.

Å andra sidan har nyligen utvärderingar av modeller med lång kontext avslöjat två utbredda begränsningar:

  • Problemet med att "tappa bort sig i mitten": problemet med att "tappa bort sig i mitten" uppstår när modeller kämpar med att behålla och effektivt utnyttja information från de mellersta delarna av långa texter. Detta problem kan leda till en försämring av prestandan när kontextlängden ökar, där modeller blir mindre effektiva på att integrera information som sprids över omfattande kontexter.
  • Effektiv kontextlängd: RULER-studien undersökte prestandan hos modeller med lång kontext på flera kategorier av uppgifter inklusive hämtning, variabelspårning, aggregering och frågbesvarande, och fann att den effektiva kontextlängden - mängden användbar kontextlängd bortom vilken modellprestandan börjar minska - kan vara mycket kortare än den påstådda maximala kontextlängden.

Metodik

För att undersöka effekten av lång kontext på hämtning och generering, både individuellt och på hela RAG-pipelinen, utforskade vi följande forskningsfrågor:

  1. Effekten av lång kontext på hämtning: Hur påverkar mängden hämtade dokument sannolikheten att systemet hämtar ett relevant dokument?
  2. Effekten av lång kontext på RAG: Hur förändras genereringsprestandan som en funktion av fler hämtade dokument?
  3. Felmönster för lång kontext på RAG: Hur misslyckas olika modeller med lång kontext?

Vi använde följande hämtningsinställningar för experiment 1 och 2:

  • inbäddningsmodell: (OpenAI) text-embedding-3-large
  • chunkstorlek: 512 tokens (vi delade upp dokumenten från korpusen i chunkstorlek på 512 tokens)
  • överlappningsstorlek: 256 tokens (överlappningen mellan angränsande chunks är 256 tokens)
  • vektorlager: FAISS (med IndexFlatL2-index)

Vi använde följande inställningar för LLM-generering i experiment 2:

  • genereringsmodeller: gpt-4o, claude-3-5-sonnet, claude-3-opus, claude-3-haiku, gpt-4o-mini, gpt-4-turbo, claude-3-sonnet, gpt-4, meta-llama-3.1-405b, meta-llama-3-70b, mixtral-8x7b, dbrx, gpt-3.5-turbo
  • temperatur: 0.0
  • max_output_tokens: 1024

Vid jämförelse av prestandan vid kontextlängd X använde vi följande metod för att beräkna hur många tokens som skulle användas för prompten:

  • Givet kontextlängden X subtraherade vi först 1k tokens som används för modellens output
  • Vi lämnade sedan en buffert på 512 tokens

Resten är gränsen för hur lång prompten kan vara (detta är anledningen till att vi använde en kontextlängd på 125k istället för 128k, eftersom vi ville lämna tillräckligt med buffert för att undvika out-of-context-fel).

Utvärderingsdataset

I denna studie utvärderade vi alla språkmodeller på 4 kurerade RAG-dataset som var formaterade för både hämtning och generering. Dessa inkluderade Databricks DocsQA och FinanceBench, som representerar branschfall, samt Natural Questions (NQ) och HotPotQA, som representerar mer akademiska miljöer.

Varför lång kontext för RAG?

Experiment 1: Fördelarna med att hämta fler dokument

I detta experiment bedömde vi hur hämtning av fler resultat skulle påverka mängden relevant information som placeras i genereringsmodellens kontext. Specifikt antog vi att hämtningssystemet returnerar X antal tokens och beräknade sedan recall-poängen vid den gränsen. Ur ett annat perspektiv är recall-prestandan den övre gränsen för prestandan hos genereringsmodellen när modellen måste använda endast de hämtade dokumenten för att generera svar.

Resultaten visar att med en enkel hämtningsmetod finns det ytterligare relevant information tillgänglig för genereringsmodellen ända upp till 96k eller 128k tokens. Därmed erbjuder den ökade kontextstorleken hos moderna modeller löftet om att fånga denna ytterligare information för att öka den övergripande systemkvaliteten.

Att använda längre kontext ökar inte enhetligt RAG-prestandan

Experiment 2: Lång kontext på RAG

I detta experiment satte vi samman hämtningssteget och genereringssteget som en enkel RAG-pipeline. För att mäta RAG-prestandan vid en viss kontextlängd ökade vi antalet chunks som returnerades av hämtningssystemet för att fylla upp genereringsmodellens kontext upp till en given kontextlängd. Vi promptade sedan modellen att besvara frågorna i ett givet riktmärke.

Resultaten visar att:

  • Ökad kontextstorlek gör det möjligt för modeller att dra nytta av ytterligare hämtade dokument: Vi kan observera en ökning av prestandan för alla modeller från 2k till 4k kontextlängd, och ökningen kvarstår för många modeller upp till 16~32k kontextlängd.
  • För de flesta modeller finns det dock en mättnadspunkt efter vilken prestandan minskar, till exempel: 16k för gpt-4-turbo och claude-3-sonnet, 4k för mixtral-instruct och 8k för dbrx-instruct.
  • Icke desto mindre har nyliga modeller, som gpt-4o, claude-3.5-sonnet och gpt-4o-mini, förbättrat beteende med lång kontext som visar lite till ingen prestandaförsämring när kontextlängden ökar.

Sammantaget måste en utvecklare vara uppmärksam vid valet av antalet dokument som ska inkluderas i kontexten. Det är sannolikt att det optimala valet beror på både genereringsmodellen och uppgiften i fråga.

Språkmodeller misslyckas med lång kontext RAG på olika sätt

Experiment 3: Felanalys för språkmodeller med lång kontext

För att bedöma felmönster hos genereringsmodeller vid längre kontextlängd analyserade vi prover från llama-3.1-405b-instruct, claude-3-sonnet, gpt-4, Mixtral-instruct och DBRX-instruct, vilket täcker ett urval av toppmoderna open source och kommersiella modeller.

På grund av tidsbegränsningar valde vi NQ-datasetet för analys eftersom prestandaminskningen för NQ är särskilt märkbar.

Vi extraherade svaren för varje modell vid olika kontextlängder, manuellt inspekterade flera prover och definierade följande breda felkategorier baserat på dessa observationer:

  • upprepat_innehåll: när språkmodellens svar är helt (meningslösa) upprepade ord eller tecken.
  • slumpmässigt_innehåll: när modellen producerar ett svar som är helt slumpmässigt, irrelevant för innehållet eller inte har logisk eller grammatisk mening.
  • misslyckas_följa_instruktion: när modellen inte förstår avsikten med instruktionen eller misslyckas med att följa instruktionen som specificerats i frågan. Till exempel när instruktionen handlar om att besvara en fråga baserat på given kontext medan modellen försöker sammanfatta kontexten.
  • fel_svar: när modellen försöker följa instruktionen men det givna svaret är fel.
  • övrigt: felet faller inte under någon av kategorierna ovan
No items found.