Migliorare le performance di ricerca nelle pipeline RAG con ricerca ibrida

Migliorare le prestazioni di ricerca nelle pipeline RAG attraverso la ricerca ibrida

Barra di ricerca con capacità di ricerca ibrida

Con l’interesse recente per i pipelined di generazione assistita da recupero (RAG), gli sviluppatori hanno iniziato a discutere delle sfide nella costruzione di pipelined RAG con prestazioni pronte per la produzione. Come in molti aspetti della vita, anche il principio di Pareto gioca un ruolo nei pipelined RAG, dove raggiungere l’80% iniziale è relativamente semplice, ma ottenere il restante 20% per una prontezza alla produzione si rivela una sfida.

Un tema comunemente ripetuto è quello di migliorare il componente di recupero di un pipelined RAG con una ricerca ibrida.

Gli sviluppatori che hanno già acquisito esperienza nella costruzione di pipelined RAG hanno iniziato a condividere le loro intuizioni. Un tema comunemente ripetuto è quello di migliorare il componente di recupero di un pipelined RAG con una ricerca ibrida.

Questo articolo ti introduce al concetto di ricerca ibrida, a come può aiutarti a migliorare le prestazioni del tuo pipelined 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. Anche se non è definito quali algoritmi vengono combinati, la ricerca ibrida si riferisce più comunemente alla combinazione di ricerca basata su parole chiave tradizionale e ricerca vettoriale moderna.

Tradizionalmente, la ricerca basata su parole chiave era la scelta ovvia per i motori di ricerca. Ma con l’avvento degli algoritmi di Machine Learning (ML), le rappresentazioni vettoriali hanno reso possibile una nuova tecnica di ricerca, chiamata ricerca vettoriale o semantica, che ci ha permesso di cercare attraverso i dati in modo semantico. Tuttavia, entrambe le tecniche di ricerca hanno 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 dell’industria, è sensibile agli errori di battitura e ai sinonimi, il che può far perdere importanti contesti.
  • Ricerca vettoriale o semantica: Sebbene le sue capacità di ricerca semantica consentano una ricerca multilingue e multimodale basata sul significato semantico dei dati e la rendano robusta agli errori di battitura, può perdere parole chiave importanti. Inoltre, dipende dalla qualità delle rappresentazioni vettoriali generate ed è sensibile ai termini fuori dal dominio.

La combinazione delle ricerche basate su parole chiave e vettoriali in una ricerca ibrida ti consente di sfruttare i vantaggi di entrambe le tecniche di ricerca per migliorare la pertinenza dei risultati di ricerca, soprattutto per casi di utilizzo della ricerca di testo.

Ad esempio, considera la query di ricerca “Come unire due DataFrame di Pandas con .concat()?”. La ricerca basata su 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 (vedi maggiori dettagli in Quando usarla 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 questa demo live demo (la sua implementazione è descritta in questo articolo).

Come funziona la ricerca ibrida?

La ricerca ibrida combina tecniche di ricerca basate su parole chiave e di ricerca vettoriale, fondendo i risultati di ricerca e riposizionandoli.

La ricerca basata su parole chiave nel contesto della ricerca ibrida spesso utilizza una rappresentazione chiamata embedding sparso, per questo motivo è anche chiamata ricerca vettoriale sparca. Gli embedding sparsi sono vettori con principalmente valori zero e solo alcuni valori diversi da zero, come mostrato di seguito.

[0, 0, 0, 0, 0, 1, 0, 0, 0, 24, 3, 0, 0, 0, 0, ...]

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

La ricerca vettoriale è una tecnica di ricerca moderna che è emersa con i progressi nell’ambito dell’apprendimento automatico. Gli algoritmi moderni di apprendimento automatico, come ad esempio Transformers, possono generare una rappresentazione numerica degli oggetti dati in diverse modalità (testo, immagini, ecc.) chiamata embedding vettoriale.

Questi embedding vettoriali sono di solito densamente imballati di informazioni e principalmente composti da valori diversi da zero (vettori densi), come mostrato di seguito. Per questo motivo, la ricerca vettoriale è anche nota 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 viene immessa nello stesso spazio vettoriale degli oggetti dati. Successivamente, il suo embedding vettoriale viene utilizzato per calcolare gli oggetti dati più simili in base a una metrica di similarità specificata, come la distanza coseno. I risultati di ricerca restituiscono gli oggetti dati più simili alla query di ricerca, ordinati in base alla loro similarità.

Fusione dei risultati di ricerca basata su parole chiave e vettoriale

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

Esistono diverse strategie per combinare i risultati ordinati di due liste in un’unica classifica, come indicato in un articolo di Benham e Culpepper [1].

In generale, i risultati di ricerca sono di solito inizialmente valutati. Questi punteggi possono essere calcolati in base a una metrica specificata, come la distanza coseno, o semplicemente basandosi sul rango nella lista dei risultati di ricerca.

Successivamente, i punteggi calcolati vengono ponderati con un parametro alpha, che determina la ponderazione di ogni algoritmo e influenza la ri-classificazione dei risultati.

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

Di solito, alpha assume un valore compreso tra 0 e 1, con

  • alpha = 1: Ricerca vettoriale pura
  • alpha = 0: Ricerca basata su parole chiave pura

Di seguito puoi vedere un esempio minimo di fusione tra ricerca basata su parole chiave e ricerca vettoriale con valutazione basata sul rango e un alpha = 0.5.

Esempio minimo di come i risultati di ricerca basati su parole chiave e vettoriali possano essere fusi nella ricerca ibrida con valutazione basata sul rango e un alpha di 0.5 (Immagine dell'autore, ispirata da Hybrid search explained)

Come può migliorare le prestazioni del tuo pipeline RAG la ricerca ibrida?

Un pipeline RAG ha molti parametri che è possibile regolare per migliorarne le prestazioni. Uno di questi parametri consiste nel migliorare la rilevanza del contesto recuperato che viene poi alimentato nell’LLM perché se il contesto recuperato non è rilevante per rispondere a una domanda specifica, neanche l’LLM sarà in grado di generare una risposta pertinente.

A seconda del tipo di contesto e della query, è necessario determinare quale tra le tre tecniche di ricerca sia più vantaggiosa per la tua applicazione RAG. Pertanto, il parametro alpha, che controlla il peso tra la ricerca basata su parole chiave e la ricerca semantica, può essere considerato un iperparametro che deve essere regolato.

In un comune pipeline RAG che utilizza LangChain, definiresti il componente di recupero impostando il componente vectorstore utilizzato come recupero con il metodo .as_retriever() come segue:

 # Definisci e popola lo store vettoriale
# Vedi dettagli qui https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2
vectorstore = ...
# Imposta il vectorstore come recupero
retriever = vectorstore.as_retriever() 

Tuttavia, questo metodo consente solo la ricerca semantica. Se si desidera abilitare la ricerca ibrida in LangChain, sarà necessario definire un componente specifico chiamato retriever con capacità di ricerca ibrida, come ad esempio il componente WeaviateHybridSearchRetriever:

 from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetriever
retriever = WeaviateHybridSearchRetriever(
    alpha = 0.5,              # default a 0.5, pari peso tra ricerca basata su parole chiave e ricerca semantica
    client = client,          # argomenti chiave da passare al client Weaviate
    index_name = "LangChain", # Nome dell'indice da utilizzare
    text_key = "text",        # Nome della chiave di testo da utilizzare
    attributes = []           # Attributi restituiti nei risultati) 

Il resto del pipeline RAG standard rimarrà lo stesso.

Questa piccola modifica al codice ti permette di sperimentare con diversi pesi tra la ricerca basata su parole chiave e la ricerca vettoriale. Nota che impostare alpha = 1 equivale a una ricerca completamente semantica, ed è equivalente a definire il recupero direttamente dal componente vectorstore (retriever = vectorstore.as_retriever()).

Quando utilizzeresti la ricerca ibrida (Casi d’uso della ricerca ibrida)

La ricerca ibrida è ideale per i casi d’uso in cui si desidera abilitare le capacità di ricerca semantica per ottenere un’esperienza di ricerca più simile a quella umana, ma si richiede anche la corrispondenza esatta delle frasi per termini specifici, come nomi di prodotti o numeri di serie.

Un eccellente esempio è la piattaforma Stack Overflow, che ha recentemente ampliato le sue capacità di ricerca con la ricerca semantica tramite l’utilizzo della ricerca ibrida.

Chiedi come un umano: Implementazione della ricerca semantica su Stack Overflow

La ricerca semantica consente agli utenti di effettuare ricerche utilizzando il linguaggio naturale invece di una sintassi rigida di manipolazione di parole chiave. Ricerca …

stackoverflow.blog

Inizialmente, Stack Overflow utilizzava TF-IDF per corrispondere le parole chiave ai documenti [2]. Tuttavia, descrivere il problema di programmazione che si sta cercando di risolvere può essere difficile. Ciò può portare a risultati diversi in base alle parole utilizzate per descrivere il problema (ad esempio, la combinazione di due dataframe Pandas può essere effettuata in metodi diversi come unione, join e concatenazione). Pertanto, un metodo di ricerca più consapevole del contesto come la ricerca semantica sarebbe più vantaggioso in questi casi.

Tuttavia, d’altro canto, un caso d’uso comune di Stack Overflow è copiare e incollare messaggi di errore. Per questo caso, il metodo di ricerca preferito è la corrispondenza esatta delle parole chiave. Inoltre, vorrai avere la capacità di corrispondenza esatta delle parole chiave per i nomi dei metodi e degli argomenti (ad esempio, .read_csv() in Pandas).

Come puoi immaginare, molti casi d’uso simili nel mondo reale traggono vantaggio dalle ricerche semantiche consapevoli del contesto ma si basano ancora sulla corrispondenza esatta delle parole chiave. Questi casi d’uso possono beneficiare notevolmente dall’implementazione di un componente ibrido di ricerca e recupero.

Sommario

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

Nella ricerca ibrida, il parametro alpha controlla il peso tra le ricerche basate sulle parole chiave e le ricerche semantiche. Questo parametro alpha può essere considerato come un iperparametro da regolare nelle pipeline RAG per migliorare l’accuratezza dei risultati di ricerca.

Utilizzando lo studio di caso di Stack Overflow [2], abbiamo mostrato come la ricerca ibrida possa 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 i termini specifici sono frequenti.

Ti è piaciuta questa storia?

Iscriviti gratuitamente per ricevere una notifica quando pubblico una nuova storia.

Ricevi una email ogni volta che Leonie Monigatti pubblica.

Ricevi una email ogni volta che Leonie Monigatti pubblica. Registrandoti, creerai un account VoAGI se non ne hai ancora…

VoAGI.com

Trovami su LinkedIn, Twitter e Kaggle!

Disclaimer

Sono un Developer Advocate presso Weaviate, un database vettoriale open source, al momento della stesura di questo articolo.

Riferimenti

Bibliografia

[1] Benham, R., & Culpepper, J. S. (2017). Trade-off rischio-ricompensa nella fusione del ranking. In Proceedings del 22º Symposium Australasiano sul Computing Documentale (pp. 1–8).

[2] Haney, D. & Gibson, D. su Stack Overflow Blog. Chiedi come un essere umano: Implementazione di ricerca semantica su Stack Overflow (consultato il 24 novembre 2023).

Immagini

Se non diversamente specificato, tutte le immagini sono state create dall’autore.