Während Bi-Encoder-Modelle wie Jina Embeddings schnell viele passende Dokumente aus einer Datenbank mit vorberechneten Embeddings abrufen können, können Reranker-Modelle diese Menge durch einen langsameren, aber präziseren Cross-Encoding-Ansatz von Benutzeranfragen und abgerufenen Dokumenten verfeinern. Jina AI hat unser erstes Reranker-Modell veröffentlicht, jina-reranker-v1-base-en, und in diesem Artikel werden wir ausführlich erläutern, warum ein Reranker für die Optimierung der RAG-Genauigkeit essentiell ist und wie man mit Jina Embeddings/Reranker, LlamaIndex und dem Mixtral-8x7B-Instruct-v0.1
Sprachmodell (gehostet auf HuggingFace) ein hochmodernes RAG-System aufbaut.
Sie benötigen:
- Einen kombinierten Schlüssel für die Jina Embeddings und Reranker API.
- Ein HuggingFace-Konto und Token.

Da die Jina Embeddings und Reranker-Modelle sowie Mixtral remote laufen und über eine RESTful API zugegriffen werden, benötigen Sie keine spezielle Hardware.
tagWas ist ein Reranker?
Bevor wir mit dem Tutorial fortfahren, ist es wichtig zu erläutern, was Reranker überhaupt sind. Für ein vollständiges Verständnis davon, was ein Reranker ist und warum Jina Reranker V1 die beste Wahl für Sie ist, empfehlen wir Ihnen, unseren Jina Reranker V1 Release-Beitrag zu lesen, bevor Sie fortfahren.

Zusammenfassend sind Reranker Cross-Encoder-Modelle, die als Eingabe ein Dokument-Abfrage-Paar erhalten und einen kombinierten Relevanz-Score für dieses Eingabepaar ausgeben. Mit Rerankern können Benutzer Dokumente von den relevantesten zu den am wenigsten relevanten für eine bestimmte Abfrage sortieren.
tagWarum jina-reranker-v1-base-en verwenden?
Reranking liefert viel relevantere Informationen als die ausschließliche Verwendung eines Embedding-Modells. In unserem Modell-Release-Beitrag haben wir gezeigt, dass sich Jina Reranker im Vergleich zu seinen Open- und Closed-Source-Konkurrenten auszeichnet und Suchsysteme um 8% in der Trefferquote und 33% im Mean Reciprocal Rank verbessern kann.
Dies hat einen direkten Einfluss auf die Qualität der Antworten, die durch die angewandte RAG-Lösung erhalten werden. Mit der Theorie, die diese Behauptung untermauert, zeigen wir Ihnen ein praktisches Beispiel, damit Sie mit eigenen Augen sehen können, welche Wirkung Jina Reranker auf eine mit LlamaIndex erstellte RAG-Pipeline hat.
tagBevor wir beginnen: Eine Anmerkung zu LlamaIndex Node-Postprocessors
Node-Postprocessors in LlamaIndex sind Module, die Nodes nach dem Abruf und vor der Antwortsynthese innerhalb einer Query Engine transformieren oder filtern. Als Teil dieses Pakets bietet LlamaIndex sowohl integrierte Optionen als auch eine API für benutzerdefinierte Erweiterungen.
Jina Reranker wurde nun als Node Postprocessor in LlamaIndex integriert. Um die Antwortgenauigkeit zu erhöhen, werden abgerufene Nodes basierend auf der Relevanz zur Abfrage neu geordnet, und die top N Nodes werden zurückgegeben.
tagFolgen Sie auf Google Colab
Dieses Tutorial hat ein begleitendes Notebook, das Sie auf Google Colab oder lokal ausführen können.
tagDer Datensatz: Nike Kids Produktkatalog 2024
Um die Leistungssteigerung von Jina Reranker für RAG-Anwendungen zu demonstrieren, haben wir den Nike Kids Produktkatalog 2024 als unseren Datensatz gewählt. Das Dokument enthält eine strukturierte Sammlung von Kinderprodukten, die Nike 2024 anbietet. Wir haben diesen Datensatz ausgewählt, da er die Wirkung eines Rerankers deutlich zeigt und für die meisten Benutzer nachvollziehbar ist.
tagInstallation der Voraussetzungen
Um die Anforderungen zu installieren, führen Sie aus:
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]"
tagZugriff auf Mixtral LLM
Um das Mixtral-8x7B-Instruct-v0.1
LLM zu verwenden, benötigen Sie ein HuggingFace Token.
from llama_index.llms.huggingface import HuggingFaceInferenceAPI
hf_inference_api_key = "<your HuggingFace access token here>"
mixtral_llm = HuggingFaceInferenceAPI(
model_name="mistralai/Mixtral-8x7B-Instruct-v0.1",
token=hf_inference_api_key,
)
tagZugriff auf Jina Embeddings und Jina Reranker
Um unsere Jina Embeddings und Jina Reranker zu verwenden, benötigen Sie einen dedizierten API-Schlüssel. Speichern Sie ihn in einer Variable namens api_key
und rufen Sie das Jina Embeddings-Modell von LlamaIndex auf:
from llama_index.embeddings.jinaai import JinaEmbedding
api_key = "<your Jina key here>"
jina_embeddings = JinaEmbedding(api_key=api_key)
Auf ähnliche Weise können Sie das Jina Reranker-Modell aufrufen. Mit dem Parameter top_n
können Sie festlegen, wie viele der relevantesten Dokumente in der endgültigen Ausgabe zurückgegeben werden sollen. In diesem Fall setzen wirtop_n=2
:
from llama_index.postprocessor.jinaai_rerank import JinaRerank
jina_rerank = JinaRerank(api_key=api_key, top_n=2)
tagHerunterladen des Nike Kids Produktkatalogs 2024
Um die Daten herunterzuladen, führen Sie den folgenden Code aus:
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()
tagGenerieren und Indexieren von Embeddings mit Jina Embeddings
Nachdem das Setup abgeschlossen ist, werden wir die Embedding-Vektoren (Nodes) generieren und indexieren. Jina Embeddings v2 Modelle akzeptieren Eingaben von bis zu 8192 Tokens, was ausreichend ist, sodass wir für ein Dokument wie dieses keine weitere Textsegmentierung vornehmen oder prüfen müssen, ob ein Abschnitt zu viele Tokens enthält. Um das Dokument einzubetten und zu indexieren, führen Sie den folgenden Code aus:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(
documents=documents, embed_model=jina_embeddings
)
tagAbfrage von Ergebnissen ohne Jina Reranker
Wenn wir nach spezifischen Informationen aus diesem Textset suchen, führt die LlamaIndex query_engine
Folgendes durch:
- Mit Jina Embeddings V2 erstellt sie ein Embedding für die Abfrage.
- Sie verwendet den Index, um die
top_k = 10
gespeicherten Embeddings mit der höchsten Kosinus-Ähnlichkeit zur Abfrage-Embedding zu erhalten und gibt deren Position im Index zurück. - Sie sucht den entsprechenden Text im Vektor-Datenarray.
Fragen wir, was das beste Nike Trikot in Bezug auf das Material ist:
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)
Ergebnis:
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)
...
tagAbfrage von Ergebnissen mit Reranker
Jetzt wollen wir den Reranker anwenden, um zu sehen, ob die RAG-Anwendung ein anderes, relevannteres Ergebnis liefert. Dazu müssen wir die node_postprocessors
zur query_engine
hinzufügen:
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)
Beachten Sie, dass im Vergleich zum vorherigen Fall ohne Reranker die query_engine
jetzt auch den node_postprocessors Parameter enthält, der auf [jina_rerank]
gesetzt ist.
Ergebnis:
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)
tagFazit
Wie wir sehen können, führt die Abfrage ohne Reranker zu einem Top-Ergebnis, das "Netzrücken für Atmungsaktivität" und "schmale Passform mit weichem Griff" erwähnt. Im Vergleich dazu erhalten wir mit dem Reranker ein Top-Ergebnis, das "für optimale Atmungsaktivität entwickelt" wurde, ein "feuchtigkeitsableitendes Design" hat, das "Sie unter Wettkampfdruck trocken und kühl hält", und "leichtes Material in einer entspannten, bequemen Passform" bietet.
Das zweite Ergebnis ist viel genauer und passender für unsere Anfrage. Mit unseren letzten beiden Beiträgen haben wir sowohl aus theoretischer als auch aus praktischer Sicht gezeigt, dass das Hinzufügen von Jina Reranker zu Ihrer RAG-Pipeline die Abrufgenauigkeit erhöht und die Qualität der Antworten verbessert.