Einführung in die PyMilvus-Integration mit Einbettungsmodellen
Milvus ist eine Open-Source-Vektordatenbank, die speziell für KI-Anwendungen entwickelt wurde. Egal, ob Sie an maschinellem Lernen, Deep Learning oder einem anderen KI-bezogenen Projekt arbeiten, Milvus bietet eine robuste und effiziente Möglichkeit, große Vektordaten zu verarbeiten.
Mit der Modellmodul-Integration in PyMilvus, dem Python-SDK für Milvus, ist es jetzt noch einfacher, Embedding- und Reranking-Modelle hinzuzufügen. Diese Integration vereinfacht die Umwandlung Ihrer Daten in durchsuchbare Vektoren oder das Reranking von Ergebnissen für genauere Ergebnisse, wie z. B. bei Retrieval Augmented Generation (RAG).
In diesem Blog geben wir einen Überblick über Dense Embedding-Modelle, Sparse Embedding-Modelle und Re-Ranker und zeigen, wie sie in der Praxis mit Milvus Lite, einer leichtgewichtigen Version von Milvus, die lokal in Ihren Python-Anwendungen ausgeführt werden kann, verwendet werden können.
Dense vs. Sparse Einbettungen
Bevor wir Ihnen zeigen, wie Sie unsere Integrationen nutzen können, wollen wir uns zwei Hauptkategorien von Vektoreinbettungen ansehen.
Vektoreinbettungen fallen im Allgemeinen in zwei Hauptkategorien: Dichte Einbettungen (Dense Embeddings ) und dünne Einbettungen (Sparse Embeddings).
Dense Embeddings sind hochdimensionale Vektoren, bei denen die meisten oder alle Elemente ungleich Null sind, was sie ideal für die Codierung von Textsemantik oder unscharfer Bedeutung macht.
Sparse Embeddings sind hochdimensionale Vektoren mit vielen Nullelementen, die sich besser für die Kodierung exakter oder benachbarter Konzepte eignen.
Milvus unterstützt beide Arten von Einbettungen und bietet eine hybride Suche. Die hybride Suche ermöglicht die Suche in verschiedenen Vektorfeldern innerhalb derselben Sammlung. Diese Vektoren können unterschiedliche Facetten von Daten repräsentieren, verschiedene Einbettungsmodelle verwenden oder unterschiedliche Datenverarbeitungsmethoden einsetzen und die Ergebnisse mit Hilfe von Re-Rankern kombinieren.
So verwenden Sie unsere Einbettungs- und Reranking-Integrationen
In den folgenden Abschnitten werden wir drei praktische Beispiele für die Verwendung unserer Integrationen zur Erzeugung von Einbettungen und zur Durchführung von Vektorsuchen demonstrieren.
Beispiel 1: Verwenden Sie die Standard-Einbettungsfunktion, um dichte Vektoren zu erzeugen
Sie müssen den pymilvus
Client mit dem model
Paket installieren, um die Einbettungs- und Reranking-Funktionen mit Milvus zu verwenden.
pip install "pymilvus[model]"
In diesem Schritt wird Milvus Lite installiert, so dass Sie Milvus lokal innerhalb Ihrer Python-Anwendung ausführen können. Es enthält auch das Unterpaket model, das alle Dienstprogramme für Embedding und reranking enthält.
Das Modell-Subpaket unterstützt verschiedene Einbettungsmodelle, einschließlich der Modelle von OpenAI, Sentence Transformers, BGE-M3, BM25, SPLADE und Jina AI pre-trained models.
In diesem Beispiel wird das Modell DefaultEmbeddingFunction
verwendet, das der Einfachheit halber auf dem Modell all-MiniLM-L6-v2
Sentence Transformer basiert. Das Modell ist etwa 70 MB groß und wird bei der ersten Verwendung heruntergeladen:
from pymilvus import model
# This will download "all-MiniLM-L6-v2", a lightweight model.
ef = model.DefaultEmbeddingFunction()
# Data from which embeddings are to be generated
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
embeddings = ef.encode_documents(docs)
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)
Die erwartete Ausgabe sollte in etwa wie folgt aussehen:
Embeddings: [array([-3.09392996e-02, -1.80662833e-02, 1.34775648e-02, 2.77156215e-02,
-4.86349640e-03, -3.12581174e-02, -3.55921760e-02, 5.76934684e-03,
2.80773244e-03, 1.35783911e-01, 3.59678417e-02, 6.17732145e-02,
...
-4.61330153e-02, -4.85207550e-02, 3.13997865e-02, 7.82178566e-02,
-4.75336798e-02, 5.21207601e-02, 9.04406682e-02, -5.36676683e-02],
dtype=float32)]
Dim: 384 (384,)
Beispiel 2: Erzeugen von spärlichen Vektoren mit dem BM25-Modell
BM25 ist eine bekannte Methode, die die Häufigkeit des Auftretens von Wörtern verwendet, um die Relevanz zwischen Suchanfragen und Dokumenten zu bestimmen. In diesem Beispiel wird gezeigt, wie BM25EmbeddingFunction
verwendet wird, um Sparse Embeddings für Abfragen und Dokumente zu erzeugen.
In BM25 ist es wichtig, die Statistiken in Ihren Dokumenten zu berechnen, um die IDF (Inverse Document Frequency) zu erhalten, die die Muster in Ihren Dokumenten darstellen kann. Die IDF misst, wie viele Informationen ein Wort liefert, ob es in allen Dokumenten häufig oder selten vorkommt.
from pymilvus.model.sparse import BM25EmbeddingFunction
# 1. Prepare a small corpus to search
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()
# 2. Fit the corpus to get BM25 model parameters on your documents.
bm25_ef.fit(docs)
# 3. Store the fitted parameters to expedite future processing.
bm25_ef.save("bm25_params.json")
# 4. Load the saved params
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")
docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)
Beispiel 3: Verwendung eines ReRankers
Ein Suchsystem zielt darauf ab, die relevantesten Ergebnisse schnell und effizient zu finden. Traditionell wurden Methoden wie BM25 oder TF-IDF verwendet, um Suchergebnisse auf der Grundlage der Übereinstimmung von Schlüsselwörtern zu bewerten. Neuere Methoden wie die auf Einbettung basierende Kosinusähnlichkeit sind zwar einfach, lassen aber manchmal die Feinheiten der Sprache und vor allem die Interaktion zwischen den Dokumenten und der Absicht einer Anfrage außer Acht.
An dieser Stelle hilft der Einsatz eines Re-Rankers. Ein Re-Ranker ist ein fortschrittliches KI-Modell, das die ursprüngliche Ergebnismenge einer Suche - die häufig von einer auf Einbettungen/Token basierenden Suche bereitgestellt wird - neu bewertet, um sicherzustellen, dass sie besser mit der Absicht des Benutzers übereinstimmt. Dabei wird nicht nur die oberflächliche Übereinstimmung von Begriffen berücksichtigt, sondern auch die tiefere Interaktion zwischen der Suchanfrage und dem Inhalt der Dokumente.
Für dieses Beispiel verwenden wir den Jina AI Reranker.
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)
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."
]
results = rf(query, documents)
for result in results:
print(f"Index: {result.index}")
print(f"Score: {result.score:.6f}")
print(f"Text: {result.text}\n")
Die zu erwartende Ausgabe ist ähnlich der folgenden:
Index: 1
Score: 0.937096
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.
Index: 3
Score: 0.354210
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.
Index: 0
Score: 0.349866
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.
Index: 2
Score: 0.272896
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.
Bewerten Sie uns auf GitHub und treten Sie unserem Discord bei!
Wenn Ihnen dieser Blogbeitrag gefallen hat, sollten Sie Milvus auf GitHub mit einem Sternchen versehen und unserem Discord beitreten! 💙
- Dense vs. Sparse Einbettungen
- So verwenden Sie unsere Einbettungs- und Reranking-Integrationen
- Bewerten Sie uns auf GitHub und treten Sie unserem Discord bei!
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word