deep learning

Effiziente Vektorähnlichkeitssuche mit Redis Tutorial

A diagram demonstrating efficient vector similarity search with Redis and embeddings.

Verbesserung der Suchergebnisse mit Vektor-Embeddings und Redis

In der heutigen digitalen Landschaft ist die Fähigkeit, Informationen effektiv zu suchen, von entscheidender Bedeutung. Benutzer erwarten in nahezu jeder Anwendung und Website eine schnelle und präzise Suchfunktion. Um die Suchergebnisse zu verbessern, müssen Architekten und Entwickler kontinuierlich neue Methoden und Architekturen bewerten. Eine der vielversprechendsten Ansätze ist die Nutzung von Vektor-Embeddings, die von Deep-Learning-Modellen generiert werden und die Genauigkeit sowie Relevanz der Suchergebnisse erheblich verbessern.

Verständnis von Vektor-Embeddings

Viele Organisationen nutzen Indizierungstechniken, um ihre Daten in einen Vektorraum zu konvertieren. Durch die Darstellung von Daten als Vektoren können Ähnlichkeitssuchen durchgeführt werden, um die relevantesten Ergebnisse zu identifizieren. Dieser Artikel untersucht, wie Deep-Learning-Modelle Vektor-Embeddings erstellen können und wie Redis für effiziente und genaue Suchen genutzt werden kann.

Erstellen von Vektor-Embeddings

Um den Prozess zu veranschaulichen, arbeiten wir mit einem Amazon-Produkt-Datensatz. Dieses Tutorial skizziert die Schritte:

  • Erstellen von Vektor-Embeddings für den Amazon-Produkt-Datensatz
  • Indizieren mit Redis
  • Nach ähnlichen Vektoren suchen

Einrichten Ihrer Umgebung

Beginnen Sie mit dem Erstellen eines neuen Verzeichnisses und eines Jupyter-Notebooks. Laden Sie die Datensatz-CSV-Datei aus der vorgesehenen Quelle herunter und speichern Sie sie im ./data/-Verzeichnis. Stellen Sie sicher, dass Sie Python 3.8 verwenden, und installieren Sie die notwendigen Abhängigkeiten:

pip install redis pandas sentence-transformers

Daten laden

Sobald die Abhängigkeiten installiert sind, importieren Sie die notwendigen Bibliotheken:

import pandas as pd
import redis
from redis.commands.search.field import VectorField, TextField, TagField
from redis.commands.search.query import Query
from redis.commands.search.result import Result

Laden Sie die Amazon-Produktdaten in ein Pandas DataFrame und kürzen Sie lange Textfelder auf maximal 512 Zeichen, was optimal für den vortrainierten Embedding-Generator ist:

df = pd.read_csv('./data/amazon_products.csv')
df['keywords'] = df['keywords'].str.slice(0, 512)
# Fügen Sie einen Primärschlüssel hinzu und filtern Sie die Daten

Verbindung zu Redis herstellen

Nachdem die Produktdaten geladen sind, stellen Sie eine Verbindung zu Redis her. Sie können eine kostenlose Redis-Instanz von RedisLabs verwenden. Melden Sie sich an und erstellen Sie eine Redis-Instanz, wobei Sie die Verbindungsdaten, einschließlich des Passworts, notieren.

Generierung von Embeddings

Wir werden Embeddings mit dem Sentence Transformer-Modell distilroberta-v1 generieren. Dieses Modell kann geladen werden, um die Embeddings zu erstellen:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('distilroberta-v1')
embeddings = model.encode(df['keywords'].tolist())

Hilfsfunktionen

Definieren Sie Hilfsfunktionen, um Produktdaten zu laden und Indizes zu erstellen:

def load_product_data():
    # Funktion zum Laden und Verarbeiten von Produktdaten
    pass

def create_index(vector_field):
    # Funktion zum Erstellen eines Redis-Index
    pass

Indizierungsmethoden

Es werden zwei wichtige Indizierungsmethoden untersucht:

  • Flache Indizierung: Eine einfache Methode, bei der alle Datenpunkte indiziert werden. Sie führt eine brute-force Suche durch, die bei großen Datensätzen rechenintensiv sein kann.
  • HNSW (Hierarchical Navigable Small World): Ein komplexerer Algorithmus, der Daten in einer Graphstruktur organisiert und eine effiziente annähernde nächstgelegene Nachbarsuche ermöglicht.

Indizierung und Abfrage von Daten

Beginnen Sie mit der flachen Indizierung:

create_index(VectorField('embeddings'))

Fragen Sie den Index ab, um die 5 nächsten Nachbarn für einen bestimmten Abfragevektor zu finden:

query_vector = embeddings[0]
query_result = redis_connection.search(Query(f'*=>[KNN 5 @embeddings $vec]').sort_by('distance'))

Wiederholen Sie nun die Abfrage mit der HNSW-Indizierung:

create_index(VectorField('embeddings', 'HNSW'))

Mit dieser Konfiguration können Sie effizient nach ähnlichen Artikeln suchen.

Abschließende Gedanken

Dieses Tutorial zeigt, wie Vektor-Embeddings und Redis Ihre Suchfähigkeiten auf die nächste Ebene heben können. Für einen tieferen Einblick werfen Sie einen Blick auf den vollständigen Code in unserem GitHub-Repository, wo Sie auch zusätzlichen Kontext und Beispiele finden, einschließlich, wie Sie Ähnlichkeitssuchen mit Bildern durchführen können.

Erfahren Sie mehr über KI-unterstützte Suchen

Die Implementierung von KI-Technologie in Suchanfragen kann das Benutzererlebnis erheblich verbessern. Erkunden Sie verschiedene Modelle und Ansätze, um herauszufinden, was am besten zu Ihren Bedürfnissen passt.

Weiterlesen

Learn about generative models on the Clarifai platform and their applications.
A visual representation of a tutorial on creating a product idea generator using GPT4All and Stable Diffusion.

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.