Blog / AI
AI

Vektordatenbanken verstehen: Der Motor hinter moderner KI

Erfahren Sie, wie Vektordatenbanken funktionieren, welche Rolle sie in der KI spielen und wie sie mit realen Daten für die semantische Suche und intelligente Anwendungen genutzt werden können.
22 min lesen
Understanding Vector Databases blog image

Vektordatenbanken können hochdimensionale Dateneinbettungen speichern und indizieren, die von Modellen des maschinellen Lernens erzeugt werden. Sie sind ein Eckpfeiler der modernen KI und unterstützen die Speicherung kontextbezogener Informationen und eine sinnvolle semantische Suche.

Obwohl sie oft mit Retrieval-Augmented Generation (RAG) in Verbindung gebracht werden, gehen ihre Anwendungen weit darüber hinaus. Im Einzelnen unterstützen sie die semantische Suche, Empfehlungssysteme, die Erkennung von Anomalien und viele weitere Anwendungen.

In diesem Leitfaden erfahren Sie, was Vektordatenbanken sind, wie sie funktionieren, wie man sie in einem vollständigen Beispiel verwendet und was die Zukunft für sie bereithält!

Was sind Vektordatenbanken?

Vektordatenbanken sind Speichersysteme, die für die Speicherung von Vektordaten konzipiert sind. In diesem Zusammenhang bezieht sich ein Vektor auf eine numerische Einbettung, die unstrukturierte Daten wie Text, Bilder oder Audiodaten darstellt, die im Allgemeinen von einem maschinellen Lernmodell erzeugt werden.

Im Gegensatz zu herkömmlichen Datenbanken speichern Vektordatenbanken hochdimensionale Daten als dichte numerische Vektoren und indizieren sie in einem N-dimensionalen Raum, was eine optimierte Suche auf der Grundlage von Ähnlichkeiten ermöglicht.

Die wachsende Bedeutung von Vektordatenbanken in KI/ML

In den meisten Fällen sind herkömmliche SQL-Datenbanken für KI- und maschinelle Lernaufgaben nicht gut geeignet. Der Grund dafür ist, dass sie strukturierte Daten speichern und nur Abfragen mit genauer Übereinstimmung oder begrenzte Ähnlichkeitssuchen unterstützen. Daher können sie nur schwer mit unstrukturierten Inhalten umgehen und die semantischen Beziehungen zwischen Datenpunkten erfassen.

KI-Anwendungen erfordern nun ein kontextbezogenes Verständnis der Daten. Dies kann mit Einbettungen erreicht werden, für deren Speicherung oder Abfrage relationale Datenbanken nicht optimiert sind. Vektordatenbanken beheben diese Einschränkungen, indem sie auf Ähnlichkeit basierende Suchvorgänge unterstützen, die Bedeutung und Kontext widerspiegeln und so die Tür zum semantischen Verständnis von Daten öffnen.

Das häufigste Szenario für diese Technologie ist die abrufgestützte Generierung (RAG), aber auch andere Anwendungsfälle sind denkbar:

  • Semantische Suchmaschinen
  • Empfehlungssysteme
  • Erkennung von Anomalien in Zeitreihendaten
  • Bildklassifizierung und -suche in der Computer Vision
  • Anwendungen zur Verarbeitung natürlicher Sprache (NLP)

So funktionieren Vektordatenbanken

Vektordatenbanken verwalten Daten als Vektoreinbettungen, die in einem hochdimensionalen Raum existieren. Jede Dimension steht für ein Merkmal der Daten, das einem bestimmten Merkmal der ursprünglichen Daten (dargestellt als Einbettung) entspricht, wie es vom ML-Modell interpretiert wird. Je höher die Dimensionalität der Einbettung ist, desto detaillierter ist die Darstellung, was ein umfassenderes Verständnis der Datenstruktur ermöglicht.

Vom Rohdatendokument zur Vektordatenbank

Um semantisch ähnliche Daten zu finden, verwenden Vektordatenbanken Ähnlichkeitsmetriken wie:

  • Kosinus-Ähnlichkeit: Misst den Kosinus des Winkels zwischen zwei Vektoren, um zu beurteilen, wie ähnlich ihre Richtung ist. Dies wird üblicherweise für Textdaten verwendet.
  • Euklidischer Abstand: Misst den geradlinigen Abstand zwischen zwei Vektoren, nützlich für räumliche Daten, bei denen sowohl Richtung als auch Größe eine Rolle spielen.
  • Punktprodukt-Ähnlichkeit: Berechnet das Produkt der entsprechenden Vektorkomponenten, wobei ein höheres Punktprodukt eine größere Ähnlichkeit anzeigt. Dies ist hilfreich bei Empfehlungssystemen und Ranking-Aufgaben.

Genauso wie SQL- und NoSQL-Datenbanken Indizes verwenden, um die Datenabfrage zu beschleunigen, können Vektordatenbanken fortgeschrittene Indizierungstechniken wie:

  • Approximate Nearest Neighbor (ANN): Beschleunigt die Ähnlichkeitssuche durch Annäherung an die nächstgelegenen Vektoren und reduziert so die Rechenkosten im Vergleich zur exakten Suche.
  • Hierarchische navigierbare kleine Welt (HNSW): Stellt Vektoren in einer Graphenstruktur dar, um die Navigation in großen, hochdimensionalen Räumen zu beschleunigen.

Darüber hinaus können Partitionierungs- und Clustering-Techniken angewandt werden, um die Vektordaten in kleinere, besser handhabbare Gruppen zu organisieren. Diese Methoden verbessern sowohl die Speichereffizienz als auch die Suchleistung.

Beliebte Vektordatenbank-Optionen

Jetzt, da Sie wissen, was Vektordatenbanken sind und wie ihre KI-Dateninfrastruktur funktioniert, können Sie sich mit den beliebtesten Vektordatenbankoptionen befassen. Wir werden jede von ihnen anhand der folgenden Aspekte analysieren:

  • Architektur
  • Leistungsmerkmale
  • Integrationsfähigkeit
  • Preismodell
  • Beste Anwendungsfälle

Wenn Sie wissen möchten, welche Vektordatenbanken sich besonders auszeichnen, werfen Sie einen Blick auf die nachstehende Übersichtstabelle:

Name der Datenbank Open Source/kommerziell Hosting-Optionen Am besten für Seltsame Aspekte Komplexität der Integration
Kiefernzapfen Kommerziell Vollständig verwaltete serverlose Cloud Semantische Suche, Fragen und Antworten, Chatbots Parallele Lese-/Schreibvorgänge, nahtlose OpenAI/Vercel-Integration, Unterstützung für Langzeitspeicher Niedrig – SDKs für viele Sprachen, Plug-and-Play-Integrationen
Weaviate Offener Quellcode und kommerziell Selbstgehostete, serverlose Cloud, verwaltete Unternehmens-Cloud Medien-/Textsuche, Klassifizierung, Gesichtserkennung HNSW + flache Vektorindizierung, invertierte Indizes, umfassende Ökosystemintegration Mittel – Breite Integrationsfläche, gewisse Lernkurve
Milvus Offener Quellcode und kommerziell Selbstgehostet, Zilliz Cloud RAG, Empfehlung, Mediensuche, Anomalieerkennung Daten-Sharing, Streaming-Ingestion, multimodale Datenindizierung Mittel – Viele SDKs, arbeitet mit den wichtigsten AI/LLM-Frameworks
Chroma Offener Quellcode und kommerziell Selbstgehostet, Chroma Cloud Leichtgewichtige Anwendungen, Lebenslaufsuche, KI-Chatbots In-Memory-Modus, REST-APIs über Swagger, umfangreiche Einbettungsintegrationen Niedrig – Python- und TypeScript-SDKs, die auf Benutzerfreundlichkeit ausgelegt sind
Qdrant Offener Quellcode und kommerziell Selbst gehostete, verwaltete Cloud, hybride Cloud, private Cloud RAG, erweiterte Suche, Analytik, KI-Agenten Modulare Indizierung von Nutzdaten/Vektoren, HNSW, feinkörnige Aktualisierungen Mittel – Breite API/Client-Unterstützung, skalierbar und modular

Zeit, sich mit den ausgewählten Optionen der Vektordatenbank zu beschäftigen!

Kiefernzapfen

Kiefernzapfen
  • Architektur: Vollständig verwaltet, serverlos
  • Leistungsmerkmale
    :Polylang-Platzhalter nicht verändern
  • Integrationsmöglichkeiten
    :Polylang-Platzhalter nicht ändern
  • Preismodell
    :Polylang Platzhalter nicht ändern
  • Beste Anwendungsfälle
    : Polylang-Platzhalter nicht ändern

Weaviate

  • Architektur: Modular, Cloud-nativ
  • Leistungsmerkmale
    :Polylang-Platzhalter nicht verändern
  • Integrationsmöglichkeiten
    :Polylang-Platzhalter nicht ändern
  • Preismodell
    :Polylang Platzhalter nicht ändern
  • Beste Anwendungsfälle
    : Polylang-Platzhalter nicht ändern

Milvus

Milvus
  • Architektur: Shared-Storage-Architektur mit Disaggregation von Speicher und Datenverarbeitung für horizontale Skalierbarkeit
  • Leistungsmerkmale
    :Polylang-Platzhalter nicht verändern
  • Integrationsmöglichkeiten
    :Polylang-Platzhalter nicht ändern
  • Preismodell
    :Polylang Platzhalter nicht ändern
  • Beste Anwendungsfälle
    : Polylang-Platzhalter nicht ändern

Chroma

Chroma
  • Architektur: Single-Node-Server für kleine Anwendungen oder verteilt in der Cloud für größere Anwendungen
  • Leistungsmerkmale
    :Polylang-Platzhalter nicht verändern
  • Integrationsmöglichkeiten
    :Polylang-Platzhalter nicht ändern
  • Preismodell
    :Polylang Platzhalter nicht ändern
  • Beste Anwendungsfälle
    : Polylang-Platzhalter nicht ändern

Qdrant

Qdrant
  • Architektur: Lokales Selbst-Hosting oder verteilte Cloud-Bereitstellung für größere und mandantenfähige Anwendungen
  • Leistungsmerkmale
    :Polylang-Platzhalter nicht verändern
  • Integrationsmöglichkeiten
    :Polylang-Platzhalter nicht ändern
  • Preismodell
    :Polylang Platzhalter nicht ändern
  • Beste Anwendungsfälle
    : Polylang-Platzhalter nicht ändern

Versorgung von Vektordatenbanken mit hellen Daten

Die beiden wichtigsten Aspekte, die sich auf die Qualität von Vektoreinbettungen auswirken, sind:

  1. Das Modell des maschinellen Lernens, das zur Erzeugung der Einbettungen verwendet wird.
  2. Die Qualität der in das Modell eingespeisten Daten.

Dies verdeutlicht, dass eine Vektordatenbank-Pipeline nur so leistungsfähig ist wie die Daten, die ihr zugrunde liegen. Wenn die Einbettungen aus minderwertigen, unvollständigen oder verrauschten Daten erzeugt werden, liefern selbst die besten ML-Modelle und Vektordatenbanken schlechte Ergebnisse.

Jetzt verstehen Sie, warum das Sammeln sauberer, reichhaltiger und umfassender Daten so wichtig ist – und hier kommt Bright Data ins Spiel!

Bright Data ist eine führende Plattform für Web-Scraping und Datenerfassung, die es Ihnen ermöglicht, auf ethische und effiziente Weise hochwertige Webdaten in großem Umfang zu erfassen. Die Datenerfassungslösungen von Bright Data können strukturierte Echtzeitdaten aus Hunderten von Domains extrahieren. Außerdem können diese Lösungen direkt in Ihre eigenen Arbeitsabläufe integriert werden, um die Leistung Ihrer benutzerdefinierten Scraping-Skripte zu verbessern.

Der Hauptvorteil dieses Ansatzes zur Datenbeschaffung ist, dass Bright Data sich um alles kümmert. Es verwaltet die Infrastruktur, übernimmt die IP-Rotation, umgeht den Anti-Bot-Schutz, analysiert die HTML-Daten und sorgt für eine vollständige Abdeckung der Compliance.

Mit diesen Web-Scraping-Tools können Sie auf frische, strukturierte Daten direkt aus Webseiten zugreifen. Da das Web die größte Datenquelle ist, eignet es sich ideal für die Erzeugung kontextreicher Vektoreinbettungen. Diese Einbettungen können dann eine breite Palette von KI- und Suchanwendungen unterstützen, wie z. B:

  • Produktinformation für Empfehlungen im elektronischen Handel
  • Nachrichtenartikel für die semantische und kontextbezogene Suche
  • Inhalte sozialer Medien zur Trenderkennung und -analyse
  • Unternehmenseinträge für ortsbezogene Erfahrungen

Von Rohdaten zu Vektoreinbettungen: Der Transformationsprozess

Der Prozess der Umwandlung von Rohdaten in Vektoreinbettungen erfordert zwei Schritte:

  1. Vorverarbeitung der Daten
  2. Generation einbetten

Um besser zu verstehen, wie jeder einzelne Schritt funktioniert und was er mit sich bringt, werden wir diese aufschlüsseln.

Schritt 1. Vorverarbeitung der Daten

Rohdaten sind in der Regel verrauscht, redundant oder unstrukturiert. Der erste Schritt bei der Umwandlung von Rohdaten in Einbettungen besteht darin, sie zu bereinigen und zu normalisieren. Dieser Prozess verbessert die Qualität und Konsistenz der Eingabedaten, bevor sie in ein maschinelles Lernmodell zur Erzeugung von Einbettungen eingespeist werden.

Bei der Verwendung von Webdaten für das maschinelle Lernen sind beispielsweise folgende Vorverarbeitungsschritte üblich:

  • Parsing von HTML-Rohdaten zur Extraktion strukturierter Inhalte.
  • Beseitigung von Leerzeichen und Standardisierung von Datenformaten (z. B. Preise, Daten und Währungssymbole).
  • Normalisierung von Text durch Umwandlung in Kleinbuchstaben, Entfernen von Satzzeichen und Behandlung von HTML-Sonderzeichen.
  • Deduplizierung von Inhalten, um redundante Informationen zu vermeiden.

Schritt 2. Erzeugung der Einbettung

Sobald die Daten bereinigt und vorverarbeitet sind, können sie durch ein ML-Einbettungsmodell geleitet werden. Dieses wandelt sie dann in einen dichten numerischen Vektor um.

Die Wahl des Einbettungsmodells hängt von der Art der Eingabedaten und der gewünschten Ausgabequalität ab. Nachstehend sind einige gängige Methoden aufgeführt:

  • OpenAI Einbettungsmodelle: Sie erzeugen hochwertige, universell einsetzbare Vektoren mit ausgezeichnetem semantischem Verständnis.
  • Satztransformatoren: Ein Open-Source-Python-Framework für moderne Satz-, Text- und Bildeinbettungen. Es läuft lokal und unterstützt viele vortrainierte Modelle.
  • Bereichsspezifische Einbettungsmodelle: Feinabgestimmt auf Nischendatensätze wie Finanzberichte, juristische Dokumente oder biomedizinische Texte, um in bestimmten Szenarien eine hohe Leistung zu erzielen.

So können Sie zum Beispiel OpenAI-Einbettungsmodelle verwenden, um eine Einbettung zu erzeugen

# requirement: pip install openai

from openai import OpenAI

client = OpenAI() # Reading the OpenAI key from the "OPENAI_API_KEY" env

# Sample input data (replace it with your input data)
input_data = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
"""

# Use an OpenAI embedding model for embedding generation
response = client.embeddings.create(
    model="text-embedding-3-large",
    input=input_data
)

# Get the embedding and print it
embedding = response.data[0].embedding
print(embedding)

Die Ausgabe ist ein 3072-dimensionaler Vektor wie:

[
  -0.005813355557620525,  
  # other 3070 elements..., 
  -0.006388738751411438
]

Auf ähnliche Weise können Sie Einbettungen mit Satzumwandlern erzeugen:

# requirement: pip install sentence_transformers

from sentence_transformers import SentenceTransformer

# Sample input data (replace it with your input data)
input_data = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
"""
# Load a pretrained Sentence Transformer model
model = SentenceTransformer("all-MiniLM-L6-v2")

# Embedding generation
embedding = model.encode(input_data)
# Print the resulting embedding
print(embedding)

Dieses Mal ist die Ausgabe ein kürzerer 384-dimensionaler Vektor:

[
  -0.034803513, 
  # other 381 elements..., 
  -0.046595078
]

Beachten Sie, dass es einen Kompromiss zwischen der Qualität der Einbettung und der Berechnungseffizienz gibt. Große Modelle, wie sie von OpenAI angeboten werden, erzeugen reichhaltige, hochpräzise Einbettungen, können aber einige Zeit in Anspruch nehmen und sogar Netzwerkaufrufe zu Premium-KI-Modellen erfordern. Andererseits sind lokale Modelle wie die von SentenceTransformers kostenlos und viel schneller, können aber semantische Nuancen vernachlässigen.

Die Wahl der richtigen Einbettungsstrategie hängt von Ihren Leistungsanforderungen und dem Grad der semantischen Genauigkeit ab, den Sie erreichen wollen.

Praktische Integration: Ein schrittweiser Leitfaden

Folgen Sie den folgenden Schritten und erfahren Sie, wie Sie mit einem Python-Skript von Rohdaten auf einer Webseite zu einer effektiven semantischen Suche gelangen.

Dieser Abschnitt des Tutorials führt Sie durch den Prozess der:

  1. Verwendung der Web Scraper API von Bright Data zum Abrufen von Nachrichtenartikeln von der BBC.
  2. Vorverarbeitung der gescrapten Daten und Vorbereitung für die Erzeugung der Einbettung.
  3. Generierung von Texteinbettungen mit SentenceTransformers.
  4. Einrichtung von Milvus.
  5. Auffüllen der Vektordatenbank mit dem verarbeiteten Text und den Einbettungen.
  6. Durchführung von Suchvorgängen zum Auffinden semantisch relevanter Nachrichtenartikel auf der Grundlage einer Suchanfrage.

Lasst uns eintauchen!

Voraussetzungen

Bevor Sie beginnen, vergewissern Sie sich, dass Sie die folgenden Informationen haben:

  • Python 3+ lokal installiert
  • Docker lokal installiert
  • Ein Bright Data-Konto

Falls Sie dies noch nicht getan haben, installieren Sie Python und Docker auf Ihrem Computer und erstellen Sie ein kostenloses Bright Data-Konto.

Schritt 1: Sammeln von Daten mit der Web Scraper-API von Bright Data

Das Scraping von Nachrichtenartikeln ist nicht immer einfach, da viele Nachrichtenportale ihre Seiten mit Anti-Scraping- und Anti-Bot-Maßnahmen schützen. Um diese Schutzmaßnahmen zuverlässig zu umgehen und frische Daten von der BBC abzurufen, werden wir die Web Scraper API von Bright Data verwenden.

Diese API bietet spezielle Endpunkte für die Erfassung strukturierter Daten von über 120 beliebten Websites, darunter auch die BBC. So funktioniert das Scraping-Verfahren:

  1. Sie stellen eine POST-Anforderung an den entsprechenden Endpunkt, um eine Scraping-Aufgabe für bestimmte URLs auf einer bestimmten Domäne auszulösen.
  2. Bright Data führt die Scraping-Aufgabe in der Cloud durch.
  3. Sie rufen in regelmäßigen Abständen einen anderen Endpunkt ab, bis die gescrapten Daten (in JSON-, CSV- oder anderen Formaten) bereitstehen.

Bevor Sie sich an den Python-Code machen, sollten Sie die Requests-Bibliothek installieren:

pip install requests

Machen Sie sich anschließend in der Dokumentation von Bright Data mit der Web Scraper-API vertraut. Rufen Sie außerdem Ihren API-Schlüssel ab.

Verwenden Sie nun den folgenden Code, um Daten von BBC News abzurufen:

import requests
import json
import time


def trigger_bbc_news_articles_scraping(api_key, urls):
    # Endpoint to trigger the Web Scraper API task
    url = "https://api.brightdata.com/datasets/v3/trigger"

    params = {
      "dataset_id": "gd_ly5lkfzd1h8c85feyh", # ID of the BBC web scraper
      "include_errors": "true",
    }

    # Convert the input data in the desired format to call the API
    data = [{"url": url} for url in urls]

    headers = {
      "Authorization": f"Bearer {api_key}",
      "Content-Type": "application/json",
    }

    response = requests.post(url, headers=headers, params=params, json=data)

    if response.status_code == 200:
        snapshot_id = response.json()["snapshot_id"]
        print(f"Request successful! Response: {snapshot_id}")
        return response.json()["snapshot_id"]
    else:
        print(f"Request failed! Error: {response.status_code}")
        print(response.text)

def poll_and_retrieve_snapshot(api_key, snapshot_id, output_file, polling_timeout=20):
    snapshot_url = f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}?format=json"
    headers = {
        "Authorization": f"Bearer {api_key}"
    }

    print(f"Polling snapshot for ID: {snapshot_id}...")

    while True:
        response = requests.get(snapshot_url, headers=headers)

        if response.status_code == 200:
            print("Snapshot is ready. Downloading...")
            snapshot_data = response.json()

            # Write the snapshot to an output json file
            with open(output_file, "w", encoding="utf-8") as file:
                json.dump(snapshot_data, file, indent=4)

            print(f"Snapshot saved to {output_file}")
            return
        elif response.status_code == 202:
            print(F"Snapshot is not ready yet. Retrying in {polling_timeout} seconds...")
            time.sleep(polling_timeout)
        else:
            print(f"Request failed! Error: {response.status_code}")
            print(response.text)
            break

if __name__ == "__main__":
    BRIGHT_DATA_API_KEY = "<YOUR_BRIGHT_DATA_API_KEY>" # Replace it with your Bright Data's Web Scraper API key
    # URLs of BBC articles to retrieve data from
    urls = [
        "https://www.bbc.com/sport/formula1/articles/c9dj0elnexyo",
        "https://www.bbc.com/sport/formula1/articles/cgenqvv9309o",
        "https://www.bbc.com/sport/formula1/articles/c78jng0q2dxo",
        "https://www.bbc.com/sport/formula1/articles/cdrgdm4ye53o",
        "https://www.bbc.com/sport/formula1/articles/czed4jk7eeeo",
        "https://www.bbc.com/sport/football/articles/c807p94r41do",
        "https://www.bbc.com/sport/football/articles/crgglxwge10o",
        "https://www.bbc.com/sport/tennis/articles/cy700xne614o",
        "https://www.bbc.com/sport/tennis/articles/c787dk9923ro",
        "https://www.bbc.com/sport/golf/articles/ce3vjjq4dqzo"
    ]
    snapshot_id = trigger_bbc_news_articles_scraping(BRIGHT_DATA_API_KEY, urls)
    poll_and_retrieve_snapshot(BRIGHT_DATA_API_KEY, snapshot_id, "news-data.json")

Beachten Sie, dass die von uns gewählten Eingabe-URLs alle auf BBC-Sportartikel verweisen. Starten Sie das obige Skript, und Sie erhalten eine Ausgabe wie diese:

Request successful! Response: s_m9in0ojm4tu1v8h78
Polling snapshot for ID: s_m9in0ojm4tu1v8h78...
Snapshot is not ready yet. Retrying in 20 seconds...
# ...
Snapshot is not ready yet. Retrying in 20 seconds...
Snapshot is ready. Downloading...
Snapshot saved to news-data.json

Wie Sie sehen, fragt das Skript so lange ab, bis die Daten fertig sind. Sobald der Prozess abgeschlossen ist, finden Sie in Ihrem Projektordner eine Datei namens news-data.json, die die gescrapten Artikeldaten im strukturierten JSON-Format enthält.

Schritt 2: Bereinigung und Vorbereitung der gescrapten Daten

Wenn Sie die Ausgabedatei öffnen, sehen Sie eine Reihe von Nachrichten wie diese:

[
    {
        "input": {
            "url": "https://www.bbc.com/sport/football/articles/c807p94r41do",
            "keyword": ""
        },
        "id": "c807p94r41do",
        "url": "https://www.bbc.com/sport/football/articles/c807p94r41do",
        "author": "BBC",
        "headline": "Man City Women: What has gone wrong for WSL side this season?",
        "topics": [
            "Football",
            "Women's Football"
        ],
        "publication_date": "2025-04-13T19:35:45.288Z",
        "content": "With their Women's Champions League qualification ...",
        "videos": [],
        "images": [
            // ...
        ],
        "related_articles": [
            // ...
        ],
        "keyword": null,
        "timestamp": "2025-04-15T13:14:27.754Z"
    }
    // ...
]

Nachdem Sie nun Ihre Daten erhalten haben, besteht der nächste Schritt darin, diese Datei zu importieren, den Inhalt zu bereinigen und sie für die ML-Einbettungsgenerierung vorzubereiten.

In diesem Fall übernimmt Bright Data bereits den Großteil der Arbeit für Sie. Die gescrapten Daten werden in einem geparsten und strukturierten Format zurückgegeben, sodass Sie sich nicht um das Parsen von HTML-Daten kümmern müssen.

Was Sie stattdessen tun sollten, ist:

  • Leerzeichen, Zeilenumbrüche und Tabulatoren im Textinhalt normalisieren.
  • Kombinieren Sie die Überschrift des Artikels mit dem Inhalt des Textes, um einen einzigen, sauberen Textstring zu erstellen, der sich für die Einbettung eignet.

Um die Datenverarbeitung zu erleichtern, wird die Verwendung von Pandas empfohlen. Sie können es mit installieren:

pip install pandas

Laden Sie die Datei news-data.json aus dem vorherigen Schritt und führen Sie die Datenverarbeitungslogik aus:

import pandas as pd
import json
import re


# Load your JSON array
with open("news-data.json", "r") as f:
    news_data = json.load(f)

# Normalize whitespaces/newlines/tabs for better embedding quality
def clean_text(text):
    text = re.sub(r"\s+", " ", text)
    return text.strip()

# Create a DataFrame
df = pd.DataFrame(news_data)

# Combine headline and cleaned content for embedding input
df["text_for_embedding"] = df["headline"].map(clean_text) + ". " + df["content"].map(clean_text)

# Ensure ID is a string
df["id"] = df["id"].astype(str)

Beachten Sie, dass das neue Feld text_for_embedding den aggregierten und bereinigten Textinhalt enthält – bereit für die Erzeugung der Einbettung.

Schritt 3: Generierung der Einbettungen

Verwenden Sie SentenceTransformer, um Einbettungen aus dem Feld text_for_embedding zu erzeugen:

from sentence_transformers import SentenceTransformer

# Step 2 ...

# Initialize a model for embedding generation
model = SentenceTransformer("all-MiniLM-L6-v2")

# Generate embeddings
texts = df["text_for_embedding"].tolist()
embeddings = model.encode(texts, show_progress_bar=True, batch_size=16)

# Store the resulting emebeddings in the DataFrame
df["embedding"] = embeddings.tolist()

Da show_progress_bar auf True gesetzt ist, zeigt sentence_transformers während der Einbettungsgenerierung einen Fortschrittsbalken im Terminal an. Dies ist besonders bei der Verarbeitung großer Datensätze hilfreich, da der Vorgang einige Zeit dauern kann.

Die erzeugten Vektoreinbettungen werden direkt in der Einbettungsspalte des ursprünglichen DataFrame aus Schritt 1 gespeichert.

Schritt 4: Auswählen und Einrichten der Vektordatenbank

Milvus ist eine ausgezeichnete Wahl für eine Vektordatenbank in diesem Beispiel, weil sie kostenlos und quelloffen ist und die semantische Suche als einen ihrer Hauptanwendungsfälle unterstützt.

Um Milvus auf Ihrem lokalen Rechner zu installieren, folgen Sie den offiziellen Dokumentationsseiten:

Sie sollten eine Milvus-Instanz haben, die lokal auf Port 19530 läuft.

Als nächstes installieren Sie pymilvus, denPython-Milvus-Client:

pip install pymilvus

Hinweis: Die Version des Milvus-Servers muss mit der Version des Python-Clients übereinstimmen. Inkompatible Versionen können zu Verbindungsfehlern führen. Unterstützte Versionskombinationen finden Sie auf der Milvus-GitHub-Versionsseite. Zum jetzigen Zeitpunkt funktioniert die folgende Kombination:

  • Milvus-Server Version: 2.5.9
  • pymilvus Version: 2.5.6

Schritt 5: Laden der Einbettungen in die Vektordatenbank

Verwenden Sie pymilvus, um eine Verbindung zu Ihrem lokalen Milvus-Server herzustellen, eine news_articles-Sammlung zu erstellen, deren Schema und Index zu definieren und sie mit den Einbettungen zu füllen:

from pymilvus import connections, utility, CollectionSchema, FieldSchema, DataType, Collection

# Step 4...

# Connect to Milvus
connections.connect("default", host="localhost", port="19530")

# Drop the "news_articles" collection if it already exists
if utility.has_collection("news_articles"):
    utility.drop_collection("news_articles")

# Define the collection's schema
fields = [
    FieldSchema(name="id", dtype=DataType.VARCHAR, is_primary=True, max_length=64),
    FieldSchema(name="url", dtype=DataType.VARCHAR, max_length=65535),
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=65535),
    FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384),
]
schema = CollectionSchema(fields, description="News article embeddings for semantic search")
collection = Collection(name="news_articles", schema=schema)

# Create an index on the embedding field
index_params = {
    "metric_type": "COSINE",
    "index_type": "HNSW",
}
collection.create_index(field_name="embedding", index_params=index_params)

# Load the collection for the first time
collection.load()

# Prepare data for insertion
ids = df["id"].tolist()
urls = df["url"].tolist()
texts = df["text_for_embedding"].tolist()
vectors = df["embedding"].tolist()

# Insert the data into the Milvus collection
collection.insert([ids, urls, texts, vectors])
collection.flush()

Nach diesen Codezeilen enthält die news_articles-Sammlung auf Ihrem lokalen Milvus-Server die Einbettungsdaten und ist bereit, semantische Suchanfragen zu unterstützen.

Schritt 6: Durchführen von semantischen Suchen

Definieren Sie eine Funktion zur Durchführung einer semantischen Suche in der Sammlung news_articles:

# Step 5... 

def search_news(query: str, top_k=3, score_threshold=0.5):
    query_embedding = model.encode([query])
    search_params = {"metric_type": "COSINE"}

    results = collection.search(
        data=query_embedding,
        anns_field="embedding",
        param=search_params,
        limit=top_k,
        output_fields=["id", "url", "text"]
    )

    for hits in results:
        for hit in hits:
            if hit.score >= score_threshold:
                print(f"Score: {hit.score:.4f}")
                print(f"URL: {hit.fields["url"]}")
                print(f"Text: {hit.fields["text"][:300]}...\n")

Es wird nach den 3 besten Ergebnissen gesucht, die semantisch mit der eingegebenen Abfrage übereinstimmen, wobei nur die Ergebnisse mit einer Ähnlichkeitsbewertung von über 0,5 zurückgegeben werden. Da wir die Kosinus-Ähnlichkeit verwenden, reicht die Punktzahl von -1 (völlig entgegengesetzt) bis 1 (perfekte Übereinstimmung).

Sie können jetzt eine semantische Suche nach der Anfrage “Zukunft des Red Bull Rennstalls in der Formel 1” durchführen:

search_news("Future of the Red Bull racing team in Formula 1")

Die Ausgabe wird sein:

Score: 0.5736
URL: https://www.bbc.com/sport/formula1/articles/c9dj0elnexyo
Text: Max Verstappen: Red Bull adviser Helmut Marko has 'great concern' about world champion's future with team. Saudi Arabian Grand PrixVenue: Jeddah Dates: 18-20 April Race start: 18:00 BST on SundayCoverage: Live radio commentary of practice, qualifying and race online and BBC 5 Sports Extra; live text...

Score: 0.5715
URL: https://www.bbc.com/sport/formula1/articles/czed4jk7eeeo
Text: F1 engines: A return to V10 or hybrid - what's the future?. Christian Horner's phone rang. It was Bernie Ecclestone. Red Bull's team principal picked up, switched to speakerphone and placed it on the table in front of the assembled Formula 1 bosses.We're in the F1 Commission, Horner told Ecclestone....

Wenn Sie die gefundenen Artikel lesen, werden Sie feststellen, dass die Suchanfrage nicht wörtlich im Text enthalten ist. Dennoch geht es in den gefundenen Artikeln eindeutig um die Zukunft von Red Bull in der Formel 1 – wasdie Leistungsfähigkeit von Vektoreinbettungen zeigt!

Optimierung der Leistung von Vektordatenbanken

Um das Beste aus Ihrer Vektordatenbank herauszuholen, sollten Sie zunächst Ihre Daten in sinnvolle Sammlungen organisieren. Als Nächstes sollten Sie die Implementierung von Data Sharding und Clustering in Betracht ziehen und Indizierungsstrategien definieren, die für Ihre spezifischen Abfragemuster optimiert sind.

Denken Sie daran, dass viele dieser Optimierungen am effektivsten sind, wenn Ihr Vektordatenbankprozess ausgereift ist. Das ist der Fall, wenn Sie ein solides Verständnis dafür haben, welche Daten am häufigsten abgefragt werden. Erst dann sollten Sie die Leistung auf der Grundlage der tatsächlichen Nutzungsmuster optimieren, anstatt voreilige Annahmen zu treffen.

Andere häufige Leistungsprobleme sind Einbettungsdrift, inkonsistente Vektordimensionen und veraltete oder doppelte Daten. Beheben Sie diese Probleme durch regelmäßiges erneutes Einbetten, Erzwingen von Schemakonsistenz für Ihre hochdimensionalen Daten und Einrichten von automatischen Bereinigungsaufgaben.

Wenn neue Daten in Ihr System eingespeist werden, müssen Sie auch entweder Vektoraktualisierungen in Echtzeit oder geplante Batch-Inserts unterstützen. Denken Sie in diesem Zusammenhang daran, dass die Aufnahme von ungeprüften Daten zu verrauschten Einbettungen und unzuverlässigen Suchergebnissen führen kann.

Zur Optimierung von Single-Node-Datenbanken sollten Sie Parameter wie Indexgenauigkeit, Vektordimensionalität und Anzahl der Shards anpassen. Wenn Ihre Arbeitslast wächst, ist die horizontale Skalierung in der Regel der vertikalen Skalierung vorzuziehen. Daher werden Sie möglicherweise mehrere verteilte Knoten haben – in der Regel in der Cloud.

Moderne KI-Systeme sind noch relativ neu, und das Ökosystem entwickelt sich rasch weiter. Da Vektordatenbanken als Motor für viele der KI-Bewegungen dienen, wird die Technologie selbst kontinuierlich angepasst, um immer komplexere, reale Anwendungen zu unterstützen.

Interessante Trends, die die Zukunft der Vektordatenbanken prägen werden, könnten sein:

  • Hybride Suchintegration: Kombination der Vektorsuche mit herkömmlichen relationalen oder NoSQL-Systemen, um flexiblere Abfragen über strukturierte und unstrukturierte Daten zu ermöglichen.
  • Native multimodale Unterstützung: Ermöglicht die einheitliche Speicherung und Abfrage von Einbettungen aus verschiedenen Quellen wie Text, Bilder, Audio und Video.
  • Intelligentere Indizierung und Abstimmung: Verwendung von Funktionen wie automatisch abgestimmte Parameter, kosteneffizienter Speicher und SQL-Datenbankintegrationen zur Verbesserung der Skalierbarkeit und der Bereitschaft des Unternehmens.

Schlussfolgerung

Wie Sie in diesem Leitfaden erfahren haben, sind Vektordatenbanken eine Kernkomponente der Datenspeicherung für maschinelles Lernen. Insbesondere haben Sie verstanden, was Vektordatenbanken sind, wie sie funktionieren, welche Optionen derzeit in der Branche verfügbar sind und welche wichtige Rolle sie in der modernen KI-Dateninfrastruktur spielen.

Sie haben auch gesehen, wie man von Rohdaten zu in einer Vektordatenbank gespeicherten Einbettungen für einen Anwendungsfall der semantischen Suche gelangt. Dabei wurde deutlich, wie wichtig es ist, mit umfassenden, vertrauenswürdigen und aktuellen Daten zu beginnen – und genau hier kommen die Web-Scraping-Lösungen von Bright Data ins Spiel.

Starten Sie eine kostenlose Testversion von Bright Data, um hochwertige Daten für Ihre Vektordatenbankanwendungen zu erhalten!

Keine Kreditkarte erforderlich