Refresh

This website www.unite.ai/lt/power-of-rerankers-and-two-stage-retrieval-for-retrieval-augmented-generation/ is currently offline. Cloudflare's Always Online™ shows a snapshot of this web page from the Internet Archive's Wayback Machine. To check for the live version, click Refresh.

stub Rerankerių galia ir dviejų etapų paieška, skirta išplėstinei kartai – Unite.AI
Susisiekti su mumis

Bendrasis dirbtinis intelektas

Perreitinguotojų galia ir dviejų etapų paieška papildytai kartai

mm
Atnaujinta on
Atkūrimo papildyta karta

Kalbant apie natūralios kalbos apdorojimą (NLP) ir informacijos gavimą, svarbiausia yra galimybė efektyviai ir tiksliai gauti atitinkamą informaciją. Sričiai ir toliau tobulėjant, kuriami nauji metodai ir metodikos, skirtos pagerinti paieškos sistemų veikimą, ypač atsižvelgiant į Atkūrimo papildyta karta (SKUDRAS). Vienas iš tokių metodų, žinomas kaip dviejų etapų paieška su perreitinguotojais, pasirodė kaip galingas sprendimas sprendžiant būdingus tradicinių paieškos metodų apribojimus.

Šiame išsamiame tinklaraščio įraše gilinsimės į dviejų etapų paieškos ir pervertinimo sudėtingumą, išnagrinėsime jų pagrindinius principus, įgyvendinimo strategijas ir jų teikiamą naudą didinant RAG sistemų tikslumą ir efektyvumą. Taip pat pateiksime praktinių pavyzdžių ir kodo fragmentų, iliustruojančių sąvokas ir palengvinančius šios pažangiausios technikos supratimą.

Išplėstinės kartos (RAG) supratimas

swe agentas LLM

Prieš pasinerdami į dviejų etapų paieškos ir reitingavimo specifiką, trumpai peržvelkime išplėstinės kartos paieškos (RAG) koncepciją. RAG yra metodas, praplečiantis didelių kalbų modelių (LLM) žinias ir galimybes, suteikiant jiems prieigą prie išorinių informacijos šaltinių, tokių kaip duomenų bazės ar dokumentų rinkiniai. Daugiau skaitykite straipsnyje "Gilus pasinerimas į papildytą kartą LLM".

Įprastas RAG procesas apima šiuos veiksmus:

  1. Užklausa: vartotojas užduoda klausimą arba pateikia nurodymus sistemai.
  2. Atsiėmimas: sistema pateikia užklausą vektorinėje duomenų bazėje arba dokumentų rinkinyje, kad surastų informaciją, susijusią su vartotojo užklausa.
  3. padidėjimas: gauta informacija sujungiama su pradine vartotojo užklausa ar instrukcija.
  4. Karta: Kalbos modelis apdoroja papildytą įvestį ir generuoja atsaką, panaudodamas išorinę informaciją, kad padidintų jos išvesties tikslumą ir išsamumą.

Nors RAG pasirodė esanti galinga technika, ji nėra be iššūkių. Viena iš pagrindinių problemų slypi paieškos etape, kai tradiciniais paieškos metodais gali nepavykti nustatyti svarbiausių dokumentų, todėl kalbos modelio atsakymai gali būti neoptimalūs arba netikslūs.

Dviejų etapų paieškos ir pakartotinio reitingavimo poreikis

Tradiciniai paieškos metodai, pvz., pagrįsti raktinių žodžių atitikimu arba vektorinės erdvės modeliais, dažnai stengiasi užfiksuoti niuansuotus semantinius ryšius tarp užklausų ir dokumentų. Dėl šio apribojimo gali būti išieškomi tik paviršutiniškai svarbūs dokumentai arba gali būti praleista svarbi informacija, galinti žymiai pagerinti sugeneruoto atsakymo kokybę.

Siekdami išspręsti šį iššūkį, mokslininkai ir praktikai pradėjo dviejų etapų paiešką su pertvarkytojais. Šis metodas apima dviejų etapų procesą:

  1. Pradinis paėmimas: Pirmajame etape, naudojant greitą ir efektyvų paieškos metodą, pvz., vektorinės erdvės modelį arba raktažodžiu pagrįstą paiešką, gaunamas gana didelis potencialiai svarbių dokumentų rinkinys.
  2. Perskirstymas: Antrajame etape naudojamas sudėtingesnis perskirstymo modelis, kad iš pradžių gauti dokumentai būtų pertvarkyti pagal jų atitikimą užklausai, todėl svarbiausi dokumentai iškeliami į sąrašo viršų.

Perskirstymo modelis, dažnai neuroninis tinklas arba transformatoriumi pagrįsta architektūra, yra specialiai išmokytas įvertinti dokumento tinkamumą tam tikrai užklausai. Naudodamas pažangias natūralios kalbos supratimo galimybes, perreitinguotojas gali užfiksuoti semantinius niuansus ir kontekstinius ryšius tarp užklausos ir dokumentų, todėl reitingas bus tikslesnis ir tinkamesnis.

Dviejų etapų paieškos ir pakartotinio reitingavimo pranašumai

Dviejų etapų paieškos su perreitinguotojais pritaikymas suteikia keletą reikšmingų pranašumų RAG sistemų kontekste:

  1. Patobulintas tikslumas: Perskirstydama iš pradžių gautus dokumentus ir iškeldama pačius aktualiausius į viršų, sistema gali pateikti tikslesnę ir tikslesnę informaciją kalbos modeliui, todėl sugeneruoti atsakymai bus kokybiškesni.
  2. Sušvelnintos už domeno ribų esančios problemos: Įterpimo modeliai, naudojami tradiciniam paieškai, dažnai mokomi bendrosios paskirties teksto korpusuose, kurie gali tinkamai neužfiksuoti konkrečios srities kalbos ir semantikos. Kita vertus, reitingavimo modeliai gali būti mokomi naudojant specifinius domeno duomenis, taip sumažinant „ne domeno“ problemą ir pagerinant gautų dokumentų tinkamumą specializuotose srityse.
  3. Mastelis: Dviejų etapų metodas leidžia efektyviai keisti mastelį, naudojant greitus ir lengvus paieškos metodus pradiniame etape, o sudėtingesnį skaičiavimo perskirstymo procesą paliekant mažesniam dokumentų pogrupiui.
  4. Lankstumas: Perskirstymo modelius galima keisti arba atnaujinti nepriklausomai nuo pradinio paieškos metodo, suteikiant lankstumo ir prisitaikymo prie besikeičiančių sistemos poreikių.

ColBERT: Efektyvi ir efektyvi vėlyva sąveika

Vienas iš išskirtinių modelių perskirstymo srityje yra ColBERT (Kontekstualizuota vėlyva sąveika per BERT). ColBERT yra dokumentų pervertinimo modelis, kuris išnaudoja BERT gilaus kalbos supratimo galimybes, tuo pačiu įdiegdamas naują sąveikos mechanizmą, vadinamą „vėlyva sąveika“.

ColBERT: efektyvi ir efektyvi ištraukų paieška naudojant kontekstualizuotą vėlyvą sąveiką per BERT

ColBERT: efektyvi ir efektyvi ištraukų paieška naudojant kontekstualizuotą vėlyvą sąveiką per BERT

Vėlyvosios sąveikos mechanizmas ColBERT leidžia efektyviai ir tiksliai gauti paiešką apdorojant užklausas ir dokumentus atskirai iki paskutinių paieškos proceso etapų. Tiksliau, ColBERT savarankiškai koduoja užklausą ir dokumentą naudodamas BERT, o tada naudoja lengvą, bet galingą sąveikos veiksmą, kuris modeliuoja jų smulkų panašumą. Atidėliodama, bet išlaikydama šią smulkią sąveiką, ColBERT gali panaudoti gilios kalbos modelių išraiškingumą ir tuo pat metu įgyti galimybę iš anksto apskaičiuoti dokumentų reprezentacijas neprisijungus, o tai žymiai pagreitina užklausų apdorojimą.

Vėlyvoji ColBERT sąveikos architektūra siūlo keletą privalumų, įskaitant patobulintą skaičiavimo efektyvumą, mastelio keitimą atsižvelgiant į dokumentų rinkinio dydį ir praktinį pritaikymą realaus pasaulio scenarijams. Be to, „ColBERT“ buvo dar labiau patobulintas naudojant tokius metodus kaip pašalinta priežiūra ir liekamasis suspaudimas (ColBERTv2), kurie patobulina mokymo procesą ir sumažina modelio erdvės pėdsaką, kartu išlaikant aukštą paieškos efektyvumą.

Šis kodo fragmentas parodo, kaip sukonfigūruoti ir naudoti modelį jina-colbert-v1-en indeksuojant dokumentų rinkinį, išnaudojant jo gebėjimą efektyviai tvarkyti ilgus kontekstus.

Dviejų etapų paieškos įgyvendinimas naudojant rerankuotojus

Dabar, kai jau suprantame dviejų etapų paieškos ir reitingavimo principus, panagrinėkime jų praktinį įgyvendinimą RAG sistemos kontekste. Mes panaudosime populiarias bibliotekas ir sistemas, kad parodytume šių metodų integravimą.

Aplinkos nustatymas

Prieš pasinerdami į kodą, nustatykime kūrimo aplinką. Naudosime Python ir keletą populiarių NLP bibliotekų, įskaitant Hugging Face Transformers, Sentence Transformers ir LanceDB.

# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb

Duomenų paruošimas

Demonstravimo tikslais naudosime „ai-arxiv-chunked“ duomenų rinkinį iš Hugging Face Datasets, kuriame yra daugiau nei 400 ArXiv dokumentų apie mašininį mokymąsi, natūralios kalbos apdorojimą ir didelius kalbų modelius.

from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>

Tada iš anksto apdorosime duomenis ir suskirstysime į mažesnius gabalus, kad būtų lengviau gauti ir apdoroti.

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
Pradiniame paieškos etape naudosime Sakinio transformatoriaus modelį, kad koduotume savo dokumentus ir užklausas į tankias vektorines reprezentacijas, o tada atliksime apytikslę artimiausio kaimyno paiešką naudodami vektorinę duomenų bazę, pvz., LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)

Kai mūsų dokumentai yra indeksuoti, galime atlikti pradinę paiešką, surasdami artimiausius nurodyto užklausos vektoriaus kaimynus.

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Perskirstymas

Po pirminio gavimo naudosime pakartotinio reitingavimo modelį, kad gautus dokumentus pertvarkytume pagal jų atitikimą užklausai. Šiame pavyzdyje naudosime ColBERT reranker – greitą ir tikslų transformatoriaus modelį, specialiai sukurtą dokumentų reitingavimui.

from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)

Šios reranked_docs Dabar sąraše yra dokumentai, pertvarkyti pagal jų svarbą užklausai, kaip nustatyta ColBERT perreitinguotojo.

Augmentacija ir generavimas

Turėdami pertvarkytus ir atitinkamus dokumentus, galime pereiti prie RAG dujotiekio papildymo ir generavimo etapų. Naudosime kalbos modelį iš Hugging Face Transformers bibliotekos, kad sukurtume galutinį atsakymą.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
# Augment query with reranked documents
augmented_query = query + " " + " ".join(reranked_docs[:3])
# Generate response from language model
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(response)

Aukščiau pateiktame kodo fragmente pradinę užklausą papildome trimis geriausiais perreitinguotais dokumentais, sukurdami an augmented_query. Tada šią papildytą užklausą perduodame T5 kalbos modeliui, kuris generuoja atsakymą pagal pateiktą kontekstą.

Šios response kintamajame bus pateikta galutinė išvestis, naudojant išorinę informaciją iš gautų ir pertvarkytų dokumentų, kad būtų pateiktas tikslesnis ir išsamesnis atsakymas į pradinę užklausą.

Pažangūs metodai ir svarstymai

Nors mūsų aptartas diegimas suteikia tvirtą pagrindą dviejų etapų paieškos ir reitingavimo keitimui integruoti į RAG sistemą, yra keletas pažangių metodų ir svarstymų, kurie gali dar labiau pagerinti metodo našumą ir patikimumą.

  1. Užklausos išplėtimas: Norėdami pagerinti pradinį paieškos etapą, galite naudoti užklausos išplėtimo metodus, kurie apima pradinės užklausos papildymą susijusiais terminais ar frazėmis. Tai gali padėti gauti įvairesnį potencialiai susijusių dokumentų rinkinį.
  2. Ansamblių pertvarkymas: Užuot pasikliavę vienu perskirstymo modeliu, galite sujungti kelis perreitinguotojus į ansamblį, išnaudodami skirtingų modelių stipriąsias puses, kad pagerintumėte bendrą našumą.
  3. Tikslus rerankuotojų derinimas: Nors iš anksto parengti perrikiavimo modeliai gali būti veiksmingi, juos tikslinant pagal konkrečius domeno duomenis galima dar labiau pagerinti jų gebėjimą užfiksuoti konkrečios srities semantiką ir aktualumo signalus.
  4. Iteratyvus paieška ir perskirstymas: Kai kuriais atvejais gali nepakakti vienos paieškos ir perskirstymo kartojimo. Galite tyrinėti kartotinius metodus, kai kalbos modelio išvestis naudojama užklausos ir paieškos procesui patikslinti, todėl sukuriama interaktyvesnė ir dinamiškesnė sistema.
  5. Tinkamumo ir įvairovės balansas: Nors reitinguotojai siekia reklamuoti pačius aktualiausius dokumentus, labai svarbu rasti balansą tarp aktualumo ir įvairovės. Įvairovę skatinančių metodų įtraukimas gali padėti išvengti, kad sistemos informacijos šaltiniai būtų pernelyg siauri ar šališki.
  6. Vertinimo metrika: norėdami įvertinti dviejų etapų paieškos ir perskirstymo metodo efektyvumą, turėsite apibrėžti atitinkamą vertinimo metriką. Tai gali būti tradicinė informacijos gavimo metrika, pvz., tikslumas, atšaukimas ir vidutinis abipusis reitingas (MRR), taip pat konkrečios užduoties metrika, pritaikyta jūsų naudojimo atvejui.

Išvada

Išplėstinė kartos paieška (RAG) tapo galingu metodu, leidžiančiu sustiprinti didelių kalbų modelių galimybes, panaudojant išorinius informacijos šaltinius. Tačiau tradiciniais paieškos metodais dažnai sunku nustatyti svarbiausius dokumentus, o tai lemia neoptimalų našumą.

Dviejų etapų paieška naudojant perreitinguotojus yra įtikinamas šio iššūkio sprendimas. Sujungus pradinį greito paieškos etapą su sudėtingesniu perskirstymo modeliu, šis metodas gali žymiai pagerinti gautų dokumentų tikslumą ir tinkamumą, o tai galiausiai lemia aukštesnės kokybės sugeneruotus kalbos modelio atsakymus.

Šiame tinklaraščio įraše išnagrinėjome dviejų etapų paieškos ir pervertinimo principus, pabrėždami jų privalumus ir pateikdami praktinio įgyvendinimo pavyzdį naudojant populiarias NLP bibliotekas ir sistemas. Taip pat aptarėme pažangias technologijas ir svarstymus, kaip dar labiau pagerinti šio metodo našumą ir patikimumą.

Pastaruosius penkerius metus praleidau pasinerdamas į žavų mašininio mokymosi ir giluminio mokymosi pasaulį. Mano aistra ir patirtis paskatino mane prisidėti prie daugiau nei 50 įvairių programinės įrangos inžinerijos projektų, ypatingą dėmesį skiriant AI/ML. Mano nuolatinis smalsumas taip pat patraukė mane į natūralios kalbos apdorojimą – sritį, kurią noriu tyrinėti toliau.