Freigeben über


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 das Embed v3-Binäreinbettungsmodell von Cohere oder eines anderen Einbettungsmodells oder Prozesses verwenden, das Vektoren als Binärbytes ausgibt.

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 eines Vektorfelds vom Typ Collection(Edm.Byte) und Zuweisen des Hamming-Abstands

In diesem Artikel wird davon ausgegangen, dass Sie mit dem Erstellen eines Indexes in Azure KI-Suche und Hinzufügen von Vektorfeldern 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 oder Azure-SDK hinzufügen.

Der binäre Datentyp ist in der Regel ab API Version 2024-07-01 verfügbar und wird 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 Komprimieren mit binärer oder skalarer Quantisierung und Zuweisen schmaler Datentypen.

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.