AGI och framtidens AI

Kraften i Rerankers och Tvåstegsåtervinning för Retrieval Augmented Generation

mm
Lägg till Unite.AI bland dina föredragna källor på Google

När det gäller naturlig språkbehandling (NLP) och informationsåtervinning är förmågan att effektivt och exakt återvinna relevant information av stor vikt. Medan fältet fortsätter att utvecklas, utvecklas nya tekniker och metoder för att förbättra prestandan hos återvinningsystem, särskilt i sammanhanget med Retrieval Augmented Generation (RAG). En sådan teknik, känd som tvåstegsåtervinning med rerankers, har uppstått som en kraftfull lösning för att hantera de inneboende begränsningarna i traditionella återvinningsmetoder.

I den här artikeln diskuterar vi de intrikata detaljerna i tvåstegsåtervinning och rerankers, och utforskar deras underliggande principer, implementeringsstrategier och de fördelar de erbjuder för att förbättra noggrannheten och effektiviteten hos RAG-system. Vi kommer också att tillhandahålla praktiska exempel och kodsnuttar för att illustrera koncepten och underlätta en djupare förståelse av denna banbrytande teknik.

Förståelse av Retrieval Augmented Generation (RAG)

swe agent LLM

Innan vi dyker in i detaljerna i tvåstegsåtervinning och rerankers, låt oss kort återbesöka konceptet med Retrieval Augmented Generation (RAG). RAG är en teknik som utvidgar kunskapen och förmågan hos stora språkmodeller (LLM) genom att ge dem tillgång till externa informationskällor, såsom databaser eller dokumentssamlingar. Läs mer från artikeln “A Deep Dive into Retrieval Augmented Generation in LLM“.

Den typiska RAG-processen omfattar följande steg:

  1. Förfrågan: En användare ställer en fråga eller tillhandahåller en instruktion till systemet.
  2. Återvinning: Systemet frågar en vektordatabas eller dokumentssamling för att hitta information som är relevant för användarens förfrågan.
  3. Tillägg: Den återvunna informationen kombineras med användarens ursprungliga förfrågan eller instruktion.
  4. Generering: Språkmodellen bearbetar den tilläggda ingången och genererar ett svar, med hjälp av den externa informationen för att förbättra noggrannheten och fullständigheten i utdata.

Medan RAG har visat sig vara en kraftfull teknik, är den inte utan utmaningar. En av de viktigaste frågorna ligger i återvinningssteget, där traditionella återvinningsmetoder kan misslyckas med att identifiera de mest relevanta dokumenten, vilket leder till undermåliga eller inkorrekta svar från språkmodellen.

Behovet av Tvåstegsåtervinning och Rerankers

Traditionella återvinningsmetoder, såsom de som baseras på nyckelordsmatchning eller vektormodeller, kämpar ofta för att fånga de nyanserade semantiska relationerna mellan förfrågningar och dokument. Denna begränsning kan leda till att dokument som endast är ytligt relevanta återvinns eller att viktig information som kunde förbättra kvaliteten på det genererade svaret missas.

För att hantera denna utmaning har forskare och praktiker vänt sig till tvåstegsåtervinning med rerankers. Detta tillvägagångssätt omfattar en tvåstegsprocess:

  1. Initial Återvinning: I det första steget återvinns en relativt stor uppsättning potentiellt relevanta dokument med hjälp av en snabb och effektiv återvinningsmetod, såsom en vektormodell eller en nyckelordsbaserad sökning.
  2. Reranking: I det andra steget används en mer avancerad rerankningsmodell för att omordna de initialt återvunna dokumenten baserat på deras relevans för förfrågan, vilket effektivt flyttar de mest relevanta dokumenten till toppen av listan.

Rerankningsmodellen, ofta en neural nätverks- eller transformer-baserad arkitektur, är specifikt utbildad för att bedöma relevansen av ett dokument för en given förfrågan. Genom att utnyttja avancerad naturlig språkförståelse kan rerankern fånga de semantiska nyanserna och kontextuella relationerna mellan förfrågan och dokumenten, vilket resulterar i en mer exakt och relevant rangordning.

Fördelar med Tvåstegsåtervinning och Rerankers

Antagandet av tvåstegsåtervinning med rerankers erbjuder flera betydande fördelar i sammanhanget med RAG-system:

  1. Förbättrad Noggrannhet: Genom att omordna de initialt återvunna dokumenten och främja de mest relevanta till toppen, kan systemet tillhandahålla mer exakt och precist information till språkmodellen, vilket leder till högkvalitativa genererade svar.
  2. Minskade Utanför-Domänproblem: Inbäddningsmodeller som används för traditionell återvinning är ofta tränade på allmänna textkorpus, som kanske inte fångar domänspecifik språk och semantik. Rerankningsmodeller, å andra sidan, kan tränas på domänspecifik data, vilket minskar “utanför-domän”-problemet och förbättrar relevansen hos återvunna dokument inom specialiserade domäner.
  3. Skalbarhet: Det tvåstegs-tillvägagångssättet tillåter effektiv skalbarhet genom att utnyttja snabba och lätta återvinningsmetoder i det initiala steget, medan den mer beräkningsintensiva rerankningsprocessen reserveras för en mindre uppsättning dokument.
  4. Flexibilitet: Rerankningsmodeller kan bytas ut eller uppdateras oberoende av den initiala återvinningsmetoden, vilket ger flexibilitet och anpassningsförmåga till systemets utvecklande behov.

ColBERT: Effektiv och Effektiv Sen Interaktion

En av de utmärkande modellerna inom rerankning är ColBERT (Contextualized Late Interaction over BERT). ColBERT är en dokument-rerankningsmodell som utnyttjar de djupa språkförståelseförmågorna hos BERT samtidigt som den introducerar en ny interaktionsmekanism känd som “sen interaktion”.

ColBERT: Effektiv och Effektiv Passage Sökning via Contextualized Late Interaction over BERT

ColBERT: Effektiv och Effektiv Passage Sökning via Contextualized Late Interaction over BERT

Den sena interaktionsmekanismen i ColBERT tillåter effektiv och exakt återvinning genom att bearbeta förfrågningar och dokument separat tills de sista stegen i återvinningsprocessen. Specifikt kodar ColBERT förfrågan och dokumentet oberoende med hjälp av BERT, och använder sedan en lätt men kraftfull interaktionssteg som modellerar deras fina granularitet. Genom att fördröja men behålla denna fina granularitet kan ColBERT utnyttja uttryckskraften hos djupa språkmodeller samtidigt som det vinner förmågan att förkoda dokumentrepresentationer offline, vilket avsevärt påskyndar förfrågningsbearbetning.

ColBERTs sena interaktionsarkitektur erbjuder flera fördelar, inklusive förbättrad beräknings-effektivitet, skalbarhet med dokument-samlingens storlek och praktisk tillämpbarhet för verkliga scenarier. Dessutom har ColBERT förbättrats med tekniker som brusreducerad tillsyn och residual komprimering (i ColBERTv2), som finslipar träningsprocessen och minskar modellens utrymme medan den behåller hög återvinnings-effektivitet.

Implementering av Tvåstegsåtervinning med Rerankers

Nu när vi har en förståelse för principerna bakom tvåstegsåtervinning och rerankers, låt oss utforska deras praktiska implementering inom ramen för ett RAG-system. Vi kommer att utnyttja populära bibliotek och ramverk för att demonstrera integrationen av dessa tekniker.

Inställning av Miljön

Innan vi dyker in i koden, låt oss ställa in vår utvecklingsmiljö. Vi kommer att använda Python och flera populära NLP-bibliotek, inklusive Hugging Face Transformers, Sentence Transformers och LanceDB.

# Installera nödvändiga bibliotek
!pip install datasets huggingface_hub sentence_transformers lancedb

Dataförberedelse

För demonstrationsändamål kommer vi att använda “ai-arxiv-chunked”-databasen från Hugging Face Datasets, som innehåller över 400 ArXiv-artiklar om maskinlärning, naturlig språkbehandling och stora språkmodeller.

from datasets import load_dataset

<p>dataset = load_dataset(&quot;jamescalam/ai-arxiv-chunked&quot;, split=&quot;train&quot;)</p>

&amp;lt;pre&amp;gt;

Nästa steg är att förbereda data och dela upp den i mindre delar för att underlätta effektiv återvinning och bearbetning.

from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)</p>

För det initiala återvinningssteget kommer vi att använda en Sentence Transformer-modell för att koda våra dokument och förfrågningar till täta vektorrepresentationer, och sedan utföra approximativ närmaste granne-sökning med hjälp av en vektordatabas som LanceDB.

from sentence_transformers import SentenceTransformer
from lancedb import lancedb

<p># Ladda Sentence Transformer-modell
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># Skapa LanceDB-vektordatabas
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Indexera dokument
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)</p>

<p>from sentence_transformers import SentenceTransformer
from lancedb import lancedb</p>

<p># Ladda Sentence Transformer-modell
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># Skapa LanceDB-vektordatabas
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Indexera dokument
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)

Med våra dokument indexerade kan vi utföra det initiala återvinningen genom att hitta de närmaste grannarna till en given förfrågningsvektor.

from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Reranking

Efter det initiala återvinningen kommer vi att använda en rerankningsmodell för att omordna de återvunna dokumenten baserat på deras relevans för förfrågan. I det här exemplet kommer vi att använda ColBERT-rerankern, en snabb och exakt transformer-baserad modell som är specifikt utformad för dokument-rangordning.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

<p># Rerank initiala dokument
reranked_docs = reranker.rerank(query, initial_docs)

Listan reranked_docs innehåller nu dokumenten omordnade baserat på deras relevans för förfrågan, som bestäms av ColBERT-rerankern.

Tillägg och Generering

Med de omordnade och relevanta dokumenten i handen kan vi fortsätta till tilläggs- och genereringsstegen i RAG-pipelinen. Vi kommer att använda en språkmodell från Hugging Face Transformers-biblioteket för att generera det slutliga svaret.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;t5-base&quot;)
model = AutoModelForSeq2SeqLM.from_pretrained(&quot;t5-base&quot;)</p>

<p># Tillägg förfrågan med omordnade dokument
augmented_query = query + &quot; &quot; + &quot; &quot;.join(reranked_docs[:3])</p>

<p># Generera svar från språkmodell
input_ids = tokenizer.encode(augmented_query, return_tensors=&quot;pt&quot;)
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)</p>

print(response)

I kodsnutten ovan tillägger vi den ursprungliga förfrågan med de tre översta omordnade dokumenten, skapar en augmented_query. Vi passerar sedan denna tilläggda förfråga till en T5-språkmodell, som genererar ett svar baserat på den tillhandahållna kontexten.

Variabeln response kommer att innehålla det slutliga svaret, som utnyttjar den externa informationen från de återvunna och omordnade dokumenten för att tillhandahålla ett mer exakt och fullständigt svar på den ursprungliga förfrågan.

Avancerade Tekniker och Överväganden

Medan implementeringen vi har täckt erbjuder en solid grund för att integrera tvåstegsåtervinning och rerankers i ett RAG-system, finns det flera avancerade tekniker och överväganden som kan ytterligare förbättra prestandan och robustheten i tillvägagångssättet.

  1. Förfrågans Utvidgning: För att förbättra det initiala återvinningssteget kan du använda förfrågans utvidgnings-tekniker, som innebär att utvidga den ursprungliga förfrågan med relaterade termer eller fraser. Detta kan hjälpa till att återvinna en mer varierad uppsättning potentiellt relevanta dokument.
  2. Ensemble Reranking: I stället för att förlita sig på en enda rerankningsmodell kan du kombinera flera rerankers i en ensemble, som utnyttjar styrkorna hos olika modeller för att förbättra den övergripande prestandan.
  3. Fine-tuning av Rerankers: Medan förtränade rerankningsmodeller kan vara effektiva, kan fine-tuning av dem på domänspecifik data ytterligare förbättra deras förmåga att fånga domänspecifik semantik och relevanssignal.
  4. Iterativ Återvinning och Reranking: I vissa fall kan en enda iteration av återvinning och reranking inte vara tillräcklig. Du kan utforska iterativa tillvägagångssätt, där utdata från språkmodellen används för att förfinna förfrågan och återvinningsprocessen, vilket leder till ett mer interaktivt och dynamiskt system.
  5. Balans mellan Relevans och Diversitet: Medan rerankers syftar till att främja de mest relevanta dokumenten, är det viktigt att uppnå en balans mellan relevans och diversitet. Inkorporering av diversitet-främjande tekniker kan hjälpa till att förhindra att systemet blir för snävt eller partiskt i sina informationskällor.
  6. Utvärderingsmetoder: För att bedöma effektiviteten hos ditt tvåstegsåtervinning- och rerankningstillvägagångssätt behöver du definiera lämpliga utvärderingsmetoder. Dessa kan omfatta traditionella informationsåtervinningsmetoder som precision, återkallande och medelreciprok rang (MRR), samt uppgiftsspecifika metoder som är anpassade till ditt användningsfall.

Slutsats

Retrieval Augmented Generation (RAG) har uppstått som en kraftfull teknik för att förbättra förmågan hos stora språkmodeller genom att utnyttja externa informationskällor. Men traditionella återvinningsmetoder kan kämpa för att identifiera de mest relevanta dokumenten, vilket leder till undermåliga prestationer.

Tvåstegsåtervinning med rerankers erbjuder en kraftfull lösning på denna utmaning. Genom att kombinera ett initialt snabbt återvinningssteg med en mer avancerad rerankningsmodell kan detta tillvägagångssätt avsevärt förbättra noggrannheten och relevansen hos de återvunna dokumenten, vilket i sin tur leder till högkvalitativa genererade svar från språkmodellen.

Jag har tillbringat de senaste fem åren med att dyka djupt in i den fascinerande världen av Maskinlärning och Djupinlärning. Min passion och expertis har lett mig till att bidra till över 50 olika mjukvaruprojekt, med särskild fokus på AI/ML. Min pågående nyfikenhet har också lett mig mot Naturlig Språkbehandling, ett område som jag är angelägen om att utforska vidare.