Mentre i modelli bi-encoder come Jina Embeddings possono recuperare rapidamente molti documenti corrispondenti da un database di embedding pre-calcolati, i modelli di reranking possono raffinare questo insieme utilizzando un approccio più lento ma più preciso di cross-encoding delle query degli utenti e dei documenti recuperati. Jina AI ha rilasciato il nostro primo modello di reranking, jina-reranker-v1-base-en, e in questo articolo presenteremo un ragionamento approfondito sul perché un reranker è essenziale per ottimizzare l'accuratezza RAG e come iniziare a costruire un sistema RAG all'avanguardia utilizzando Jina Embeddings/Reranker, LlamaIndex e il modello linguistico Mixtral-8x7B-Instruct-v0.1 (ospitato su HuggingFace).
Ti servirà:

Poiché i modelli Jina Embeddings e Reranker così come Mixtral vengono eseguiti in remoto e sono accessibili tramite API RESTful, non avrai bisogno di hardware speciale.
tagCos'è un reranker?
Prima di continuare con il tutorial, è importante evidenziare cosa sono i reranker. Per una comprensione completa di cosa sia un reranker e perché Jina Reranker V1 è la scelta migliore per te, ti invitiamo a leggere il nostro post sul rilascio di Jina Reranker V1 prima di continuare.

In sintesi, i reranker sono modelli cross-encoder che prendono come input una coppia documento-query ed emettono un punteggio di rilevanza combinato per quella coppia di input. Usando i reranker, gli utenti possono ordinare i documenti dal più al meno rilevante per una data query.
tagPerché usare jina-reranker-v1-base-en?
Il reranking fornisce informazioni molto più rilevanti rispetto all'utilizzo del solo modello di embedding. Nel nostro post di rilascio del modello, abbiamo dimostrato che Jina Reranker si distingue rispetto ai suoi concorrenti open e closed-source e può migliorare i sistemi di ricerca dell'8% nel tasso di successo e del 33% nel mean reciprocal rank.
Questo ha un impatto diretto sulla qualità delle risposte ottenute attraverso la soluzione RAG applicata. Con la teoria a sostegno di questa affermazione, ti mostreremo un esempio pratico così potrai vedere con i tuoi occhi che effetto ha Jina Reranker su una pipeline RAG costruita con LlamaIndex.
tagPrima di iniziare: Una Nota sui Node-Postprocessor di LlamaIndex
I node-postprocessor in LlamaIndex sono moduli che trasformano o filtrano i nodi dopo il recupero e prima della sintesi della risposta all'interno di un motore di query. Come parte di questo pacchetto, LlamaIndex offre sia opzioni integrate che un'API per aggiunte personalizzate.
Jina Reranker è stato ora integrato in LlamaIndex come node postprocessor. Per aumentare l'accuratezza della risposta, i nodi recuperati vengono riordinati in base alla rilevanza per la query, e vengono restituiti i primi N nodi.
tagSegui su Google Colab
Questo tutorial ha un notebook di accompagnamento che puoi eseguire su Google Colab o localmente.
tagIl dataset: Catalogo Prodotti Nike Kids 2024
Per mostrare l'incremento delle prestazioni di Jina Reranker per le applicazioni RAG, abbiamo scelto il Catalogo Prodotti Nike Kids 2024 come nostro dataset. Il documento contiene un insieme strutturato di prodotti per bambini offerti da Nike nel 2024. Abbiamo selezionato questo dataset poiché mostra chiaramente l'effetto dell'utilizzo di un reranker ed è facilmente comprensibile per la maggior parte degli utenti.
tagInstalla i prerequisiti
Per installare i requisiti, esegui:
pip install llama-index-postprocessor-jinaai-rerank
pip install llama-index-embeddings-jinaai
pip install llama-index
pip install llama-index-llms-huggingface
pip install "huggingface_hub[inference]"tagAccedi a Mixtral LLM
Per utilizzare il LLM Mixtral-8x7B-Instruct-v0.1, hai bisogno di un token HuggingFace.
from llama_index.llms.huggingface import HuggingFaceInferenceAPI
hf_inference_api_key = "<inserisci qui il tuo token di accesso HuggingFace>"
mixtral_llm = HuggingFaceInferenceAPI(
model_name="mistralai/Mixtral-8x7B-Instruct-v0.1",
token=hf_inference_api_key,
)
tagAccedi a Jina Embeddings e Jina Reranker
Per utilizzare i nostri Jina Embeddings e Jina Reranker, hai bisogno di una chiave API dedicata. Memorizzala in una variabile chiamata api_key e chiama il modello Jina Embeddings da LlamaIndex:
from llama_index.embeddings.jinaai import JinaEmbedding
api_key = "<inserisci qui la tua chiave Jina>"
jina_embeddings = JinaEmbedding(api_key=api_key)Similmente, puoi chiamare il modello Jina Reranker. Impostando il parametro top_n, puoi decidere quanti dei documenti più rilevanti restituire nell'output finale. In questo caso, impostiamotop_n=2:
from llama_index.postprocessor.jinaai_rerank import JinaRerank
jina_rerank = JinaRerank(api_key=api_key, top_n=2)tagScarica il catalogo prodotti Nike Kids 2024
Per scaricare i dati, esegui il seguente codice:
from llama_index.core import SimpleDirectoryReader
import requests
url = '<https://niketeam-asset-download.nike.net/catalogs/2024/2024_Nike%20Kids_02_09_24.pdf?cb=09302022>'
response = requests.get(url)
with open('Nike_Catalog.pdf', 'wb') as f:
f.write(response.content)
reader = SimpleDirectoryReader(
input_files=["Nike_Catalog.pdf"]
)
documents = reader.load_data()tagGenera e indicizza gli embedding con Jina Embeddings
Ora che la configurazione è completa, genereremo i vettori di embedding (nodi) e li indicizzeremo. I modelli Jina Embeddings v2 accettano input fino a 8192 token, abbastanza grandi da non richiedere ulteriore segmentazione del testo o controlli sulla lunghezza delle sezioni per un documento come questo. Per incorporare e indicizzare il documento, esegui il seguente codice:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(
documents=documents, embed_model=jina_embeddings
)tagQuery dei risultati senza Jina Reranker
Quando facciamo una query per informazioni specifiche da questo set di testi, il query_engine di LlamaIndex esegue le seguenti operazioni:
- Con Jina Embeddings V2, crea un embedding per la query.
- Usa l'indice per ottenere i
top_k = 10embedding memorizzati con il coseno più alto rispetto all'embedding della query e restituisce la sua posizione nell'indice. - Cerca il testo corrispondente nell'array di dati vettoriali.
Chiediamo qual è la migliore maglia Nike in termini di tessuto:
query_engine = index.as_query_engine(
similarity_top_k=10, llm=mixtral_llm
)
response = query_engine.query(
"What are the best padded pants that Nike sells?",
)
print(response.source_nodes[0].text)Risultato:
NIKE KIDS EQUIPMENT87NIKE BRASILIA SMALL DUFFEL 9.5
DM3976 $37.00
SIZES: Misc OFFER DATE: 07/01/22 END DATE: 07/01/25
Tough 600D polyester • Durable 300D polyester • Detachable shoulder
strap • Ventilated shoe or wet/dry storage • Secure zip pocket •
Limited lifetime guarantee • Screened Swoosh design trademark
DIMENSIONS: 20" L x 10" W x 11" H
010 Black/Black/(White) 068 Iron Grey/Black/(White)
...tagQuery dei risultati con Reranker
Ora vogliamo applicare il reranker per vedere se l'applicazione RAG produce un risultato diverso e più rilevante. Per farlo, dobbiamo aggiungere i node_postprocessors al query_engine:
query_engine = index.as_query_engine(
similarity_top_k=10, llm=mixtral_llm, node_postprocessors=[jina_rerank]
)
response = query_engine.query(
"What are the best padded pants that Nike sells?",
)
print(response.source_nodes[0].text)Nota che rispetto al caso precedente senza il reranker, il query_engine ora contiene anche il parametro node_postprocessors impostato su [jina_rerank].
Risultato:
NIKE KIDS FOOTBALL – STOCK10
DJ5731 $47.00
SIZES: XS, S, M, L, XL, 2XL, 3XL
FABRIC: Body/panels lining: 100% polyester. Pad: 100%
ethylene vinyl acetate.
OFFER DATE: 04/01/23
END DATE: 04/01/27
Take the field ready to give it your all in the Nike Recruit
Pants. They're made from lightweight, stretchy fabric with
sweat-wicking power to help keep you dry and moving freely
when the game heats up. With integrated pads shaped for a
comfortable fit, you'll be prepared for a performance you can
be proud of. Choose from 6 different colors to outfit your
team. Nike Dri-FIT technology moves sweat away from your skin
for quicker evaporation, helping you stay dry and comfortable.
Lightweight knit fabric stretches with you to let you move
naturally. Thigh, knee, hip and tailbone pads are shaped for
an optimal fit, without compromising on coverage. A
body-hugging fit is designed to help keep the padding in place
and close to the body. Belt at the waist lets you dial in your
perfect fit to maximize comfort. Elastic at hems.
Hip width: 15", Inseam length: 11.75" (size medium).
010 Black/(White) 060 Team Anthracite/(White) 100 White/(Black)
419 Team Navy/(White) 493 Team Royal/(White) 657 Team Scarlet/(White)tagConclusione
Come possiamo vedere, la query senza il reranker porta a un risultato principale che menziona "retro in rete per la traspirabilità" e "vestibilità slim con tessuto morbido al tatto". Al contrario, utilizzando un reranker, otteniamo un risultato principale che è "progettato per una traspirabilità ottimale", ha un "design che assorbe l'umidità" che "ti mantiene asciutto e fresco sotto la pressione della partita" e presenta "tessuto leggero con una vestibilità comoda e rilassata".
Il secondo risultato è molto più accurato e appropriato per la query che abbiamo fatto. Con i nostri ultimi due post, abbiamo dimostrato sia da una prospettiva teorica che pratica che aggiungere Jina Reranker alla tua pipeline RAG aumenta l'accuratezza del recupero e migliora la qualità delle risposte che ottieni da essa.







