AGI a budoucnost AI

Síla Rerankingu a Dvoufázového Vyhledávání pro Retrieval Augmented Generation

mm
Přidejte Unite.AI mezi své preferované zdroje na Google

Při zpracování přirozeného jazyka (NLP) a informačního vyhledávání je schopnost efektivně a přesně vyhledávat relevantní informace zásadní. Jak se toto odvětví dále vyvíjí, jsou vyvíjeny nové techniky a metody pro zlepšení výkonu systémů vyhledávání, zejména v kontextu Retrieval Augmented Generation (RAG). Jednou z takových technik je dvoufázové vyhledávání s rerankery, které se stalo silným řešením pro řešení omezení tradičních metod vyhledávání.

V tomto článku budeme diskutovat o jemnostech dvoufázového vyhledávání a rerankingu, zkoumat jejich základní principy, strategie implementace a výhody, které nabízejí pro zlepšení přesnosti a efektivity systémů RAG. Budeme také poskytovat praktické příklady a kódy, aby bylo možné lépe pochopit tuto pokročilou techniku.

Pochopení Retrieval Augmented Generation (RAG)

swe agent LLM

Než se ponoříme do specifik dvoufázového vyhledávání a rerankingu, krátce si připomeňme koncept Retrieval Augmented Generation (RAG). RAG je technika, která rozšiřuje znalosti a schopnosti velkých jazykových modelů (LLM) tím, že jim poskytuje přístup k externím informačním zdrojům, jako jsou databáze nebo sbírky dokumentů. Více informací naleznete v článku “A Deep Dive into Retrieval Augmented Generation in LLM“.

Typický proces RAG zahrnuje následující kroky:

  1. Dotaz: Uživatel položí otázku nebo poskytne pokyn systému.
  2. Vyhledávání: Systém dotazuje vektorovou databázi nebo sbírku dokumentů, aby našel informace relevantní k dotazu uživatele.
  3. Doplnění: Načtené informace jsou kombinovány s původním dotazem nebo pokynem uživatele.
  4. Generování: Jazykový model zpracovává doplněný vstup a generuje odpověď, využívaje externí informace ke zlepšení přesnosti a komplexity výstupu.

Zatímco RAG se ukázal jako silná technika, není bez svých výzev. Jedním z klíčových problémů je fáze vyhledávání, kde tradiční metody vyhledávání mohou selhat při identifikaci nejrelevantnějších dokumentů, vedoucích k suboptimálním nebo nepřesným odpovědím jazykového modelu.

Potřeba Dvoufázového Vyhledávání a Rerankingu

Tradiční metody vyhledávání, jako jsou ty založené na shodě klíčových slov nebo vektorových prostorech, často zápasí s tím, aby zachytily jemné sémantické vztahy mezi dotazy a dokumenty. Tento limit může vést k vyhledání dokumentů, které jsou pouze povrchně relevantní nebo chybí zásadní informace, které by mohly výrazně zlepšit kvalitu generované odpovědi.

Aby se tato výzva řešila, výzkumníci a praktici se obrátili na dvoufázové vyhledávání s rerankery. Tento přístup zahrnuje dvoukrokový proces:

  1. Původní Vyhledávání: V první fázi je vyhledán relativně velký soubor potenciálně relevantních dokumentů pomocí rychlé a efektivní metody vyhledávání, jako je vektorový prostor nebo hledání založené na klíčových slovech.
  2. Reranking: Ve druhé fázi je použit sofistikovanější model rerankingu, aby byly dokumenty z původního vyhledávání seřazeny podle jejich relevance k dotazu, efektivnímu umístění nejrelevantnějších dokumentů na vrchol seznamu.

Model rerankingu, často neuronová síť nebo architektura založená na transforméru, je speciálně vyškolena pro hodnocení relevance dokumentu k danému dotazu. Díky pokročilým schopnostem porozumění přirozenému jazyku může reranker zachytit sémantické nuance a kontextové vztahy mezi dotazem a dokumenty, vedoucí k přesnějšímu a relevantnějšímu řazení.

Výhody Dvoufázového Vyhledávání a Rerankingu

Adopce dvoufázového vyhledávání s rerankery nabízí několik významných výhod v kontextu systémů RAG:

  1. Zlepšení Přesnosti: Rerankováním původně vyhledaných dokumentů a umístěním nejrelevantnějších dokumentů na vrchol seznamu může systém poskytnout jazykovému modelu více přesné a přesné informace, vedoucí k vyšším kvalitám generovaných odpovědí.
  2. Snížení Problémů Mimo Doménu: Modely vložené do tradičního vyhledávání jsou často vyškolena na obecných textových korporách, které nemusí dostatečně zachytit doménově specifický jazyk a sémantiku. Modely rerankingu, na druhé straně, mohou být vyškolena na doménově specifických datech, čímž se snižuje “problém mimo doménu” a zlepšuje se relevance vyhledaných dokumentů v rámci specializovaných domén.
  3. Škálovatelnost: Dvoufázový přístup umožňuje efektivní škálování tím, že využívá rychlé a lehké metody vyhledávání v první fázi, zatímco více výpočetně náročný proces rerankingu je rezervován pro menší soubor dokumentů.
  4. Pružnost: Modely rerankingu mohou být vyměněny nebo aktualizovány nezávisle na metodě původního vyhledávání, poskytujíce pružnost a adaptabilitu pro měnící se potřeby systému.

ColBERT: Efektivní a Účinný Pozdní Interakce

Jedním z vynikajících modelů v oblasti rerankingu je ColBERT (Contextualized Late Interaction over BERT). ColBERT je model rerankingu dokumentů, který využívá hluboké jazykové porozumění BERT a zavádí novou interakční mechanismus známý jako “pozdní interakce”.

ColBERT: Efektivní a Účinný Vyhledávání Pasáží prostřednictvím Kontextualizované Pozdní Interakce nad BERT

ColBERT: Efektivní a Účinný Vyhledávání Pasáží prostřednictvím Kontextualizované Pozdní Interakce nad BERT

Mechanismus pozdní interakce v ColBERT umožňuje efektivní a přesné vyhledávání tím, že zpracovává dotazy a dokumenty samostatně až do konečných fází procesu vyhledávání. Konkrétně ColBERT samostatně kóduje dotaz a dokument pomocí BERT a poté používá lehký, ale silný interakční krok, který modeluje jemnou podobnost mezi nimi. Zpožděním, ale zachováním této jemné interakce, ColBERT může využít expresivitu hlubokých jazykových modelů a zároveň získat schopnost předem počítat reprezentace dokumentů offline, což výrazně urychluje zpracování dotazů.

Architektura pozdní interakce ColBERT nabízí několik výhod, včetně zlepšení výpočetní efektivity, škálovatelnosti s velikostí sbírky dokumentů a praktické aplikovatelnosti pro reálné scénáře. Kromě toho byl ColBERT dále vylepšen technikami, jako je odšumění dohledu a reziduální komprese (v ColBERTv2), které rafinují proces školení a snižují prostorový dopad modelu, zatímco udržují vysokou efektivitu vyhledávání.

Implementace Dvoufázového Vyhledávání s Rerankery

Teď, když máme pochopení principů dvoufázového vyhledávání a rerankingu, prozkoumejme jejich praktickou implementaci v kontextu systému RAG. Budeme využívat populární knihovny a rámce, aby demonstrujeme integraci těchto technik.

Nastavení Prostředí

Než se ponoříme do kódu, nastavme naše vývojové prostředí. Budeme používat Python a několik populárních knihoven NLP, včetně Hugging Face Transformers, Sentence Transformers a LanceDB.

# Instalace požadovaných knihoven
!pip install datasets huggingface_hub sentence_transformers lancedb

Příprava Dat

Pro demonstrační účely budeme používat dataset “ai-arxiv-chunked” z Hugging Face Datasets, který obsahuje přes 400 článků z ArXiv o strojovém učení, zpracování přirozeného jazyka a velkých jazykových modelech.

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;

Další krok bude předzpracování dat a rozdělení na menší části, aby se usnadnilo efektivní vyhledávání a zpracování.

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>

Pro počáteční fázi vyhledávání budeme používat model Sentence Transformer pro kódování našich dokumentů a dotazů do hustých vektorových reprezentací a poté provedeme aproximované vyhledávání nejbližších sousedů pomocí vektorové databáze, jako je LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb

<p># Načtení modelu Sentence Transformer
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># Vytvoření vektorové databáze LanceDB
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Indexování 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># Načtení modelu Sentence Transformer
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># Vytvoření vektorové databáze LanceDB
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

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

S našimi dokumenty indexovanými, můžeme provést počáteční vyhledávání najít nejbližší sousedy k danému dotazu.

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

Po počátečním vyhledávání budeme používat model rerankingu, aby dokumenty byly seřazeny podle jejich relevance k dotazu. V tomto příkladu budeme používat model ColBERT rerankingu, rychlý a přesný transformátorový model speciálně navržen pro řazení dokumentů.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

<p># Reranking počátečních dokumentů
reranked_docs = reranker.rerank(query, initial_docs)

Seznam reranked_docs nyní obsahuje dokumenty seřazeny podle jejich relevance k dotazu, jak určeno modelem ColBERT rerankingu.

Doplnění a Generování

S relevantními dokumenty v ruce, můžeme pokračovat ve fázích doplnění a generování pipeline RAG. Budeme používat jazykový model z knihovny Hugging Face Transformers pro generování konečné odpovědi.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

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

<p># Doplnění původního dotazu s rerankovanými dokumenty
augmented_query = query + &quot; &quot; + &quot; &quot;.join(reranked_docs[:3])</p>

<p># Generování odpovědi z jazykového modelu
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)

V kódu výše je ukázka, jak nakonfigurovat a použít model jina-colbert-v1-en pro indexování kolekce dokumentů, využívající jeho schopnost efektivně zpracovávat dlouhé kontexty.

Proměnná response bude obsahovat konečnou odpověď, využívající externí informace z vyhledaných a rerankovaných dokumentů pro poskytnutí více přesné a komplexní odpovědi na původní dotaz.

Pokročilé Techniky a Úvahy

Zatímco implementace, kterou jsme prošli, poskytuje solidní základ pro integraci dvoufázového vyhledávání a rerankingu do systému RAG, existují několik pokročilých technik a úvah, které mohou dále zlepšit výkon a robustnost tohoto přístupu.

  1. Rozšíření Dotazu: Pro zlepšení počáteční fáze vyhledávání lze použít techniky rozšíření dotazu, které zahrnují doplnění původního dotazu souvisejícími termíny nebo frázemi. To může pomoci vyhledat více rozmanitý soubor potenciálně relevantních dokumentů.
  2. Ensemble Rerankingu: Místo spoléhání se na jeden model rerankingu lze kombinovat více modelů rerankingu do ensemble, využívající silné stránky různých modelů pro zlepšení celkového výkonu.
  3. Specifické Školení Rerankingu: Zatímco předškolené modely rerankingu mohou být efektivní, specifické školení na doménově specifických datech může dále zlepšit jejich schopnost zachytit doménově specifické sémantiky a signály relevance.
  4. Iterativní Vyhledávání a Reranking: V některých případech může být jedna iterace vyhledávání a rerankingu nedostatečná. Lze prozkoumat iterativní přístupy, kde výstup jazykového modelu je použit pro rafinaci dotazu a procesu vyhledávání, vedoucí k více interaktivnímu a dynamickému systému.
  5. Rovnováha Relevance a Rozmanitosti: Zatímco modely rerankingu cílí na propagaci nejrelevantnějších dokumentů, je důležité najít rovnováhu mezi relevancí a rozmanitostí. Zařazení technik, které podporují rozmanitost, může pomoci zabránit tomu, aby systém byl příliš úzký nebo zkreslený ve svých informačních zdrojích.
  6. Metriky Hodnocení: Pro hodnocení efektivity dvoufázového vyhledávání a rerankingu je třeba definovat vhodné metriky hodnocení. Tyto mohou zahrnovat tradiční metriky vyhledávání, jako je přesnost, recall a střední hodnota reziproké rangové pozice (MRR), stejně jako úkolem specifické metriky přizpůsobené vašemu případu použití.

Závěr

Retrieval Augmented Generation (RAG) se stal silnou technikou pro zlepšení schopností velkých jazykových modelů (LLM) tím, že jim poskytuje přístup k externím informačním zdrojům. Nicméně, tradiční metody vyhledávání často zápasí s identifikací nejrelevantnějších dokumentů, vedoucích k suboptimálním výkonům.

Dvoufázové vyhledávání s rerankery nabízí přesvědčivé řešení této výzvy. Kombinací počáteční rychlé fáze vyhledávání s více sofistikovaným modelem rerankingu lze významně zlepšit přesnost a relevanci vyhledaných dokumentů, vedoucí k vyšším kvalitám generovaných odpovědí z jazykového modelu.

Já pět let se ponořím do fascinujícího světa strojového učení a hlubokého učení. Mé vášně a odborné znalosti mě vedly k tomu, abych se podílel na více než 50 různých projektech softwarového inženýrství, se zvláštním zaměřením na AI/ML. Mé pokračující zvědavosti mě také přivedly k přirozenému jazykovému zpracování, oblasti, kterou jsem ochoten prozkoumat dále.