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
vectorSearch
configuratie voor een index -
vectorSearch.compressions
toevoegen - 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
vectorSearch
configuratie 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.
Aanbevolen rescoring-technieken
Rescoring is een techniek die wordt gebruikt om informatieverlies te compenseren vanwege vectorcompressie. Er 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. Opties voor rescoring worden opgegeven in de index, maar u kunt rescoring op het moment van query aanroepen als de index deze ondersteunt.
API-versies bepalen welk rescoring-gedrag operationeel is voor uw code. De meest recente preview-API ondersteunt een nieuwe rescoring-benadering voor binaire kwantisatie. Indexen die zijn gemaakt met 2025-03-01-preview
, kunnen gebruikmaken van het nieuwe herscoringsgedrag.
API-versie | Type kwantisatie | eigenschappen van herscoren |
---|---|---|
2024-07-01 | Scalaire en binaire kwantisatie, op vectorindexen gebouwd met behulp van HNSW-grafieken (Hierarchical Navigable Small World) voor overeenkomsten zoeken | rerankWithOriginalVectors |
2024-11-01-voorbeschouwing | Scalaire en binaire kwantisatie in HNSW-grafieken |
rescoringOptions.enableRescoring en rescoreStorageMethod.preserveOriginals |
2025-03-01-voorbeeld | Binaire kwantisatie in HNSW-grafieken | Eerdere parametercombinaties worden nog steeds ondersteund, maar binaire kwantisatie kan nu opnieuw worden gescored als oorspronkelijke insluitingen worden verwijderd: rescoringOptions.enableRescoring en rescoringOptions.rescoreStorageMethod=discardOriginals |
Alleen HNSW-grafieken staan herbeoordeling (rescoring) toe. Uitputtende KNN biedt geen ondersteuning voor rescoring.
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 hergescoord met behulp van de niet-gecomprimeerde oorspronkelijke vectoren of het puntproduct van de binaire kwantisatie. 1. Na het herwaarderen worden de resultaten aangepast, zodat relevantere overeenkomsten als eerste verschijnen.
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=2024-07-01
{
"name": "my-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": [
{
"name": "use-scalar",
"kind": "scalarQuantization",
"scalarQuantizationParameters": {
"quantizedDataType": "int8"
},
"rerankWithOriginalVectors": true,
"defaultOversampling": 10
},
{
"name": "use-binary",
"kind": "binaryQuantization",
"rerankWithOriginalVectors": true,
"defaultOversampling": 10
}
]
}
}
Belangrijkste punten:
kind
moet zijn ingesteld opscalarQuantization
ofbinaryQuantization
.rerankWithOriginalVectors
gebruikt de oorspronkelijke niet-gecomprimeerde vectoren om overeenkomsten opnieuw te berekenen en de belangrijkste resultaten die door de eerste zoekquery worden geretourneerd, opnieuw te rangschikken. De niet-gecomprimeerde vectoren bestaan in de zoekindex, zelfs alsstored
deze onwaar is. Deze eigenschap is optioneel. De standaardwaarde is waar.defaultOversampling
beschouwt een bredere set potentiële resultaten om de vermindering van de informatie van kwantisatie te compenseren. De formule voor mogelijke resultaten bestaat uit dek
in de query, met een vermenigvuldiger voor oversampling. Als de query bijvoorbeeld eenk
van 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 meestk
gererankeerde resultaten worden geretourneerd. Deze eigenschap is optioneel. De standaardwaarde is 4.quantizedDataType
is 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
.
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.
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, zoals OpenAI, Cohere en Mistral, zijn gecentreerd rond nul.
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 o-parameterversampling
toevoegen om oversampling en rescoring aan te roepen tijdens het uitvoeren van query's.
Zoals u weet, heeft de definitie van vectorcompressie in de index instellingen voor rerankWithOriginalVectors
en defaultOversampling
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 parameter oversampling instellen, zelfs als de index niet expliciet een rerankWithOriginalVectors
of defaultOversampling
definitie heeft. Bij het uitvoeren van oversampling
wordt de indexinstellingen voor die query overschreven en wordt de query uitgevoerd met een effectieve rerankWithOriginalVectors
, ingesteld op waar.
POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2024-07-01
{
"vectorQueries": [
{
"kind": "vector",
"vector": [8, 2, 3, 4, 3, 5, 2, 1],
"fields": "myvector",
"oversampling": 12.0,
"k": 5
}
]
}
Belangrijkste punten:
Is van toepassing op vectorvelden die vectorcompressie ondergaan, volgens de toewijzing van het vectorprofiel.
Overschrijft de
defaultOversampling
waarde of introduceert oversampling tijdens query's, zelfs als de compressieconfiguratie van de index geen opties voor oversampling of herrankering heeft opgegeven.