Suchergebnisse mit Vektor-Einbettungen und Redis verbessern
Die Möglichkeit, Informationen zu suchen, ist in der heutigen digitalen Landschaft entscheidend, da Benutzer in fast jeder Anwendung und Website nach Suchfunktionen erwarten. Für Architekten und Entwickler ist es unerlässlich, kontinuierlich neue Methoden und Architekturen zu erforschen, um die Suchergebnisse zu verbessern. Ein effektiver Ansatz ist die Nutzung von Vektor-Einbettungen, die von Deep-Learning-Modellen generiert werden und erheblich die Genauigkeit und Relevanz der Suchergebnisse verbessern.
Verstehen von Vektor-Einbettungen und Redis
Um die Suchfunktionalität zu verbessern, nutzen viele Organisationen Indizierungstechniken, die ihre Daten in einen Vektorraum umwandeln. Durch die Darstellung von Daten als Vektoren können Ähnlichkeitssuchen durchgeführt werden, um die relevantesten Ergebnisse zurückzugeben.
In diesem umfassenden Tutorial werden wir erläutern, wie Deep-Learning-Modelle Vektor-Einbettungen erstellen, die effizient indiziert werden, um genaue Suchfunktionen mit Redis zu ermöglichen. Durch das Verständnis dieses Ansatzes können Architekten und Entwickler das Potenzial von KI-gesteuerten Verbesserungen für die Benutzer-Such-Erfahrung nutzen.
Umfang dieses Tutorials
In diesem Tutorial werden wir die folgenden wichtigen Schritte behandeln:
- Erstellen von Vektor-Einbettungen für einen Amazon-Produktdatensatz
- Indizieren dieser Einbettungen mit Redis
- Durchführen von Suchen nach ähnlichen Vektoren
Darüber hinaus werden wir die Vor- und Nachteile verschiedener Indizierungsmethoden analysieren und wie sie die Suchleistung optimieren können.
Erste Schritte
Beginnen Sie mit der Erstellung eines neuen Verzeichnisses und dem Start eines Jupyter-Notebooks. Erwerben Sie die CSV-Datei des Datensatzes aus einer Online-Quelle und speichern Sie sie im ./data/
-Verzeichnis. Stellen Sie sicher, dass Sie Python 3.8 verwenden, und installieren Sie die benötigten Abhängigkeiten in der ersten Zelle:
pip install redis pandas sentence-transformers
Notwendige Bibliotheken importieren
Nachdem Sie die Abhängigkeiten eingerichtet haben, ist der nächste Schritt, die notwendigen Bibliotheken zu importieren und wichtige Klassen oder Funktionen zu definieren. In diesem Fall werden Sie importieren:
- Redis-Bibliothek - Um mit Redis zu interagieren, bekannt für seine Geschwindigkeit und Flexibilität.
- VectorField - Stellt Vektorfelder in Redis dar.
- TextField - Stellt Textfelder in Redis dar.
- TagField - Stellt Tagfelder in Redis dar.
- Query - Erstellt Suchabfragen für Redis.
- Result - Behandelt die von Redis zurückgegebenen Suchergebnisse.
Außerdem definieren wir eine einfache Farbklasse, die verwendet werden kann, um farbigen Text in der Konsole auszugeben.
Produktdaten laden
Der nächste Schritt besteht darin, Amazon-Produktdaten in ein Pandas DataFrame zu laden, während lange Textfelder auf maximal 512 Zeichen gekürzt werden. Dieses Limit unterstützt das vortrainierte SentenceTransformer-Modell. Hier ist ein Beispielcode-Snippet, um dies auszuführen:
import pandas as pd
df = pd.read_csv('./data/amazon_products.csv')
df['product_description'] = df['product_description'].str.slice(0, 512)
df = df.dropna(subset=['keywords'])
Verbindung zu Redis herstellen
Nachdem Sie die Produktdaten erfolgreich in das DataFrame geladen und relevante Artikel gefiltert haben, stellen Sie eine Verbindung zu Redis her, indem Sie sich für eine kostenlose Instanz über RedisLabs anmelden:
- Starten Sie eine neue Redis-Instanz.
- Kopieren Sie die Verbindungsdetails und stellen Sie sicher, dass Sie das Passwort für Ihre Redis-Instanz haben.
Einbettungen mit SentenceTransformer generieren
Als Nächstes generieren wir Einbettungen (Vektoren) für Artikel-Keywords mithilfe des vortrainierten distilroberta-v1 Sentence Transformer-Modells. Hier ist ein Beispielcode zur Einrichtung:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('distilroberta-v1')
embeddings = model.encode(df['keywords'].tolist())
Hilfsfunktionen zur Indizierung
Jetzt, da wir über Einbettungen für unsere Produkte verfügen, definieren wir Hilfsfunktionen, um den Prozess des Ladens von Daten und des Erstellens von Indizes für Vektorfelder zu optimieren:
def load_data():
... # Lade-Logik hier
def create_index():
... # Indizes-Erstellungs-Logik hier
Vergleich von Indizierungsmethoden
Wir werden zwei Indizierungsmethoden untersuchen: Flache Indizierung und HNSW (Hierarchical Navigable Small World). Jede hat einzigartige Vor- und Nachteile hinsichtlich der Leistung:
- Flache Indizierung: Einfach, aber rechenintensiv für große Datensätze.
- HNSW-Indizierung: Effizient mit guter Skalierbarkeit, nutzt eine komplexe Graphstruktur für schnelle Suchen.
Indizierung und Abfrage der Daten
Wir werden zuerst die Produktdaten mit flacher Indizierung laden und indizieren, gefolgt von einer Abfrage der fünf nächsten Nachbarn:
query_vector = ... # Definieren Sie hier Ihren Abfragevektor
result = redis_db.query(Query.Similarity(query_vector)).limit(5)
Abfrage mit HNSW
Jetzt, nachdem wir Produktdaten mit HNSW geladen und indiziert haben, kann die Abfrage ähnlicher durchgeführt werden:
result_hnsw = redis_db.query(Query.Similarity(query_vector)).limit(5)
Fazit
Durch die Verwendung von Vektor-Einbettungen und Redis können Organisationen die Sucherlebnisse für ihre Benutzer erheblich verbessern. Dieses Tutorial hat den Prozess der Erstellung und Indizierung von Vektor-Einbettungen für einen Amazon-Produktdatensatz sowie die Vorteile jeder Indizierungsmethode veranschaulicht.
Für den vollständigen Code und weitere Einblicke empfehlen wir, das GitHub-Repository für weitere Informationen zu besuchen.
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.