Reranker Überblick
Im Bereich des Information Retrieval und der generativen KI ist ein Reranker ein unverzichtbares Werkzeug, das die Reihenfolge der Ergebnisse der ersten Suche optimiert. Reranker unterscheiden sich von traditionellen Einbettungsmodellen, indem sie eine Anfrage und ein Dokument als Eingabe nehmen und anstelle von Einbettungen direkt einen Ähnlichkeitswert zurückgeben. Dieser Wert gibt die Relevanz zwischen der Eingabeanfrage und dem Dokument an.
Reranker werden häufig nach der ersten Stufe des Retrievals eingesetzt, die in der Regel über vektorielle Approximate Nearest Neighbor (ANN)-Verfahren erfolgt. ANN-Suchen sind zwar effizient, wenn es darum geht, eine große Menge potenziell relevanter Ergebnisse abzurufen, doch werden die Ergebnisse nicht immer nach der tatsächlichen semantischen Nähe zur Suchanfrage priorisiert. Hier wird rerankers eingesetzt, um die Reihenfolge der Ergebnisse durch tiefere kontextuelle Analysen zu optimieren, wobei häufig fortgeschrittene maschinelle Lernmodelle wie BERT oder andere Transformer-basierte Modelle zum Einsatz kommen. Auf diese Weise kann rerankers die Genauigkeit und Relevanz der endgültigen Ergebnisse, die dem Nutzer präsentiert werden, drastisch verbessern.
Die PyMilvus-Modellbibliothek integriert Rerank-Funktionen, um die Reihenfolge der Ergebnisse zu optimieren, die von den anfänglichen Suchen zurückgegeben werden. Nachdem Sie die nächstgelegenen Einbettungen von Milvus abgerufen haben, können Sie diese Reranking-Tools nutzen, um die Suchergebnisse zu verfeinern und die Präzision der Suchergebnisse zu verbessern.
Rerank-Funktion | API oder Open-sourced |
---|---|
BGE | Open-sourced |
Cross-Encoder | Open-Source |
Voyage | API |
Cohere | API |
Jina AI | API |
Bevor Sie Open-Source-Rerankers verwenden, müssen Sie alle erforderlichen Abhängigkeiten und Modelle herunterladen und installieren.
Bei API-basierten Rerankern erhalten Sie einen API-Schlüssel vom Anbieter und setzen ihn in den entsprechenden Umgebungsvariablen oder Argumenten.
Beispiel 1: Verwendung der BGE-Rank-Funktion, um Dokumente entsprechend einer Abfrage neu zu ordnen
In diesem Beispiel wird demonstriert, wie man Suchergebnisse mit dem BGE-Reranker auf der Grundlage einer bestimmten Abfrage neu ordnet.
Um einen Reranker mit der PyMilvus-Modellbibliothek zu verwenden, installieren Sie zunächst die PyMilvus-Modellbibliothek zusammen mit dem Modell-Unterpaket, das alle notwendigen Reranking-Dienstprogramme enthält:
pip install pymilvus[model]
# or pip install "pymilvus[model]" for zsh.
Um den BGE-Reranker zu verwenden, importieren Sie zunächst die Klasse BGERerankFunction
:
from pymilvus.model.reranker import BGERerankFunction
Erstellen Sie dann eine BGERerankFunction
Instanz für das Reranking:
bge_rf = BGERerankFunction(
model_name="BAAI/bge-reranker-v2-m3", # Specify the model name. Defaults to `BAAI/bge-reranker-v2-m3`.
device="cpu" # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)
Um Dokumente auf der Grundlage einer Abfrage zu bewerten, verwenden Sie den folgenden Code:
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]
bge_rf(query, documents)
Die erwartete Ausgabe ist ähnlich wie die folgende:
[RerankResult(text="The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", score=0.9911615761470803, index=1),
RerankResult(text="In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.", score=0.0326971950177779, index=0),
RerankResult(text='The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.', score=0.006514905766152258, index=3),
RerankResult(text='In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.', score=0.0042116724917325935, index=2)]
Beispiel 2: Verwendung eines Rerankers zur Verbesserung der Relevanz von Suchergebnissen
In dieser Anleitung werden wir untersuchen, wie die Methode search()
in PyMilvus für die Durchführung von Ähnlichkeitssuchen verwendet werden kann und wie die Relevanz der Suchergebnisse mithilfe eines Rerankers verbessert werden kann. Unsere Demonstration wird den folgenden Datensatz verwenden:
entities = [
{'doc_id': 0, 'doc_vector': [-0.0372721,0.0101959,...,-0.114994], 'doc_text': "In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence."},
{'doc_id': 1, 'doc_vector': [-0.00308882,-0.0219905,...,-0.00795811], 'doc_text': "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals."},
{'doc_id': 2, 'doc_vector': [0.00945078,0.00397605,...,-0.0286199], 'doc_text': 'In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.'},
{'doc_id': 3, 'doc_vector': [-0.0391119,-0.00880096,...,-0.0109257], 'doc_text': 'The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.'}
]
Dataset-Komponenten:
doc_id
: Eindeutiger Bezeichner für jedes Dokument.doc_vector
: Vektorielle Einbettungen, die das Dokument repräsentieren. Eine Anleitung zur Erzeugung von Einbettungen finden Sie unter Einbettungen.doc_text
: Textinhalt des Dokuments.
Vorbereitungen
Bevor Sie eine Ähnlichkeitssuche starten, müssen Sie eine Verbindung mit Milvus herstellen, eine Sammlung erstellen und Daten vorbereiten und in diese Sammlung einfügen. Der folgende Codeschnipsel veranschaulicht diese vorbereitenden Schritte.
from pymilvus import MilvusClient, DataType
client = MilvusClient(
uri="http://10.102.6.214:19530" # replace with your own Milvus server address
)
client.drop_collection('test_collection')
# define schema
schema = client.create_schema(auto_id=False, enabel_dynamic_field=True)
schema.add_field(field_name="doc_id", datatype=DataType.INT64, is_primary=True, description="document id")
schema.add_field(field_name="doc_vector", datatype=DataType.FLOAT_VECTOR, dim=384, description="document vector")
schema.add_field(field_name="doc_text", datatype=DataType.VARCHAR, max_length=65535, description="document text")
# define index params
index_params = client.prepare_index_params()
index_params.add_index(field_name="doc_vector", index_type="IVF_FLAT", metric_type="IP", params={"nlist": 128})
# create collection
client.create_collection(collection_name="test_collection", schema=schema, index_params=index_params)
# insert data into collection
client.insert(collection_name="test_collection", data=entities)
# Output:
# {'insert_count': 4, 'ids': [0, 1, 2, 3]}
Durchführen einer Ähnlichkeitssuche
Nach dem Einfügen der Daten führen Sie eine Ähnlichkeitssuche mit der Methode search
durch.
# search results based on our query
res = client.search(
collection_name="test_collection",
data=[[-0.045217834, 0.035171617, ..., -0.025117004]], # replace with your query vector
limit=3,
output_fields=["doc_id", "doc_text"]
)
for i in res[0]:
print(f'distance: {i["distance"]}')
print(f'doc_text: {i["entity"]["doc_text"]}')
Die erwartete Ausgabe ist ähnlich wie die folgende:
distance: 0.7235960960388184
doc_text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.
distance: 0.6269873976707458
doc_text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.
distance: 0.5340118408203125
doc_text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.
Verwendung eines Rerankers zur Verbesserung der Suchergebnisse
Verbessern Sie dann die Relevanz Ihrer Suchergebnisse mit einem Reranking-Schritt. In diesem Beispiel verwenden wir CrossEncoderRerankFunction
, das in PyMilvus integriert ist, um die Ergebnisse zur Verbesserung der Genauigkeit neu zu ordnen.
# use reranker to rerank search results
from pymilvus.model.reranker import CrossEncoderRerankFunction
ce_rf = CrossEncoderRerankFunction(
model_name="cross-encoder/ms-marco-MiniLM-L-6-v2", # Specify the model name.
device="cpu" # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)
reranked_results = ce_rf(
query='What event in 1956 marked the official birth of artificial intelligence as a discipline?',
documents=[
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
],
top_k=3
)
# print the reranked results
for result in reranked_results:
print(f'score: {result.score}')
print(f'doc_text: {result.text}')
Die erwartete Ausgabe ist ähnlich wie die folgende:
score: 6.250532627105713
doc_text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.
score: -2.9546022415161133
doc_text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.
score: -4.771512031555176
doc_text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.