Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure AI Search ondersteunt scalaire en binaire kwantisatie voor het verminderen van de grootte van vectoren in een zoekindex. Kwantisatie wordt aanbevolen omdat het zowel geheugen- als schijfopslag voor float16- en float32-insluitingen vermindert. Als u de effecten van lossycompressie wilt compenseren, kunt u oversampling en rescoring toevoegen.
Volg deze stappen om ingebouwde kwantisatie te gebruiken:
- Beginnen met vectorvelden en een
vectorSearchconfiguratie voor een index -
vectorSearch.compressionstoevoegen - Een
scalarQuantization- ofbinaryQuantization-configuratie toevoegen en een naam geven - Optionele eigenschappen instellen om de gevolgen van lossy indexering te beperken
- Een nieuw vectorprofiel maken dat gebruikmaakt van de benoemde configuratie
- Een nieuw vectorveld maken met het nieuwe vectorprofiel
- De index laden met float32- of float16-gegevens die worden gekwantiseerd tijdens het indexeren met de configuratie die u hebt gedefinieerd
- Query's uitvoeren op gekwantiseerde gegevens met behulp van de parameter oversampling. Als in het vectorveld geen oversampling in de definitie wordt opgegeven, kunt u het toevoegen tijdens de query.
Aanbeveling
Azure AI Search: Kosten van vectoren verlagen tot 92,5% met nieuwe compressietechnieken vergelijkt compressiestrategieën en legt besparingen in opslag en kosten uit. Het bevat ook metrische gegevens voor het meten van relevantie op basis van genormaliseerde cumulatieve winst (NDCG), waarmee wordt gedemonstreerd dat u uw gegevens kunt comprimeren zonder de zoekkwaliteit op te offeren.
Vereisten
-
Vectorvelden in een zoekindex, met een
vectorSearchconfiguratie die het HNSW-algoritme (Hierarchical Navigable Small Worlds) of een volledig K-Nearest Neighbor-algoritme (KNN) en een nieuw vectorprofiel aangeeft.
Ondersteunde kwantisatietechnieken
Kwantisatie is van toepassing op vectorvelden die float-type vectoren ontvangen. In de voorbeelden in dit artikel is Collection(Edm.Single) het gegevenstype van het veld bedoeld voor binnenkomende float32-insluitingen, maar float16 wordt ook ondersteund. Wanneer de vectoren worden ontvangen op een veld met compressie geconfigureerd, voert de engine kwantisatie uit om de footprint van de vectorgegevens in het geheugen en op schijf te verminderen.
Er worden twee typen kwantisatie ondersteund:
Scalaire kwantisatie comprimeert floatwaarden in smallere gegevenstypen. AI Search ondersteunt momenteel int8, wat 8 bits is, waardoor de vectorindexgrootte viervoudig wordt verkleind.
Binaire kwantisatie converteert floats naar binaire bits, wat 1 bits in beslag neemt. Dit resulteert in maximaal 28 keer lagere vectorindexgrootte.
Notitie
Hoewel gratis services kwantisatie ondersteunen, tonen ze niet de volledige opslagbesparingen vanwege het beperkte opslagquotum.
Hoe scalaire kwantisatie werkt in Azure AI Search
Scalaire kwantisatie vermindert de resolutie van elk getal binnen elke vectorembedding. In plaats van elk getal te beschrijven als een 16-bits of 32-bits drijvendekommagetal, wordt een 8-bits geheel getal gebruikt. Het identificeert een bereik van getallen (meestal 99e percentiel minimum en maximum) en verdeelt ze in een eindig aantal niveaus of bin, waarbij elke bin een id wordt toegewezen. In 8-bits scalaire kwantisatie zijn er 2^8 of 256 mogelijke bins.
Elk onderdeel van de vector wordt toegewezen aan de dichtstbijzijnde representatieve waarde binnen deze set kwantisatieniveaus in een proces dat lijkt op het afronden van een reëel getal op het dichtstbijzijnde gehele getal. In de gekwantiseerde 8-bits vector staat het id-getal in plaats van de oorspronkelijke waarde. Na kwantisatie wordt elke vector vertegenwoordigd door een matrix met id's voor de bins waartoe de onderdelen behoren. Deze gekwantiseerde vectoren vereisen veel minder bits om op te slaan in vergelijking met de oorspronkelijke vector, waardoor de opslagvereisten en geheugenvoetafdruk worden verminderd.
Hoe binaire kwantisatie werkt in Azure AI Search
Binaire kwantisatie comprimeert hoogdimensionale vectoren door elk onderdeel weer te geven als één bit, ofwel 0 of 1. Deze methode vermindert de geheugenvoetafdruk drastisch en versnelt vectorvergelijkingsbewerkingen, die cruciaal zijn voor het zoeken en ophalen van taken. Benchmarktests tonen een vermindering van de grootte van de vectorindex tot 96%.
Het is met name effectief voor insluitingen met dimensies die groter zijn dan 1024. Voor kleinere dimensies raden we u aan om de kwaliteit van binaire kwantisatie te testen of in plaats daarvan scalaire waarden te proberen. Daarnaast hebben we vastgesteld dat binaire kwantisatie zeer goed presteert wanneer insluitingen rond nul zijn gecentreerd. De populairste insluitingsmodellen die worden aangeboden door OpenAI, Cohere en Mistral, zijn gecentreerd rond nul.
Ondersteunde rescoring-technieken
Rescoring is een optionele techniek die wordt gebruikt om informatieverlies te compenseren vanwege vector kwantisatie. Tijdens het uitvoeren van query's wordt gebruikgemaakt van oversampling om extra vectoren op te halen en aanvullende informatie om de eerste resultaten die door de query zijn gevonden, opnieuw te scoren. Aanvullende informatie bestaat uit ongecomprimeerde oorspronkelijke volledige precisievectoren - of, alleen voor binaire kwantisatie, hebt u de mogelijkheid om opnieuw te scoren met behulp van de binaire gekwantiseerde documentkandidaten tegen de queryvector.
Alleen HNSW-grafieken staan herbeoordeling (rescoring) toe. Uitgebreide KNN biedt geen ondersteuning voor rescoring, omdat alle vectoren per definitie worden gescand tijdens het uitvoeren van query's, waardoor rescoring en oversampling niet relevant zijn.
Opties voor rescoring worden opgegeven in de index, maar u kunt rescoring tijdens query's aanroepen door de queryparameter oversampling toe te voegen.
| Object | Eigenschappen |
|---|---|
| Index | Voeg RescoringOptions toe aan de sectie vectorcompressies. In de voorbeelden in dit artikel wordt gebruikgemaakt van RescoringOptions. |
| Query | Toevoegen oversampling aan RawVectorQuery of VectorizableTextQuery definities. Door oversampling toe te voegen, wordt herscoren geactiveerd op het moment van het uitvoeren van query's. |
Notitie
De namen van rescoring-parameters zijn in de afgelopen releases veranderd. Als u een oudere preview-API gebruikt, raadpleegt u de upgrade-instructies voor het oplossen van wijzigingen die fouten veroorzaken.
Het gegeneraliseerde proces voor het herscoren is:
- De vectorquery wordt uitgevoerd op gecomprimeerde vectorvelden.
- De vector query retourneert de top k oversampled kandidaten.
- Oversampled-k kandidaten worden herschikt met ofwel de niet-gecomprimeerde oorspronkelijke vectoren voor scalaire kwantisatie, of het dotproduct van binaire kwantisatie.
- Na het herwaarderen worden de resultaten aangepast, zodat relevantere overeenkomsten als eerste verschijnen.
Voor oversampling voor scalaire gekwantiseerde vectoren is de beschikbaarheid van de oorspronkelijke volledige precisievectoren vereist. Oversampling voor binaire gekwantiseerde vectoren kan volledige precisievectoren (preserveOriginals) of het dot-product van de binaire vector (discardOriginals) gebruiken. Als u de vectoropslag optimaliseert, zorg er dan voor dat u de volledige precisievectors in de index bewaart als u ze nodig hebt voor herbeoordeling. Zie Optionele vectorexemplaren uit de opslag verwijderen voor meer informatie.
Compressies toevoegen aan een zoekindex
In deze sectie wordt uitgelegd hoe u een vectorsSearch.compressions sectie in de index opgeeft. In het volgende voorbeeld ziet u een gedeeltelijke indexdefinitie met een veldenverzameling die een vectorveld bevat.
Het compressievoorbeeld bevat beide scalarQuantization of binaryQuantization. U kunt zo veel compressieconfiguraties opgeven als u nodig hebt en vervolgens de configuraties toewijzen die u aan een vectorprofiel wilt toewijzen.
De syntaxis voor vectorSearch.Compressions varieert tussen stabiele en preview-REST API's, waarbij de preview meer opties voor opslagoptimalisatie toevoegt, plus wijzigingen in bestaande syntaxis. Compatibiliteit met eerdere versies blijft behouden via interne API-toewijzingen, maar we raden u aan de nieuwere eigenschappen in code te gebruiken die gericht zijn op 2024-11-01-preview en toekomstige versies.
Gebruik de Index maken of Index maken of bijwerken REST API om compressie-instellingen te configureren.
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
}
]
},
}
Belangrijkste punten:
kindmoet zijn ingesteld opscalarQuantizationofbinaryQuantization.rescoringOptionszijn een verzameling eigenschappen die worden gebruikt om verliescompressie tegen te gaan door de queryresultaten opnieuw te beoordelen met behulp van de oorspronkelijke vectoren met volledige precisie die bestaan vóór kwantisatie. Voor het herscoren moet u de vectorinstance hebben die deze inhoud biedt. Het instellen vanrescoreStorageMethodopdiscardOriginalsvoorkomt dat uenableRescoringofdefaultOversamplingkunt gebruiken. Zie Optionele vectorexemplaren uit de opslag verwijderen voor meer informatie over vectoropslag."rescoreStorageMethod": "preserveOriginals"herberekent vectorzoekresultaten met de oorspronkelijke full-precision vectors, wat kan leiden tot aanpassingen in de zoekscore en rangschikkingen, waarbij de relevantere overeenkomende resultaten worden bevorderd, zoals bepaald door de herberekeningsstap. Voor binaire kwantisatie kunt urescoreStorageMethodinstellen opdiscardOriginalsom de opslag verder te verminderen, zonder de kwaliteit te verminderen. Oorspronkelijke vectoren zijn niet nodig voor binaire kwantisatie.defaultOversamplingbeschouwt een bredere set potentiële resultaten om de vermindering van de informatie van kwantisatie te compenseren. De formule voor mogelijke resultaten bestaat uit dekin de query, met een vermenigvuldiger voor oversampling. Als de query bijvoorbeeld eenkvan 5 opgeeft en oversampling 20 is, vraagt de query in feite 100 documenten aan voor gebruik bij het opnieuw rangschikken, waarbij de oorspronkelijke niet-gecomprimeerde vector voor dat doel wordt gebruikt. Alleen de meestkgererankeerde resultaten worden geretourneerd. Deze eigenschap is optioneel. De standaardwaarde is 4.quantizedDataTypeis optioneel en is alleen van toepassing op scalaire kwantisatie. Als u deze toevoegt, moet deze zijn ingesteld opint8. Dit is het enige primitieve gegevenstype dat momenteel wordt ondersteund voor scalaire kwantisatie. Standaard isint8.truncationDimensionMaakt gebruik van de inherente mogelijkheden van de tekst-embedding-3 modellen om informatie op verschillende niveaus van detail te coderen en maakt het mogelijk om één embedding aan te passen aan de computationele beperkingen van downstream taken (zie Matryoshka Representation Learning). U kunt verkorte dimensies gebruiken met of zonder herwaarderingsopties. Zie Afkappen van dimensies met MRL-compressie voor meer informatie over hoe deze functie wordt geïmplementeerd in Azure AI Search.
Het algoritme voor vectorzoekopdrachten toevoegen
U kunt het HNSW- of eKNN-algoritme gebruiken in de REST API voor 2024-11-01-preview of hoger. Gebruik alleen HNSW voor de stabiele versie. Als u opnieuw wilt scoren, moet u HNSW kiezen.
"vectorSearch": {
"profiles": [ ],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"compressions": [ <see previous section>]
}
Een nieuw vectorprofiel maken en toewijzen
Als u een nieuwe kwantisatieconfiguratie wilt gebruiken, moet u een nieuw vectorprofiel maken. Het maken van een nieuw vectorprofiel is nodig voor het bouwen van gecomprimeerde indexen in het geheugen. Uw nieuwe profiel maakt gebruik van HNSW.
Maak in dezelfde indexdefinitie een nieuw vectorprofiel en voeg een compressie-eigenschap en een algoritme toe. Hier volgen twee profielen, één voor elke kwantisatiebenadering.
"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> ] }Wijs een vectorprofiel toe aan een nieuw vectorveld. Het gegevenstype van het veld is float32 of float16.
In Azure AI Search zijn
Collection(Edm.Single)Collection(Edm.Half)respectievelijk de EDM-equivalenten (Entity Data Model) van float32- en float16-typen.{ "name": "vectorContent", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "dimensions": 1536, "vectorSearchProfile": "vector-profile-hnsw-scalar", }Laad de index met indexeerfuncties voor het indexeren van pull-modellen of API's voor pushmodelindexering.
Een query uitvoeren op een gekwantiseerd vectorveld met behulp van oversampling
De querysyntaxis voor een gecomprimeerd of gekwantiseerd vectorveld is hetzelfde als voor niet-gecomprimeerde vectorvelden, tenzij u parameters wilt overschrijven die zijn gekoppeld aan oversampling en rescoring. U kunt een oversampling parameter toevoegen om oversampling en rescoring op het moment van de query aan te roepen.
Gebruik Zoekdocumenten voor de aanvraag.
Zoals u weet, heeft de definitie van vectorcompressie in de index instellingen voor enableRescoringen rescoreStorageMethoddefaultOversampling om de effecten van lossycompressie te beperken. U kunt de standaardwaarden overschrijven om het gedrag op het moment van de query te variëren. Bijvoorbeeld, als defaultOversampling 10,0 is, kunt u het wijzigen naar iets anders in de query.
U kunt de oversamplingparameter instellen, zelfs als de index niet expliciet rescoringopties of een defaultOversampling-definitie heeft. Bij het uitvoeren van oversampling wordt de indexinstellingen voor die query overschreven en wordt de query uitgevoerd met een effectieve enableRescoring, ingesteld op waar.
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
}
]
}
Belangrijkste punten:
Oversampling is van toepassing op vectorvelden die vectorcompressie ondergaan, volgens de toewijzing in het vectorprofiel.
Met oversampling in de query wordt de
defaultOversamplingwaarde in de index overschreven of wordt oversampling en rescoring op het moment van query's aangeroepen, zelfs als de compressieconfiguratie van de index geen opties voor oversampling of herrankering heeft opgegeven.