Freigeben über


Zuweisen von schmalen Datentypen zu Vektorfeldern in Azure KI-Suche

Eine einfache Möglichkeit zum Verringern der Vektorgröße ist das Speichern von Einbettungen in einem kleineren Datenformat. Die meisten Einbettungsmodelle geben 32-Bit-Gleitkommazahlen aus. Wenn Sie Ihre Vektoren jedoch quantisieren oder dies nativ von Ihrem Einbettungsmodell unterstützt wird, ist eine float16-, int16- oder int8-Ausgabe möglich, die deutlich kleiner ist als „float32“. Sie können diese kleineren Vektorgrößen verwenden, indem Sie einem Vektorfeld einen schmalen Datentyp zuweisen. Im Vektorindex belegen schmale Datentypen weniger Speicherplatz.

Datentypen werden Feldern in einer Indexdefinition zugewiesen. Sie können das Azure-Portal, die Such-REST-APIs oder ein Azure-SDK-Paket verwenden, das das Feature bereitstellt.

Voraussetzungen

  • Ein Einbettungsmodell, das kleine Datenformate ausgibt, z. B. text-embedding-3- oder Cohere V3-Einbettungsmodelle.

Unterstützte schmale Datentypen

  1. Informationen zur empfohlenen Verwendung finden Sie unter EDM-Datentypen für Vektorfelder:

    • Collection(Edm.Single) 32-Bit-Gleitkomma (Standard)
    • Collection(Edm.Half) 16-Bit-Gleitkommazahl (schmal)
    • Collection(Edm.Int16) ganze 16-Bit-Zahl mit Vorzeichen (schmal)
    • Collection(Edm.SByte) ganze 8-Bit-Zahl mit Vorzeichen (schmal)
    • Collection(Edm.Byte) ganze 8-Bit-Zahl ohne Vorzeichen (nur zulässig bei gepackten Binärdatentypen)
  2. Bestimmen Sie anhand dieser Liste, welcher Datentyp für die Ausgabe Ihres Einbettungsmodells oder für Vektoren mit benutzerdefinierter Quantisierung gültig ist.

    Die folgende Tabelle enthält Links zu mehreren Einbettungsmodellen, die einen schmalen Datentyp (Collection(Edm.Half)) ohne zusätzliche Quantisierung verwenden. Sie können „float32“ ohne zusätzlichen Aufwand in „float16“ umwandeln (mit Collection(Edm.Half)).

    Einbettungsmodell Native Ausgabe Diesen Typ in Azure KI-Suche zuweisen
    text-embedding-ada-002 Float32 Collection(Edm.Single) oder Collection(Edm.Half)
    text-embedding-3-small Float32 Collection(Edm.Single) oder Collection(Edm.Half)
    text-embedding-3-large Float32 Collection(Edm.Single) oder Collection(Edm.Half)
    Cohere V3 Einbettungsmodell mit int8 Einbettungstyp Int8 Collection(Edm.SByte)

    Andere schmale Datentypen können verwendet werden, wenn Ihr Modell Einbettungen im kleineren Datenformat ausgibt oder wenn Sie eine benutzerdefinierte Quantisierung verwenden, die Vektoren in ein kleineres Format konvertiert.

  3. Stellen Sie sicher, dass Sie die Kompromisse eines schmalen Datentyps verstehen. Collection(Edm.Half) hat weniger Informationen, was zu einer niedrigeren Auflösung führt. Wenn Ihre Daten homogen oder dicht sind, kann der Verlust zusätzlicher Details oder Nuancen zu inakzeptablen Ergebnissen zur Abfragezeit führen, da es weniger Details gibt, die verwendet werden können, um nahe gelegene Vektoren voneinander zu unterscheiden.

Zuweisen des Datentyps

Definieren und erstellen Sie einen Index. Sie können für diesen Schritt das Azure-Portal, die REST-API zum Erstellen oder Aktualisieren eines Index (Create or Update Index) oder ein Azure SDK-Paket verwenden.

Diese Felddefinition verwendet einen schmalen Datentyp, Collection(Edm.Half), der eine float32-Einbettung akzeptieren kann, die als float16-Wert gespeichert ist. Wie für alle Vektorfelder sind dimensions und vectorSearchProfile festgelegt. Die Besonderheiten von vectorSearchProfile sind für den Datentyp unwesentlich.

Es wird empfohlen, retrievable und stored auf „true“ festzulegen, wenn Sie die Werte des Felds visuell überprüfen möchten. Bei einer nachfolgenden Neuerstellung können Sie diese Eigenschaften in „false“ ändern, um die Speicheranforderungen zu reduzieren.

{
    "name": "nameEmbedding",
    "type": "Collection(Edm.Half)",
    "searchable": true,
    "filterable": false,
    "retrievable": true,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "synonymMaps": [],
    "dimensions": 1536,
    "vectorSearchProfile": "myHnswProfile"
}

Denken Sie daran, dass Vektorfelder nicht filterbar, sortierbar oder facettierbar sind. Sie können nicht als Schlüssel verwendet werden und nutzen keine Analysetools oder Synonymzuordnungen.

Arbeiten mit einem Produktionsindex

Datentypen werden bei der Erstellung in neuen Feldern zugewiesen. Sie können den Datentyp eines vorhandenen Felds nicht ändern, und Sie können ein Feld nicht entfernen, ohne den Index neu zu erstellen. Bei etablierten Indizes, die sich bereits in der Produktion befinden, wird dieses Problem meist umgangen, indem neue Felder mit den gewünschten Überarbeitungen erstellt und dann veraltete Felder während einer geplanten Indexneuerstellung entfernt werden.

Überprüfen der Ergebnisse

  1. Überprüfen Sie, ob der Feldinhalt dem Datentyp entspricht. Wenn das Vektorfeld als retrievable gekennzeichnet ist, verwenden Sie den Suchexplorer oder Suchen – POST, um den Vektorfeldinhalt zurückzugeben.

  2. Zum Überprüfen der Vektorindexgröße sehen Sie in der Spalte „Vektorindexgröße“ auf der Seite Suchverwaltung > Indizes im Azure-Portal nach, oder verwenden Sie GET Statistics (REST-API) oder eine entsprechende Azure-SDK-Methode, um die Größe abzurufen.

Hinweis

Der Datentyp des Felds wird verwendet, um die physische Datenstruktur zu erstellen. Wenn Sie später einen Datentyp ändern möchten, entfernen Sie das Feld, und erstellen Sie den Index neu, oder erstellen Sie ein zweites Feld mit der neuen Definition.