Verbesserung der Suchergebnisse mit Vektor-Embeddings und Redis
In der heutigen digitalen Landschaft ist die Fähigkeit, nach Informationen zu suchen, wichtiger denn je. Benutzer erwarten robuste Suchfunktionen in fast jeder Anwendung und Website, auf die sie stoßen. Um die Qualität der Suchergebnisse zu erhöhen, suchen Architekten und Entwickler ständig nach innovativen Methoden und Architekturen. Ein vielversprechender Ansatz ist die Nutzung von Vektor-Embeddings, die durch Deep-Learning-Modelle erzeugt werden und die Genauigkeit und Relevanz von Suchergebnissen erheblich steigern.
Verstehen von Vektor-Embeddings
Viele Organisationen nutzen inzwischen ausgeklügelte Indizierungstechniken, um ihre Daten in einen Vektorraum zu transformieren. Durch die Darstellung von Daten als Vektoren wird es möglich, Ähnlichkeitssuchen durchzuführen, die die relevantesten Ergebnisse liefern. Dieser Artikel wird den Prozess der Erstellung von Vektor-Embeddings und deren Indizierung mit Redis, einem leistungsstarken In-Memory-Datenstruktur-Store, näher beleuchten.
Ziele dieses Tutorials
- Vektor-Embeddings für einen Amazon-Produkt-Datensatz generieren.
- Diese Embeddings mit Redis indizieren.
- Ähnliche Vektoren suchen.
- Die Vor- und Nachteile verschiedener Indizierungsmethoden zur Verbesserung der Suchleistung bewerten.
Erste Schritte
Um zu beginnen, richten Sie ein neues Verzeichnis ein und erstellen Sie ein Jupyter-Notebook. Laden Sie den Amazon-Produkt-Datensatz im CSV-Format von der entsprechenden Quelle herunter und speichern Sie ihn im ./data/
-Verzeichnis. Stellen Sie sicher, dass Sie Python Version 3.8 verwenden, und installieren Sie die folgenden Abhängigkeiten in der ersten Notebook-Zelle:
pip install redis pandas sentence-transformers
Daten in ein Pandas DataFrame laden
Sobald Sie die erforderlichen Abhängigkeiten installiert haben, besteht der nächste Schritt darin, die Bibliotheken zu importieren und die erforderlichen Klassen und Funktionen zu definieren. In diesem Schritt wird die Redis-Bibliothek importiert, um eine Verbindung zu Redis herzustellen, das als unsere Datenbank für die Vektorspeicherung dienen wird. Sie werden auch Klassen aus den Modulen redis.commands.search.field
und redis.commands.search.query
einbeziehen, einschließlich:
- VectorField: Stellt Vektorfelder in Redis dar.
- TextField: Stellt Textfelder in Redis dar.
- TagField: Stellt Tagfelder in Redis dar.
- Query: Wird verwendet, um Suchanfragen zu formulieren.
- Result: Stellt Suchergebnisse dar.
Als Nächstes werden Sie die Amazon-Produktdaten in ein Pandas DataFrame laden und lange Textfelder auf maximal 512 Zeichen kürzen. Diese Länge entspricht den Vorgaben des vortrainierten Sentence-Embedding-Generators.
Verbindung zu Redis herstellen
Nachdem Sie die Produktdaten geladen haben, stellen Sie eine Verbindung zu einer Redis-Instanz her. Sie können eine kostenlose Stufe von RedisLabs nutzen; melden Sie sich für ein kostenloses Konto unter redis.com/try-free/ an. Richten Sie eine neue Redis-Instanz ein und notieren Sie die Verbindungsdetails, da Sie das Passwort zum Einloggen benötigen.
Erstellen von Embeddings mit SentenceTransformer
Nachdem Ihre Daten geladen sind, sind Sie nun bereit, Embeddings zu erstellen. Laden Sie mit der SentenceTransformer-Bibliothek das vortrainierte Modell distilroberta-v1, um Embeddings zu generieren:
model = SentenceTransformer('distilroberta-v1')
embeddings = model.encode(product_keywords)
Nachdem Sie die Embeddings generiert haben, stellen Sie sicher, dass Sie deren Dimensionen überprüfen, um zu bestätigen, dass sie korrekt erstellt wurden.
Vorbereitung von Hilfsfunktionen
Definieren Sie als Nächstes drei Hilfsfunktionen zum Laden von Produktdaten und zum Erstellen von Indizes auf Vektorfeldern.
Vergleich von Indizierungsmethoden
Zwei gängige Methoden für die ungefähre nächstgelegene Nachbarsuche in hochdimensionalen Räumen sind die flache Indizierung und HNSW (Hierarchical Navigable Small World). Während die flache Indizierung einen einfachen Ansatz bietet, kann die Abhängigkeit von einer Brute-Force-Suche bei großen Datensätzen rechenintensiv sein. Im Gegensatz dazu nutzt HNSW eine hierarchische Graphstruktur, die eine überlegene Skalierbarkeit und schnellere Suchfähigkeiten bietet, jedoch eine sorgfältigere Parameteranpassung erfordert.
Indizierung und Abfrage der Daten
Laden und indizieren Sie zunächst die Produktdaten mit flacher Indizierung:
index_flat = redis_client.index.create_index([(VectorField('embedding'), 'FLOAT32')])
Anschließend können Sie den flachen Index abfragen, um die 5 nächsten Nachbarn auf der Grundlage eines gegebenen Vektors zu finden:
results_flat = redis_client.query(Query('(@vector:[*])=>[KNN 5 @embedding $vec]'), query_vec=query_vector)
Jetzt wiederholen Sie den Prozess mit HNSW-Indizierung:
index_hnsw = redis_client.index.create_index([(VectorField('embedding_hnsw'), 'FLOAT32')], method='HNSW')
Fazit: Mehr Lernen
Dieses Tutorial hat die notwendigen Schritte umrissen, um die Suchergebnisse durch Vektor-Embeddings und Redis zu verbessern. Für den vollständigen Code und weitere Details besuchen Sie unser GitHub-Repository. Nutzen Sie die Kraft der KI-gesteuerten Suche und optimieren Sie das Erlebnis für die Benutzer!
Hinterlasse einen Kommentar
Alle Kommentare werden vor der Veröffentlichung geprüft.
Diese Website ist durch hCaptcha geschützt und es gelten die allgemeinen Geschäftsbedingungen und Datenschutzbestimmungen von hCaptcha.