Miglioramento delle prestazioni di recupero nelle pipeline RAG con la ricerca ibrida |  di Leonie Monigatti |  Novembre 2023

 | Intelligenza-Artificiale

Come trovare risultati di ricerca più pertinenti combinando la tradizionale ricerca basata su parole chiave con la moderna ricerca vettoriale

barra di ricerca ibrida
Barra di ricerca con funzionalità di ricerca ibrida

Con il recente interesse per Generazione aumentata di recupero (RAG), gli sviluppatori hanno iniziato a discutere le sfide nella costruzione di pipeline RAG con prestazioni pronte per la produzione. Proprio come in molti aspetti della vita, il principio di Pareto entra in gioco anche con le pipeline RAG, dove raggiungere l’80% iniziale è relativamente semplice, ma raggiungere il restante 20% per la preparazione alla produzione si rivela impegnativo.

Un tema comunemente ripetuto è quello di migliorare la componente di recupero di una pipeline RAG con la ricerca ibrida.

Gli sviluppatori che hanno già acquisito esperienza nella creazione di pipeline RAG lo hanno fatto hanno iniziato a condividere le loro intuizioni. Un tema comunemente ripetuto è quello di migliorare la componente di recupero di una pipeline RAG con la ricerca ibrida.

Questo articolo presenta il concetto di ricerca ibrida, come può aiutarti a migliorare le prestazioni della pipeline RAG recuperando risultati più pertinenti e quando utilizzarla.

La ricerca ibrida è una tecnica di ricerca che combina due o più algoritmi di ricerca per migliorare la pertinenza dei risultati di ricerca. Sebbene non sia definito quali algoritmi siano combinati, la ricerca ibrida si riferisce più comunemente alla combinazione della tradizionale ricerca basata su parole chiave e della moderna ricerca vettoriale.

Tradizionalmente, la ricerca basata su parole chiave era la scelta più ovvia per i motori di ricerca. Ma con l’avvento degli algoritmi di Machine Learning (ML), gli incorporamenti di vettori hanno consentito una nuova tecnica di ricerca, chiamata ricerca vettoriale o semantica, che ci ha permesso di effettuare ricerche semantiche tra i dati. Tuttavia, entrambe le tecniche di ricerca presentano dei compromessi essenziali da considerare:

  • Ricerca basata su parole chiave: Sebbene le sue capacità di corrispondenza esatta delle parole chiave siano vantaggiose per termini specifici, come nomi di prodotti o gergo del settore, è sensibile agli errori di battitura e ai sinonimi, che lo portano a perdere un contesto importante.
  • Ricerca vettoriale o semantica: Sebbene le sue capacità di ricerca semantica consentano una ricerca multilingue e multimodale basata sul significato semantico dei dati e li rendano resistenti agli errori di battitura, può perdere parole chiave essenziali. Inoltre, dipende dalla qualità degli incorporamenti vettoriali generati ed è sensibile ai termini fuori dominio.

La combinazione di ricerche basate su parole chiave e vettoriali in una ricerca ibrida consente di sfruttare i vantaggi di entrambe le tecniche di ricerca per migliorare la pertinenza dei risultati di ricerca, in particolare per i casi d’uso della ricerca testuale.

Ad esempio, considera la query di ricerca “Come unire due DataFrames Panda con .concat()?”. La ricerca per parole chiave aiuterebbe a trovare risultati pertinenti per il metodo .concat(). Tuttavia, poiché la parola “unire” ha sinonimi come “combinare”, “unire” e “concatenare”, sarebbe utile se potessimo sfruttare la consapevolezza del contesto della ricerca semantica (vedere maggiori dettagli in Quando utilizzeresti la ricerca ibrida).

Se sei interessato, puoi giocare con le diverse query di ricerca basate su parole chiave, semantiche e ibride per cercare film in questo live demo (la sua implementazione è dettagliata in Questo articolo).

La ricerca ibrida combina tecniche di ricerca basate su parole chiave e vettoriali fondendo i risultati della ricerca e riclassificandoli.

Ricerca basata su parole chiave

La ricerca basata su parole chiave nel contesto della ricerca ibrida utilizza spesso una rappresentazione chiamata incorporamenti sparsi, motivo per cui viene chiamata anche ricerca vettoriale sparsa. Gli incorporamenti sparsi sono vettori con valori per lo più pari a zero con solo pochi valori diversi da zero, come mostrato di seguito.

(0, 0, 0, 0, 0, 1, 0, 0, 0, 24, 3, 0, 0, 0, 0, ...)

Gli incorporamenti sparsi possono essere generati con diversi algoritmi. L’algoritmo più comunemente utilizzato per gli incorporamenti sparsi è BM25 (Migliore corrispondenza 25), che si basa sull’approccio TF-IDF (Term Frequency-Inverse Document Frequency) e lo perfeziona. In termini semplici, BM25 sottolinea l’importanza dei termini in base alla loro frequenza in un documento rispetto alla loro frequenza in tutti i documenti.

Ricerca vettoriale

La ricerca vettoriale è una tecnica di ricerca moderna emersa con i progressi del machine learning. Algoritmi ML moderni, come Trasformatoripuò generare una rappresentazione numerica di oggetti dati in varie modalità (testo, immagini, ecc.) chiamate incorporamenti vettoriali.

Questi incorporamenti di vettori sono solitamente densamente ricchi di informazioni e comprendono per lo più valori diversi da zero (vettori densi), come mostrato di seguito. Questo è il motivo per cui la ricerca vettoriale è nota anche come ricerca vettoriale densa.

(0.634, 0.234, 0.867, 0.042, 0.249, 0.093, 0.029, 0.123, 0.234, ...)

Una query di ricerca è incorporata nello stesso spazio vettoriale degli oggetti dati. Quindi, l’incorporamento del vettore viene utilizzato per calcolare gli oggetti dati più vicini in base a una metrica di somiglianza specifica, come la distanza coseno. I risultati della ricerca restituiti elencano gli oggetti dati più vicini classificati in base alla loro somiglianza con la query di ricerca.

Fusione di risultati di ricerca basati su parole chiave e vettoriali

Sia la ricerca basata su parole chiave che quella vettoriale restituiscono un insieme separato di risultati, solitamente un elenco di risultati di ricerca ordinati in base alla loro rilevanza calcolata. Questi insiemi separati di risultati di ricerca devono essere combinati.

Esistono molte strategie diverse per combinare i risultati di due elenchi in un’unica classifica, come illustrato in un articolo di Benham e Culpepper (1).

In generale, i risultati della ricerca sono solitamente i primi segnato. Questi punteggi possono essere calcolati in base a una metrica specifica, come la distanza coseno, o semplicemente semplicemente alla posizione nell’elenco dei risultati di ricerca.

Quindi, i punteggi calcolati vengono ponderati con un parametro alphache determina la ponderazione di ciascun algoritmo e influisce sulla riclassificazione dei risultati.

hybrid_score = (1 - alpha) * sparse_score + alpha * dense_score

Generalmente, alpha assume un valore compreso tra 0 e 1, con

  • alpha = 1: Ricerca vettoriale pura
  • alpha = 0: ricerca per parola chiave pura

Di seguito puoi vedere un esempio minimo di fusione tra ricerca per parola chiave e ricerca vettoriale con punteggio basato sul ranking e su an alpha = 0.5.

Esempio minimo che mostra le diverse classifiche della ricerca basata su parole chiave, della ricerca vettoriale e della ricerca ibrida.
Esempio minimo di come i risultati di ricerca di parole chiave e vettori possono essere fusi in una ricerca ibrida con punteggio basato sul ranking e un alfa di 0,5 (Immagine dell’autore, ispirata da Spiegazione della ricerca ibrida)

UN Gasdotto RAG ha molte manopole che puoi regolare per migliorare le sue prestazioni. Una di queste manopole è quella di migliorare la pertinenza del contesto recuperato che viene poi inserito nel LLM perché se il contesto recuperato non è rilevante per rispondere a una determinata domanda, neanche il LLM sarà in grado di generare una risposta rilevante.

A seconda del tipo di contesto e della query, è necessario determinare quale delle tre tecniche di ricerca è più vantaggiosa per la propria applicazione RAG. Così, il parametro alphache controlla la ponderazione tra la ricerca basata su parole chiave e quella semantica, può essere visto come un iperparametro che deve essere ottimizzato.

In un comune Pipeline RAG utilizzando LangChaindefiniresti il ​​componente retriever impostando used vectorstore componente come il retriever con il .as_retriever() metodo come segue:

# Define and populate vector store
# See details here https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2
vectorstore = ...

# Set vectorstore as retriever
retriever = vectorstore.as_retriever()

Tuttavia, questo metodo consente solo la ricerca semantica. Se desideri abilitare la ricerca ibrida in LangChain, dovrai definire un file specifico retriever componente con funzionalità di ricerca ibrida, come WeaviateHybridSearchRetriever:

from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetriever

retriever = WeaviateHybridSearchRetriever(
alpha = 0.5, # defaults to 0.5, which is equal weighting between keyword and semantic search
client = client, # keyword arguments to pass to the Weaviate client
index_name = "LangChain", # The name of the index to use
text_key = "text", # The name of the text key to use
attributes = (), # The attributes to return in the results
)

Il resto della vaniglia Gasdotto RAG resterà lo stesso.

Questa piccola modifica al codice ti consente di sperimentare ponderazioni diverse tra ricerche basate su parole chiave e ricerche vettoriali. Nota quell’impostazione alpha = 1 equivale a una ricerca completamente semantica poiché equivale a definire il retriever da vectorstore componente direttamente (retriever = vectorstore.as_retriever()).

La ricerca ibrida è ideale per i casi d’uso in cui desideri abilitare funzionalità di ricerca semantica per un’esperienza di ricerca più simile a quella umana ma richiedi anche la corrispondenza esatta della frase per termini specifici, come nomi di prodotti o numeri di serie.

Un ottimo esempio è la piattaforma Stack Overflow, che ha recentemente esteso le sue capacità di ricerca con la ricerca semantica utilizzando la ricerca ibrida.

Inizialmente, Stack Overflow utilizzava TF-IDF per abbinare le parole chiave ai documenti (2). Tuttavia, descrivere il problema di codifica che stai cercando di risolvere può essere difficile. Potrebbe portare a risultati diversi in base alle parole che usi per descrivere il tuo problema (ad esempio, la combinazione di due DataFrames Panda può essere eseguita con metodi diversi come l’unione, l’unione e la concatenazione). Pertanto, in questi casi sarebbe più vantaggioso un metodo di ricerca più sensibile al contesto, come la ricerca semantica.

Tuttavia, d’altro canto, un caso d’uso comune di Stack Overflow è quello di copiare e incollare i messaggi di errore. In questo caso, la corrispondenza esatta delle parole chiave è il metodo di ricerca preferito. Inoltre, avrai bisogno di funzionalità di corrispondenza esatta delle parole chiave per i nomi dei metodi e degli argomenti (ad esempio, .read_csv() nei Panda).

Come puoi immaginare, molti casi d’uso simili nel mondo reale traggono vantaggio da ricerche semantiche sensibili al contesto, ma si basano comunque sulla corrispondenza esatta delle parole chiave. Questi casi d’uso possono trarre grandi vantaggi dall’implementazione di un componente ibrido di search retriever.

Questo articolo ha introdotto il contesto della ricerca ibrida come combinazione di ricerche basate su parole chiave e vettoriali. La ricerca ibrida unisce i risultati della ricerca degli algoritmi di ricerca separati e riclassifica i risultati della ricerca di conseguenza.

Nella ricerca ibrida, il parametro alpha controlla la ponderazione tra ricerche basate su parole chiave e semantiche. Questo parametro alpha può essere visto come un iperparametro per ottimizzare le pipeline RAG per migliorare la precisione dei risultati della ricerca.

Utilizzando il case study Stack Overflow (2), abbiamo mostrato come la ricerca ibrida può essere utile per i casi d’uso in cui la ricerca semantica può migliorare l’esperienza di ricerca. Tuttavia, la corrispondenza esatta delle parole chiave è ancora importante quando termini specifici sono frequenti.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *