Index-Binärvektoren für die Vektorsuche

Azure KI-Suche unterstützt einen gepackten binären Typ von Collection(Edm.Byte), um den Speicherbedarf von Vektordaten weiter zu reduzieren. Sie können diesen Datentyp für die Ausgabe von Modellen wie den binären Einbettungsmodellen Embed v3 von Cohere verwenden.

Es gibt drei Schritte zum Konfigurieren eines Indexes für binäre Vektoren:

  • Hinzufügen eines Vektorsuchalgorithmus, der den Hamming-Abstand für den binären Vektorvergleich angibt
  • Hinzufügen eines Vektorprofils, das auf den Algorithmus verweist
  • Hinzufügen des Vektorprofils zur binären Felddefinition

In diesem Artikel wird davon ausgegangen, dass Sie mit dem Erstellen eines Indexes in Azure KI-Suche vertraut sind. Verwendet die REST-APIs, um jeden Schritt zu veranschaulichen, aber Sie können auch ein binäres Feld zu einem Index im Azure-Portal hinzufügen.

Binäre Datentypen sind in der Regel ab API Version 2024-07-01 verfügbar und werden Feldern mithilfe der APIs zum Erstellen eines Indexes oder zum Erstellen oder Aktualisieren eines Indexes zugewiesen.

Tipp

Wenn Sie die Unterstützung des binären Vektors wegen des geringeren Speicherbedarfs untersuchen, sollten Sie auch die Features zur Vektorquantisierung und Speicherreduzierung in Azure KI-Suche in Betracht ziehen. Eingaben sind float32- oder float16-Einbettungen. Die Ausgabe besteht aus Daten in einem wesentlich kleineren Format. Weitere Informationen finden Sie unter Reduzieren der Vektorgröße durch Quantisierung, schmale Datentypen und Speicheroptionen.

Voraussetzungen

  • Binäre Vektoren mit 1 Bit pro Dimension, verpackt in uint8-Werten mit 8 Bit pro Wert. Diese können mithilfe von Modellen abgerufen werden, die direkt „verpackte binäre“ Vektoren generieren oder Vektoren während der Indizierung und Suche in binäre Vektoren clientseitig quantisieren.

Begrenzungen

  • Keine Azure-Portalunterstützung im Assistenten zum Importieren und Vektorisieren von Daten.
  • Keine Unterstützung für binäre Felder in der AML- Fertigkeit, die für die integrierte Vektorisierung von Modellen im Azure KI Studio-Modellkatalog verwendet wird.

Hinzufügen eines Vektorsuchalgorithmus und eines Vektorprofils

Vektorsuchalgorithmen werden verwendet, um die Abfragenavigationsstrukturen während der Indizierung zu erstellen. Bei binären Vektorfeldern werden Vektorvergleiche mithilfe der Hamming-Abstandsmetrik durchgeführt.

  1. Um einem Index ein binäres Feld hinzuzufügen, richten Sie eine Create or Update Index-Anforderung mithilfe der REST-API oder des Azure-Portals ein.

  2. Fügen Sie im Indexschema einen vectorSearch-Abschnitt hinzu, der Profile und Algorithmen angibt.

  3. Fügen Sie einen oder mehrere Vektorsuchalgorithmen hinzu, die die Ähnlichkeitsmetrik hammingaufweisen. Es ist üblich, Hierarchical Navigable Small Worlds (HNSW) zu verwenden, aber Sie können auch den Hamming-Abstand mit dem umfassenden K-Nearest-Neighbor-Algorithmus verwenden.

  4. Fügen Sie mindestens ein Vektorprofil hinzu, das den Algorithmus angibt.

Das folgende Beispiel zeigt eine einfache vectorSearch-Konfiguration:

  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "myHnswProfile", 
        "algorithm": "myHnsw", 
        "compression": null, 
        "vectorizer": null 
      } 
    ], 
    "algorithms": [ 
      { 
        "name": "myHnsw", 
        "kind": "hnsw", 
        "hnswParameters": { 
          "metric": "hamming" 
        } 
      }, 
      { 
        "name": "myExhaustiveKnn", 
        "kind": "exhaustiveKnn", 
        "exhaustiveKnnParameters": { 
          "metric": "hamming" 
        } 
      } 
    ] 
  }

Hinzufügen eines binären Felds zu einem Index

Die Felderauflistung eines Index muss ein Feld für den Dokumentschlüssel, Vektorfelder und alle anderen Felder enthalten, die Sie für Hybridsuchszenarien benötigen.

Binäre Felder haben den Typ Collection(Edm.Byte) und enthalten Einbettungen in gepackter Form. Wenn beispielsweise die ursprüngliche Einbettungsdimension 1024 ist, ist die gepackte binäre Vektorlänge ceiling(1024 / 8) = 128. Sie erhalten das gepackte Formular, indem Sie die Eigenschaft vectorEncoding für das Feld festlegen.

  • Fügen Sie der Feldauflistung ein Feld hinzu, und geben Sie ihm einen Namen.
  • Legen Sie den Datentyp auf Collection(Edm.Byte) fest.
  • Legen Sie vectorEncoding für eine binäre Codierung auf packedBit fest.
  • Setzen Sie dimensions auf 1024. Geben Sie die ursprüngliche (entpackte) Vektordimension an.
  • Legen Sie vectorSearchProfile auf ein Profil fest, das Sie im vorherigen Schritt definiert haben.
  • Machen Sie das Feld durchsuchbar.

Die folgende Felddefinition ist ein Beispiel für die Eigenschaften, die Sie festlegen sollten:

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]

Siehe auch

Codebeispiele im Repository azure-search-vector-samples veranschaulichen End-to-End-Workflows, die Schemadefinition, Vektorisierung, Indizierung und Abfragen enthalten.

Es gibt Beispielcode für Python, C#und JavaScript.