Grundlegendes zur semantischen Suche

Abgeschlossen

Sehen wir uns die Grundlagen der semantischen Suche an:

  • Wie es sich von der lexikalischen Standardsuche unterscheidet.
  • Was ist Vektoreinbettung?
  • Was tun Vektordatenbanken?

Die standardmäßige lexikalische Suche oder Stichwortsuche fragt Dokumente nach übereinstimmenden Zeichen ab. Die Abfrage „light“ entspricht z. B. dem Text „bright light“, da das Zeichen light im Dokument angezeigt wird.

Die lexikalische Suche kann mit Fuzzyübereinstimmung erweitert werden. Die Abfrage „light“ könnte z. B. weiterhin mit dem Text „bright light“ oder dem falsch geschriebenen Text lihgts übereinstimmen, da ein Zeichen abweichend ist (ein fehlender s, oder Austausch von g und h). Während Fuzzyübereinstimmung und andere Techniken wie Wortstammerkennung hilfreich sind, muss diese Technik Synonyme oder semantisch ähnlicher Sprache entsprechen: Verschiedene Ausdrücke, Umgangssprache, technisches Vokabular usw. Um die relevantesten Suchergebnisse mit lexikalischer Suche bereitzustellen, müssen Autoren Schlüsselwörter in Metadaten oder den Text selbst einbetten (was eine ungünstige Benutzererfahrung sein kann).

Geben Sie semantische Suche ein. Die semantische Suche verwendet keine Zeichenähnlichkeit. Stattdessen werden numerische Darstellungen der Konzepte in Wörtern und Ausdrücken verwendet. Diese numerischen Darstellungen werden als Einbettungsvektoren oder einfach Einbettungen bezeichnet.

Wenn zwei Einbettungen numerisch ähnlich sind, sind sie auch semantisch ähnlich. Diese Ähnlichkeit ist allgemeiner als das Testen von Schlüsselwortüberlappungen, da sie weniger empfindlich für präzise Stichwortauswahl oder Formulierungen ist.

Um eine semantische Suche durchzuführen, generieren Sie zuerst den Einbettungsvektor der Abfrage. Vergleichen Sie diesen Vektor dann mit einer Datenbank von Vektoren. Die Einbettungen, die der Abfrageeinbettung am nächsten sind, sind die Dokumente, die der Abfrage semantisch am ähnlichsten sind.

Die meisten relationalen Datenbank-Anwendungsfälle umfassen nicht das Speichern von n-dimensionalen Vektoren und das Berechnen des numerischen Abstands zwischen diesen. Effiziente semantische Suche erfordert Vektordatenbankfunktionen.

Ein Diagramm mit einem Dokument und einer Abfrage, welche die OpenAI Embeddings-API durchläuft, um Vektoren einzubetten. Diese Vektoren werden dann mithilfe des Kosinusabstands verglichen.

Einbettungen

Eine Einbettung ist eine numerische Darstellung der Semantik. Einbettungen werden als n-dimensionale Vektoren dargestellt: Arrays mit n Zahlen. Jede Dimension stellt eine semantische Qualität dar, die durch das Einbettungsmodell bestimmt wird.

Ein Diagramm mit dem Eingabetext „lorem ipsum“, der an die Azure OpenAI-Einbettungs-API gesendet wird, was zu einem Vektorarray von Zahlen führt.

Wenn zwei Einbettungsvektoren in ähnliche Richtungen zeigen, stellen sie ähnliche Konzepte dar, z. B. „bright“ und „sunny“. Wenn sie voneinander wegzeigen, stellen sie gegensätzliche Konzepte dar, z. B. „traurig“ und „glücklich“. Die Einbettungsmodellstruktur und Trainingsdaten bestimmen, was als ähnlich und unterschiedlich betrachtet wird.

Einbettungen können auf Text und jede Art von Daten angewendet werden, z. B. Bilder oder Audio. Wichtig ist, dass Daten basierend auf einem Modell oder einer Funktion in n-dimensionale Einbettungsvektoren umtransformiert werden. Die numerische Ähnlichkeit der Einbettungen steht für die semantische Ähnlichkeit ihrer entsprechenden Daten.

Die numerische Ähnlichkeit von zwei n-dimensionalen Vektoren v1 und v2 wird durch ihr Skalarprodukt angegeben und als v1·v2 geschrieben. Um das Skalarprodukt zu berechnen, multiplizieren Sie die Werte der einzelnen Dimensionen paarweise und summieren Sie dann das Ergebnis:

dot_product(v1, v2) = SUM(
 v1[0] * v2[0] +
 v1[1] * v2[1],
 ...,
 v1[n-1] * v2[n-1],
 v1[n] * v2[n]
)

Da es sich bei den Einbettungen um Einheitsvektoren (Vektoren der ersten Länge) handelt, ist das Skalarprodukt gleich der Kosinusgleichheit der Vektoren, ein Wert zwischen -1 (genau entgegengesetzte Richtungen) und 1 (genau die gleiche Richtung). Vektoren mit einer Kosinusgleichheit von Null sind orthogonal, also semantisch nicht verknüpft.

Sie können n-dimensionale Räume visualisieren, indem Sie sie mithilfe der Hauptkomponentenanalyse (PCA) in einen dreidimensionalen Raum projizieren. PCA ist eine Standardtechnik zum Reduzieren von Vektorabmessungen. Das Ergebnis ist eine vereinfachte, aber visuelle Projektion des n-dimensionalen Raums. Das Rendern von Dokumenteinbettungen auf diese Weise zeigt, dass ähnliche Dokumente in Clustern gruppiert werden, während unterschiedliche Dokumente weiter voneinander entfernt sind.

Aufgrund dieser Definitionen ist das Ausführen einer semantischen Suche einer Abfrage für eine Sammlung von Dokumenteinbettungen mathematisch einfach:

  1. Generieren Sie die Abfrageeinbettung mithilfe eines Sprachmodells.
  2. Nehmen Sie das Skalarprodukt der Abfrageeinbettung für die vorab berechnete Einbettung jedes Dokuments an.
  3. Sortieren Sie die Skalarprodukte; Zahlen von -1 bis 1.
  4. Die relevantesten (semantisch ähnlichen) Dokumente weisen die höchsten Bewertungen auf und die am wenigsten relevanten (semantisch unterschiedlichen) Dokumente weisen die niedrigsten Bewertungen auf.

Obwohl dies mathematisch einfach ist, handelt es sich nicht um eine einfache oder performante Abfrage in einer relationalen Datenbank. Verwenden Sie eine Vektordatenbank, um diese Art von Vektorähnlichkeitsabfrage zu speichern und zu verarbeiten.

Vektordatenbanken

Eine Vektordatenbank optimiert die Speicherung und Berechnung von m-dimensionalen Vektoren, z. B. Einbettungen. Insbesondere bieten Vektordatenbanken schnelle und genaue Skalarproduktberechnungen zum Ausführen einer Vektorähnlichkeitsabfrage.

Vektorähnlichkeitssuchen weisen mehrere Anwendungsfälle auf:

  • Suchen nach Bildern, die der Einbettung des Abfragebilds ähneln
  • Suchen nach Dokumenten, die der Einbettung des Abfragetexts ähneln
  • Suchen von Produkten mit ähnlichen Features und Bewertungen für ein Empfehlungssystem

Die semantische Suche fragt die Vektordatenbank nach der Ähnlichkeit der Abfrageeinbettung mit den einzelnen gespeicherten Einbettungen ab. Anwendungen können dann die Daten abrufen, die den Einbettungen entsprechen.

Es gibt viele systemeigene Vektordatenbanken und Datenbankerweiterungen, aus denen Sie auswählen können. Die folgenden Azure-Dienste können Ihnen dabei helfen, Ihre Vektordatenbankanforderungen zu erfüllen: