Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure KI-Suche unterstützt skalare und binäre Quantisierung, um die Größe von Vektoren in einem Suchindex zu verringern. Quantisierung wird empfohlen, da sowohl Arbeitsspeicher als auch Datenträgerspeicher für float16- und float32-Einbettungen reduziert werden. Um die Auswirkungen der verlustbehafteten Komprimierung zu verrechnen, können Sie Übersampling und Rescoring hinzufügen.
Um die integrierte Quantisierung zu verwenden, gehen Sie wie folgt vor:
- Beginnen Sie mit Vektorfeldern und einer
vectorSearchKonfiguration in einem Index - Fügen Sie
vectorSearch.compressionshinzu. - Fügen Sie eine
scalarQuantization- oderbinaryQuantization-Konfiguration hinzu, und benennen Sie sie. - Legen Sie optionale Eigenschaften fest, um die Auswirkungen einer verlustbehafteten Indizierung zu verringern.
- Erstellen Sie ein neues Vektorprofil, das die benannte Konfiguration verwendet.
- Erstellen Sie ein neues Vektorfeld mit dem neuen Vektorprofil.
- Laden Sie den Index mit float32- oder float16-Daten, die während der Indizierung mit der von Ihnen definierten Konfiguration quantisiert werden.
- Optional können Sie quantisierte Daten mithilfe des Oversampling-Parameters abfragen. Wenn das Vektorfeld in seiner Definition kein Oversampling angibt, können Sie es während der Abfrage hinzufügen.
Tipp
Azure KI-Suche: Senken von Vektorkosten um bis zu 92,5 % mit neuen Komprimierungstechniken vergleicht Komprimierungsstrategien und erläutert Einsparungen bei Speicher und Kosten. Sie enthält auch Metriken zur Messung der Relevanz basierend auf dem normalisierten reduzierten kumulativen Gewinn (NDCG), was zeigt, dass Sie Ihre Daten komprimieren können, ohne die Suchqualität zu beeinträchtigen.
Voraussetzungen
-
Vektorfelder in einem Suchindex, mit einer
vectorSearchKonfiguration, die entweder den hierarchischen Navigable Small Worlds (HNSW) oder erschöpfenden K-Nearest Neighbor (KNN)-Algorithmus und ein neues Vektorprofil angibt.
Unterstützte Quantisierungstechniken
Die Quantisierung gilt für Vektorfelder, die Vektoren vom Typ „float“ empfangen. In den Beispielen in diesem Artikel wird der Felddatentyp Collection(Edm.Single) für eingehende float32-Einbettungen verwendet, „float16“ wird jedoch ebenfalls unterstützt. Wenn die Vektoren in einem Feld mit konfigurierter Komprimierung empfangen werden, führt das Modul eine Quantisierung durch, um den Speicherbedarf der Vektordaten im Arbeitsspeicher und auf dem Datenträger zu verringern.
Zwei Quantisierungstypen werden unterstützt:
Die skalare Quantisierung komprimiert Float-Werte in schmalere Datentypen. KI-Suche unterstützt derzeit den Typ „int8“, der 8 Bit belegt und die Größe des Vektorindex vierfach verkleinert.
Die binäre Quantisierung konvertiert float-Typen in binäre Bits, die 1 Bit belegen. Dies führt zu einer bis zu 28-mal geringeren Vektorindexgröße.
Hinweis
Während kostenlose Dienste die Quantisierung unterstützen, zeigen sie nicht die vollständigen Speichereinsparungen aufgrund des eingeschränkten Speicherkontingents.
Funktionsweise der skalaren Quantisierung in Azure KI Search
Die skalare Quantisierung reduziert die Auflösung jeder Zahl innerhalb der Vektoreinbettung. Anstatt jede Zahl als 16-Bit- oder 32-Bit-Gleitkommazahl zu beschreiben, wird eine ganze 8-Bit-Zahl verwendet. Er identifiziert einen Zahlenbereich (in der Regel 99. Quantil Minimum und Maximum) und dividiert sie in eine begrenzte Anzahl von Ebenen oder Bins, wobei jedem Bin ein Bezeichner zugewiesen wird. In der 8-Bit-Skalar-Quantisierung gibt es 2^8 oder 256 mögliche Bins.
Jede Komponente des Vektors wird dem nächstgelegenen repräsentativen Wert innerhalb dieses Satzes von Quantisierungsebenen in einem Prozess zugeordnet, der dem Runden einer reellen Zahl auf die nächste ganze Zahl ähnelt. Im quantisierten 8-Bit-Vektor steht die Bezeichnernummer anstelle des ursprünglichen Werts. Nach der Quantisierung wird jeder Vektor durch ein Array von Bezeichnern für die Bins dargestellt, zu denen seine Komponenten gehören. Diese quantisierten Vektoren erfordern im Vergleich zum ursprünglichen Vektor viel weniger Bits zu speichern, wodurch die Speicheranforderungen und der Speicherbedarf reduziert werden.
Funktionsweise der binären Quantisierung in Azure KI-Suche
Die binäre Quantisierung komprimiert hochdimensionale Vektoren, indem jede Komponente als einzelnes Bit (0 oder 1) dargestellt wird. Diese Methode reduziert den Speicherbedarf erheblich und beschleunigt Vorgänge zum Vergleichen von Vektoren, die für Such- und Abrufaufgaben von entscheidender Bedeutung sind. Benchmarktests zeigen eine Verringerung der Vektorindexgröße um bis zu 96 %.
Die Methode ist besonders effektiv für Einbettungen mit Dimensionen, die größer als 1.024 sind. Für kleinere Dimensionen wird empfohlen, die Qualität der binären Quantisierung zu testen oder stattdessen die skalare Quantisierung auszuprobieren. Darüber hinaus haben wir festgestellt, dass die binäre Quantisierung sehr gut funktioniert, wenn Einbettungen um Null zentriert sind. Die beliebtesten Einbettungsmodelle von OpenAI, Cohere und Mistral werden um Null zentriert.
Unterstützte Neubewertungstechniken
Rescoring ist eine optionale Technik, die verwendet wird, um Informationsverluste aufgrund der Vektorquantisierung auszugleichen. Während der Abfrageausführung verwendet es Oversampling, um zusätzliche Vektoren aufzunehmen, und zusätzliche Informationen, um die anfänglichen Ergebnisse, die von der Abfrage gefunden wurden, neu zu erfassen. Zusätzliche Informationen sind entweder unkomprimierte originale Vollpräzisionsvektoren – oder ausschließlich für die binäre Quantisierung – Sie haben die Möglichkeit, mithilfe der binär quantisierten Dokumentkandidaten eine Neubewertung gegen den Abfragevektor vorzunehmen.
Nur HNSW-Graphen ermöglichen die Neubewertung. Exhaustiv-KNN unterstützt Rescoring nicht, da per Definition alle Vektoren zum Abfragezeitpunkt gescannt werden, was Rescoring und Oversampling irrelevant macht.
Neubewertungsoptionen werden im Index angegeben, aber Sie können Neubewertungen zur Abfragezeit aufrufen, indem Sie den Überquotierung-Abfrageparameter hinzufügen.
| Object | Eigenschaften |
|---|---|
| Index | Fügen Sie RescoringOptions dem Vektorkomprimierungsabschnitt hinzu. Die Beispiele in diesem Artikel verwenden RescoringOptions. |
| Query | Fügen Sie oversampling auf RawVectorQuery oder VectorizableTextQuery Definitionen hinzu. Das Hinzufügen von oversampling führt während der Abfragezeit zur Neukorrektur. |
Hinweis
Die Namen der Rescoring-Parameter wurden in den letzten Versionen geändert. Wenn Sie eine ältere Vorschau-API verwenden, lesen Sie die Aktualisierungsanweisungen zum Umgang mit Breaking Changes.
Der allgemeine Prozess für die Neupunktevergabe ist:
- Die Vektorabfrage wird über komprimierte Vektorfelder ausgeführt.
- Die Vektorabfrage gibt die wichtigsten k übersampelten Kandidaten zurück.
- Übersampelte k-Kandidaten werden entweder mit den nicht komprimierten Originalvektoren zur skalaren Quantisierung oder mit dem Skalarprodukt für die binäre Quantisierung neu bewertet.
- Nach der Korrektur werden die Ergebnisse so angepasst, dass zuerst relevantere Übereinstimmungen angezeigt werden.
Oversampling für skalare quantisierte Vektoren erfordert die Verfügbarkeit der ursprünglichen Vektoren mit voller Präzision. Übersampling für binäre quantisierte Vektoren kann entweder vollständige Genauigkeitsvektoren (preserveOriginals) oder das Punktprodukt des binären Vektors (discardOriginals) verwenden. Wenn Sie den Vektorspeicher optimieren, achten Sie darauf, die vollständigen Genauigkeitsvektoren im Index beizubehalten, wenn Sie sie für Korrekturzwecke benötigen. Weitere Informationen finden Sie unter Entfernen optionaler Vektorinstanzen aus dem Speicher.
Fügen Sie „compressions“ zu einem Suchindex hinzu
In diesem Abschnitt wird erläutert, wie Sie einen vectorsSearch.compressions Abschnitt im Index angeben. Das folgende Beispiel zeigt eine partielle Indexdefinition mit einer Feldauflistung, die ein Vektorfeld enthält.
Das Komprimierungsbeispiel enthält beide scalarQuantization oder binaryQuantization. Sie können beliebig viele Komprimierungskonfigurationen angeben und einem Vektorprofil dann die gewünschten Konfigurationen zuweisen.
Die Syntax für vectorSearch.Compressions variiert zwischen stabilen und Vorschau-REST-APIs, wobei die Vorschau zusätzliche Optionen für die Speicheroptimierung sowie Änderungen an der bestehenden Syntax hinzufügt. Die Abwärtskompatibilität wird über interne API-Zuordnungen beibehalten. Es wird jedoch empfohlen, die neueren Eigenschaften im Code zu übernehmen, der auf 2024-11-01-Preview und zukünftige Versionen abzielt.
Verwenden Sie die REST-API Index erstellen oder Index erstellen oder Index aktualisieren, um Komprimierungseinstellungen zu konfigurieren.
POST https://[servicename].search.windows.net/indexes?api-version=2025-09-01
{
"name": "my-index",
"description": "This is a description of this index",
"fields": [
{ "name": "Id", "type": "Edm.String", "key": true, "retrievable": true, "searchable": true, "filterable": true },
{ "name": "content", "type": "Edm.String", "retrievable": true, "searchable": true },
{ "name": "vectorContent", "type": "Collection(Edm.Single)", "retrievable": false, "searchable": true, "dimensions": 1536,"vectorSearchProfile": "vector-profile-1"},
],
"vectorSearch": {
"profiles": [
{
"name": "vector-profile-1",
"algorithm": "use-hnsw",
"compression": "use-scalar"
}
],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": { },
"exhaustiveKnnParameters": null
}
],
"compressions": [
{
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
},
"name": "mySQ8",
"kind": "scalarQuantization",
"rescoringOptions": {
"enableRescoring": true,
"defaultOversampling": 10,
"rescoreStorageMethod": "preserveOriginals"
},
"truncationDimension": 2
},
{
"name": "myBQC",
"kind": "binaryQuantization",
"rescoringOptions": {
"enableRescoring": true,
"defaultOversampling": 10,
"rescoreStorageMethod": "discardOriginals"
},
"truncationDimension": 2
}
]
},
}
Die wichtigsten Punkte:
kindmuss aufscalarQuantizationoderbinaryQuantizationfestgelegt werden.rescoringOptionsist eine Sammlung von Eigenschaften, die verwendet werden, um die verlustbehaftete Komprimierung auszugleichen, indem Abfrageergebnisse mithilfe der ursprünglichen Vollpräzisionsvektoren, die vor der Quantisierung vorhanden sind, neu bewertet werden. Damit die Korrektur funktioniert, müssen Sie über die Vektorinstanz verfügen, die diesen Inhalt bereitstellt. Das FestlegenrescoreStorageMethodaufdiscardOriginalsverhindert, dass SieenableRescoringoderdefaultOversamplingverwenden. Weitere Informationen zum Vektorspeicher finden Sie unter Entfernen optionaler Vektorinstanzen aus dem Speicher."rescoreStorageMethod": "preserveOriginals"bewertet die Vektorsuchergebnisse mit den ursprünglichen Vollpräzisionsvektoren neu, was zu Anpassungen der Suchbewertung und -rangfolge führen kann, wodurch die relevanteren Übereinstimmungen gefördert werden, die durch den Korrekturschritt bestimmt werden. Bei der binären Quantisierung können SierescoreStorageMethodaufdiscardOriginalssetzen, um den Speicherbedarf weiter zu reduzieren, ohne die Qualität zu beeinträchtigen. Ursprüngliche Vektoren werden für die binäre Quantisierung nicht benötigt.defaultOversamplingbetrachtet eine breitere Reihe potenzieller Ergebnisse, um die Verringerung der Informationen aus der Quantisierung auszugleichen. Die Formel für potenzielle Ergebnisse besteht aus derkAbfrage mit einem Überquotierungs- Multiplikator. Wenn die Abfrage beispielsweise einenkWert von 5 angibt und die Oversampling 20 ist, fordert die Abfrage effektiv 100 Dokumente für die Verwendung in Reranking an, wobei der ursprüngliche nicht komprimierte Vektor zu diesem Zweck verwendet wird. Es werden nur die top rerangiertenkErgebnisse zurückgegeben. Diese Eigenschaft ist optional. Der Standardwert ist 4.quantizedDataTypeist optional und gilt nur für die skalare Quantisierung. Wenn Sie diesen Typ hinzufügen, muss er aufint8festgelegt werden. Dies ist der einzige primitive Datentyp, der derzeit für die skalare Quantisierung unterstützt wird. Der Standardwert istint8.truncationDimensionnutzt die inhärenten Fähigkeiten der Text-Embedding-3-Modelle, um „Informationen mit unterschiedlicher Granularität zu kodieren und es einer einzelnen Einbettung zu ermöglichen, sich an die Rechenleistungsbeschränkungen nachgelagerter Aufgaben anzupassen“ (siehe Matryoshka Representation Learning). Sie können abgeschnittene Dimensionen mit oder ohne Korrekturoptionen verwenden. Weitere Informationen dazu, wie dieses Feature in Azure KI Search implementiert wird, finden Sie unter Abschneiden von Dimensionen mithilfe der MRL-Komprimierung.
Hinzufügen des Vektorsuchalgorithmus
Sie können den HNSW- oder eKNN-Algorithmus in der REST-API 2024-11-01-Preview oder höher verwenden. Verwenden Sie für die stabile Version nur HNSW. Wenn Sie Neubewertung wünschen, müssen Sie HNSW auswählen.
"vectorSearch": {
"profiles": [ ],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"compressions": [ <see previous section>]
}
Erstellen und Zuweisen eines neuen Vektorprofils
Um eine neue Quantisierungskonfiguration zu verwenden, müssen Sie ein neues Vektorprofil erstellen. Die Erstellung eines neuen Vektorprofils ist erforderlich, um komprimierte Indizes im Arbeitsspeicher zu erstellen. Das neue Profil verwendet HNSW.
Erstellen Sie in derselben Indexdefinition ein neues Vektorprofil, und fügen Sie eine Komprimierungseigenschaft sowie einen Algorithmus hinzu. Das folgende Beispiel zeigt zwei Profile, eins für jeden Quantisierungsansatz.
"vectorSearch": { "profiles": [ { "name": "vector-profile-hnsw-scalar", "compression": "use-scalar", "algorithm": "use-hnsw", "vectorizer": null }, { "name": "vector-profile-hnsw-binary", "compression": "use-binary", "algorithm": "use-hnsw", "vectorizer": null } ], "algorithms": [ <see previous section> ], "compressions": [ <see previous section> ] }Weisen Sie einem neuenVektorfeld ein Vektorprofil zu. Der Datentyp des Felds ist „float32“ oder „float16“.
Die Entity Data Model (EDM)-Entsprechungen der Typen „float32“ and „float16“ in Azure KI-Suche sind
Collection(Edm.Single)bzw.Collection(Edm.Half).{ "name": "vectorContent", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-profile-hnsw-scalar", }Laden Sie den Index mithilfe von Indexern für die Pullmodellindizierung oder APIs für die Pushmodellindizierung.
Abfragen eines quantisierten Vektorfelds mithilfe von Oversampling
Die Abfragesyntax für ein komprimiertes oder quantisiertes Vektorfeld ist identisch mit nicht komprimierten Vektorfeldern, es sei denn, Sie möchten Parameter außer Kraft setzen, die mit Übersampling und Rescoring verknüpft sind. Sie können einen oversampling Parameter hinzufügen, um das Oversampling und die Neubewertung zum Zeitpunkt der Abfrage aufzurufen.
Verwenden Sie "Dokumente durchsuchen" für die Anforderung.
Beachten Sie, dass die Vektorkomprimierungsdefinition im Index Einstellungen für enableRescoring, rescoreStorageMethod und defaultOversampling enthält, um die Auswirkungen von verlustbehafteter Komprimierung zu verringern. Sie können die Standardwerte überschreiben, um das Verhalten zur Abfragezeit zu ändern. Wenn defaultOversampling z. B. 10,0 ist, können Sie ihn in eine andere Abfrageanforderung ändern.
Sie können den Überquotierungs-Parameter auch dann festlegen, wenn der Index nicht explizit über Neubewertungsoptionen oder defaultOversampling Definition verfügt. Wenn Sie oversampling zur Abfragezeit angeben, werden die Indexeinstellungen für diese Abfrage außer Kraft gesetzt und die Abfrage mit einem effektiven enableRescoring Wert als "true" ausgeführt.
POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2025-09-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [8, 2, 3, 4, 3, 5, 2, 1],
"fields": "myvector",
"oversampling": 12.0,
"k": 5
}
]
}
Die wichtigsten Punkte:
Überquotierung gilt für Vektorfelder, die sich einer Vektorkomprimierung unterziehen, pro Vektorprofilzuweisung.
Übersampling in der Abfrage setzt den
defaultOversamplingWert im Index außer Kraft oder ruft Übersampling und erneutes Bewerten zur Abfragezeit auf, selbst wenn die Komprimierungskonfiguration des Indexes keine Optionen für Übersampling oder Reranking angegeben hat.