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.
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.Fügen Sie im Indexschema einen
vectorSearch
-Abschnitt hinzu, der Profile und Algorithmen angibt.Fügen Sie einen oder mehrere Vektorsuchalgorithmen hinzu, die die Ähnlichkeitsmetrik
hamming
aufweisen. 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.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 aufpackedBit
fest. - Setzen Sie
dimensions
auf1024
. 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.