Entwerfen von Einbettungen für SQL-Datenbankworkloads

Abgeschlossen

Einbettungen stellen Daten als Vektoren dar, sodass die Ähnlichkeit zwischen Textabschnitten verglichen werden kann. Wie Sie Einbettungen entwerfen, wirkt sich auf Relevanz, Leistung und Kosten aus, wenn Vektoren später generiert und abgefragt werden.

SQL Server bietet integrierte KI-Funktionen, die das Einbetten von Workflows unterstützen. Allgemeine Vektorsuchmuster helfen ihnen dabei, wie Text vorbereitet werden soll, bevor Einbettungen generiert werden.

Verstehen, wie Vektoren erstellt werden

Was bedeutet der Begriffsvektor im Kontext der KI-Integration mit einer SQL-Datenbank?

Ein KI-Modell erstellt einen Vektor, nicht SQL selbst. Das Modell wurde trainiert, Text zu lesen und eine Liste von Zahlen zurückzugeben, die die Bedeutung dieses Texts darstellt.

Wenn SQL Text an ein Einbettungsmodell sendet, gibt das Modell einen Vektor zurück, der sql für einen späteren Vergleich mit anderen Vektoren speichert.

Wenn beispielsweise der Text "leichter Wanderrucksack" an ein Einbettungsmodell gesendet wird, kann das Modell zurückkehren:

[0.12, -0.87, 0.45, 0.31, …]

Ein verwandter Satz wie "kompakter Rucksack für Tageswanderungen" würde eine andere Liste von Zahlen erzeugen, die ähnlich aussehen:

[0.10, -0.85, 0.47, 0.29, …]

Da die Vektoren ähnlich aussehen, kann SQL die beiden Textabschnitte als verwandt behandeln, obwohl der Wortlaut anders ist.

Identifizieren von Daten, die in Einbettungen eingeschlossen werden sollen

Einbettungen funktionieren am besten, wenn sie Text darstellen, der semantische Bedeutung hat, z. B. Beschreibungen, Titel oder andere Freiformtextfelder.

Spalten, die Bezeichner, numerische Werte oder Betriebsmetadaten speichern, fügen in der Regel keinen semantischen Wert hinzu und sollten ausgeschlossen werden. Das Einschränken von Einbettungen auf aussagekräftigen Text reduziert die Tokenverwendung und verbessert die Ähnlichkeitsergebnisse.

Designentscheidungen in dieser Phase bestimmen, welche Informationen von Einbettungen erfasst werden und wie gut sie die zugrunde liegenden Daten repräsentieren.

Steuern der Eingabegröße und -struktur

Einbettungsmodelle funktionieren für tokenisierte Eingaben und erzwingen Grenzwerte für die Verarbeitung von Text in einer einzelnen Anforderung. Ein Token ist ein kleiner Textteil, z. B. ein Wort oder ein Teil eines Worts, das das Modell als Einheit verarbeitet. Lange Textwerte erfordern häufig eine Aufteilung in kleinere Einheiten.

SQL Server unterstützt dieses Muster durch integrierte KI-Funktionen, mit denen Text für einbettende Workflows vorbereitet werden kann. Durch die Steuerung der Eingabegröße können Sie Text innerhalb von Modellgrenzen beibehalten und sicherstellen, dass jede Einbettung ein klares, fokussiertes Inhaltsstück darstellt.

Gut strukturierte Eingaben tragen auch zur Vermeidung der gemeinsamen Einbettung nicht zusammenhängende Ideen bei, was die Qualität von Ähnlichkeitsergebnissen reduzieren kann.

Entwerfen von Chunkingstrategien

Chunking definiert, wie größere Textwerte in kleinere Segmente unterteilt werden. Eine Segmentierungsstrategie gleicht Kontext und Präzision aus.

Blöcke, die zu groß sind, können Tokengrenzwerte überschreiten oder den semantischen Fokus verdünnen. Blöcke, die zu klein sind, verlieren möglicherweise einen wichtigen Kontext. Ziel ist es, bedeutungserhalten zu können und gleichzeitig die Verarbeitung von Blöcken effizient zu halten.

In der Praxis wird das Chunking durch die Regeln definiert, die Sie beim Aufteilen von Text in SQL anwenden. Diese Regeln steuern in der Regel, wie viel Text in jeden Block fließt, z. B. eine maximale Anzahl von Zeichen und wo Splits auftreten dürfen.

AI_GENERATE_CHUNKS(SOURCE = description, CHUNK_TYPE = FIXED, CHUNK_SIZE = 500)

Indem Sie Blockierungsregeln direkt in SQL definieren, können Sie in der Nähe der Quelltabellen die Blockgröße oder das Teilenverhalten ändern, indem Sie die Abfrage anpassen, anstatt den Anwendungscode zu ändern.

Anwenden des Einbettungsdesigns mit SQL

Das folgende Beispiel zeigt ein konzeptionelles Muster, das Text für die Einbettungsgenerierung vorbereitet, indem er in kleinere Einheiten unterteilt wird.

SELECT
    id,
    c.chunk
FROM dbo.documents
CROSS APPLY
    AI_GENERATE_CHUNKS(SOURCE = description, CHUNK_TYPE = FIXED, CHUNK_SIZE = 500) AS c;

In diesem Beispiel wird der Text in der description Spalte in Blöcke mit bis zu 500 Zeichen unterteilt. Jeder Block kann später an eine Einbettungsfunktion übergeben werden, um sicherzustellen, dass Einbettungen fokussierte Teile des ursprünglichen Inhalts darstellen.

Wenn beispielsweise eine Zeile den folgenden Text in der description Spalte enthält:

"Lightweight backpack designed for long day hikes in warm weather."

Die Chunking-Funktion kann mehrere Chunks erzeugen, z. B.:

  • "Lightweight backpack designed for long day hikes"
  • "in warm weather."

Jeder Block wird als separate Zeile von der Abfrage zurückgegeben. Diese kleineren Teile können dann einzeln an eine Einbettungsfunktion übergeben werden, sodass jede Einbettung einen fokussierten Teil des ursprünglichen Texts darstellt.

Tipp

Ein Entwurfsmuster besteht darin, Vektoren in einer separaten Tabelle aus den Quelltextdaten zu speichern. Eine dedizierte Einbettungstabelle erleichtert das Nachverfolgen der Nutzung von Raumvektoren und das Neuerstellen von Einbettungen ohne Auswirkungen auf die ursprünglichen Daten.

Wichtige Erkenntnisse

Die Qualität der Einbettungen hängt von den Entscheidungen ab, die Sie treffen, bevor ein Modell ausgeführt wird. Wenn Sie die richtigen Spalten auswählen und langen Text in fokussierte Segmente aufteilen, bestimmen Sie, AI_GENERATE_CHUNKS wie nützlich Ihre Vektorsuchergebnisse sind. Durch das frühzeitige Treffen der richtigen Designentscheidungen können kostspielige Überarbeitungen vermieden werden, wenn zur Einbettung von Generation und Speicher übergegangen wird.