Share via


De vectorgrootte verkleinen door kwantisatie, smalle gegevenstypen en opslagopties

In dit artikel wordt uitgelegd hoe u vector kwantisatie en andere technieken gebruikt voor het verminderen van de vectorgrootte in Azure AI Search. De zoekindex geeft vectorvelddefinities op, inclusief eigenschappen die worden gebruikt om smalle gegevenstypen op te geven of bepalen of een kopie van vectorinhoud wordt bewaard voor zoekresultaten. Kwantisatie wordt ook opgegeven in de index en toegewezen aan vectorveld via het vectorprofiel.

De meeste functies die in dit artikel worden beschreven, zijn algemeen beschikbaar in 2024-07-01 REST API en in de Azure SDK-pakketten die gericht zijn op die versie. Met de nieuwste preview-versie wordt ondersteuning toegevoegd voor afgekapte dimensies als u gebruikmaakt van tekst-insluiten-3-groot of tekst-insluiten-3-klein voor vectorisatie.

Een voorbeeld aan het einde van dit artikel toont de variaties in vectorgrootte voor elk van de benaderingen die in dit artikel worden beschreven.

De opties evalueren

Als eerste stap bekijkt u de drie benaderingen voor het verminderen van de hoeveelheid opslagruimte die door vectorvelden wordt gebruikt. Deze benaderingen sluiten elkaar niet wederzijds uit en kunnen worden gecombineerd voor maximale vermindering van vectorgrootte.

We raden ingebouwde kwantisatie aan, omdat het vectorgrootte in het geheugen en op schijf met minimale inspanning comprimeert, en dat meestal het meeste voordeel biedt in de meeste scenario's. Daarentegen vereisen smalle typen (met uitzondering van float16) een speciale inspanning om ze te maken en stored bespaart u op schijfopslag, wat niet zo duur is als geheugen.

Methode Waarom deze optie gebruiken?
Scalaire of binaire kwantisatie toevoegen Gebruik kwantisatie om systeemeigen float32- of float16-insluitingen te comprimeren naar int8 (scalaire) of Byte (binair). Deze optie vermindert de opslag in het geheugen en op de schijf zonder de prestaties van query's te verminderen. Kleinere gegevenstypen zoals int8 of Byte produceren vectorindexen die minder inhoudsrijk zijn dan die met grotere insluitingen. Om informatieverlies te compenseren, bevat ingebouwde compressie opties voor het verwerken van query's met behulp van niet-gecomprimeerde insluitingen en oversampling om relevantere resultaten te retourneren. Herrankering en oversampling zijn specifieke kenmerken van ingebouwde kwantisatie van float32- of float16-velden en kunnen niet worden gebruikt voor insluitingen die aangepaste kwantisatie ondergaan.
Dimensies afkappen voor modellen die geschikt zijn voor MRL voor tekst insluiten-3 (preview) Gebruik de optie om minder dimensies te gebruiken voor modellen met tekst insluiten-3. In Azure OpenAI zijn deze modellen opnieuw getraind op de Matryoshka Representation Learning-techniek (MRL) die meerdere vectorweergaven produceert op verschillende niveaus van compressie. Deze benadering produceert snellere zoekopdrachten en lagere opslagkosten, met minimaal verlies van semantische informatie. In Azure AI Search ondersteunt MRL scalaire en binaire kwantisatie. Wanneer u een van beide kwantisatiemethoden gebruikt, kunt u ook een truncateDimension eigenschap opgeven voor uw vectorvelden om de dimensionaliteit van tekst insluitingen te verminderen.
Kleinere primitieve gegevenstypen toewijzen aan vectorvelden Smalle gegevenstypen, zoals float16, int16, int8 en Byte (binair) verbruiken minder ruimte in het geheugen en op schijf, maar u moet een insluitmodel hebben dat vectoren uitvoert in een smalle gegevensindeling. U moet ook aangepaste kwantisatielogica hebben die kleine gegevens uitvoert. Een derde use case waarvoor minder inspanning is vereist, is het herschikken van systeemeigen float32-insluitingen die door de meeste modellen worden geproduceerd om te zweven16. Zie Binaire indexvectoren voor meer informatie over binaire vectoren.
Optionele opslag van ophaalbare vectoren elimineren Vectoren die in een queryantwoord worden geretourneerd, worden afzonderlijk opgeslagen van vectoren die worden gebruikt tijdens het uitvoeren van de query. Als u geen vectoren hoeft te retourneren, kunt u ophaalbare opslag uitschakelen, waardoor de totale schijfopslag per veld met maximaal 50 procent wordt verminderd.

Al deze opties worden gedefinieerd in een lege index. Als u een van deze pakketten wilt implementeren, gebruikt u Azure Portal, REST API's of een Azure SDK-pakket dat is gericht op die API-versie.

Nadat de index is gedefinieerd, kunt u documenten laden en indexeren als een afzonderlijke stap.

Optie 1: Kwantisatie configureren

Kwantisatie wordt aanbevolen voor het verminderen van vectorgrootte, omdat hiermee zowel geheugen- als schijfopslagvereisten voor float16- en float32-insluitingen worden verlaagd. Als u de effecten van een kleinere index wilt compenseren, kunt u oversampling en opnieuw rangschikken op niet-gecomprimeerde vectoren.

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 automatisch 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.

Volg deze stappen om ingebouwde kwantisatie te gebruiken:

  • Index maken of index maken of bijwerken gebruiken om vectorcompressie op te geven
  • Toevoegen vectorSearch.compressions aan een zoekindex
  • scalarQuantization Een of binaryQuantization configuratie toevoegen en deze 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
  • Desgewenst query's uitvoeren op gekwantiseerde gegevens met behulp van de parameter oversampling als u de standaardwaarde wilt overschrijven

Compressies toevoegen aan een zoekindex

In het volgende voorbeeld ziet u een gedeeltelijke indexdefinitie met een verzameling velden die een vectorveld en een vectorSearch.compressions sectie bevat.

Dit voorbeeld 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.

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": [ ],
        "algorithms": [ ],
        "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 op scalarQuantization of binaryQuantization

  • 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 als stored 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 de k in de query, met een vermenigvuldiger voor oversampling. Als de query bijvoorbeeld een k 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 meest k 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 op int8. Dit is het enige primitieve gegevenstype dat momenteel wordt ondersteund voor scalaire kwantisatie. Standaard is int8.

Het HNSW-algoritme toevoegen

Zorg ervoor dat uw index het HNSW-algoritme (Hierarchical Navigable Small Worlds) heeft. Ingebouwde kwantisatie wordt niet ondersteund met uitgebreide KNN.

"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.

  1. 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> ] 
    }
    
  2. 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",
    }
    
  3. Laad de index met indexeerfuncties voor het indexeren van pull-modellen of API's voor pushmodelindexering.

Scalaire kwantisatie vermindert de resolutie van elk getal binnen elke vector insluiten. 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.

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 BQ zeer goed presteert wanneer insluitingen rond nul zijn gecentreerd. De populairste insluitingsmodellen, zoals OpenAI, Cohere en Mistral, zijn gecentreerd rond nul.

MRL-compressie en afgekapte dimensies gebruiken (preview)

MRL multilevel compressie bespaart op vectoropslag en verbetert de reactietijden van query's voor vectorquery's op basis van tekst insluitingen. In Azure AI Search wordt MRL-ondersteuning alleen aangeboden in combinatie met een andere methode voor kwantisatie. Het gebruik van binaire kwantisatie met MRL biedt de maximale vermindering van de grootte van vectorindexen. Als u maximale opslagreductie wilt bereiken, gebruikt u binaire kwantisatie met MRL en stored stelt u deze in op onwaar.

Deze functie is beschikbaar als preview-versie. Het is beschikbaar in 2024-09-01-preview en in bèta-SDK-pakketten die gericht zijn op die preview-API-versie.

Vereisten

  • Tekst-insluiten-3-klein, tekst-insluiten-3-groot (alleen tekstinhoud).
  • Nieuwe vectorvelden van het type Edm.Half of Edm.Single (u kunt MRL-compressie niet toevoegen aan een bestaand veld).
  • HNSW-algoritme (geen ondersteuning voor uitgebreide KNN in deze preview).
  • Scalaire of binaire kwantisatie configureren. We raden binaire kwantisatie aan.

Ondersteunde clients

Er is momenteel geen ondersteuning voor Azure Portal of Azure AI Studio.

MRL-uitgebreide tekst insluiten gebruiken

MRL is een mogelijkheid van het textembedding-model. Volg deze stappen om te profiteren van deze mogelijkheden in Azure AI Search.

  1. Geef een vectorSearch.compressions object op in de indexdefinitie.
  2. Neem een kwantisatiemethode op, scalaire of binaire methode (aanbevolen).
  3. Neem de truncationDimension parameter op die is ingesteld op 512 of zo laag als 256 als u het model tekst-insluiten-3 gebruikt.
  4. Geef een vectorprofiel op dat het HNSW-algoritme en het vectorcompressieobject aangeeft.
  5. Wijs het vectorprofiel toe aan een vectorveld van het type Edm.Half of Edm.Single in de verzameling velden.

Er zijn geen wijzigingen aan de queryzijde voor het gebruik van een model voor het insluiten van tekst dat geschikt is voor MRL. Geïntegreerde vectorisatie, conversies van tekst-naar-query's tijdens query's, semantische classificatie en andere functies voor relevantieverbetering, zoals opnieuw rangschikken met oorspronkelijke vectoren en oversampling, worden niet beïnvloed door MRL-ondersteuning.

Indexering is langzamer vanwege de extra stappen, maar query's zijn sneller.

Voorbeeld van een vectorzoekconfiguratie die MRL ondersteunt

In het volgende voorbeeld ziet u een vectorzoekconfiguratie die voldoet aan de vereisten en aanbevelingen van MRL.

truncationDimension is een compressie-eigenschap. Hiermee geeft u op hoeveel de vectorgrafiek in het geheugen moet worden verkleind in combinatie met een compressiemethode zoals scalaire of binaire compressie. We raden 1024 of hoger aan voor truncationDimension met binaire kwantisatie. Een dimensionaliteit van minder dan 1000 verslechtert de kwaliteit van zoekresultaten bij het gebruik van MRL en binaire compressie.

{ 
  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "use-bq-with-mrl", 
        "compression": "use-mrl,use-bq", 
        "algorithm": "use-hnsw" 
      } 
    ],
    "algorithms": [
       {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
             "m": 4,
             "efConstruction": 400,
             "efSearch": 500,
             "metric": "cosine"
          }
       }
    ],
    "compressions": [ 
      { 
        "name": "use-mrl", 
        "kind": "truncation", 
        "rerankWithOriginalVectors": true, 
        "defaultOversampling": 10, 
        "truncationDimension": 1024
      }, 
      { 
        "name": "use-bq", 
        "kind": "binaryQuantization", 
        "rerankWithOriginalVectors": true,
        "defaultOversampling": 10
       } 
    ] 
  } 
} 

Hier volgt een voorbeeld van een volledig opgegeven vectorvelddefinitie die voldoet aan de vereisten voor MRL.

Zoals u weet, moeten vectorvelden van het type Edm.Half zijn of Edm.Single. Vectorvelden moeten een vectorSearchProfile eigenschap hebben waarmee de algoritme- en compressie-instellingen worden bepaald. Vectorvelden hebben een dimensions eigenschap die wordt gebruikt voor het opgeven van het aantal dimensies voor score- en classificatieresultaten. De waarde moet een dimensielimiet zijn van het model dat u gebruikt (1536 voor tekst-insluiten-3-klein).

{
    "name": "text_vector",
    "type": "Collection(Edm.Single)",
    "searchable": true,
    "filterable": false,
    "retrievable": false,
    "stored": false,
    "sortable": false,
    "facetable": false,
    "key": false,
    "indexAnalyzer": null,
    "searchAnalyzer": null,
    "analyzer": null,
    "normalizer": null,
    "dimensions": 1536,
    "vectorSearchProfile": "use-bq-with-mrl",
    "vectorEncoding": null,
    "synonymMaps": []
}

Optie 2: Smalle gegevenstypen toewijzen aan vectorvelden

Een eenvoudige manier om de vectorgrootte te verkleinen, is door insluitingen op te slaan in een kleinere gegevensindeling. De meeste insluitmodellen leveren 32-bits drijvendekommanummers op, maar als u uw vectoren kwantificeert of als uw insluitmodel dit systeemeigen ondersteunt, kan uitvoer float16, int16 of int8 zijn, wat aanzienlijk kleiner is dan float32. U kunt deze kleinere vectorgrootten aanpassen door een smal gegevenstype toe te wijzen aan een vectorveld. In de vectorindex verbruiken smalle gegevenstypen minder opslag.

  1. Bekijk de gegevenstypen die worden gebruikt voor vectorvelden voor aanbevolen gebruik:

    • Collection(Edm.Single) 32-bits drijvende komma (standaard)
    • Collection(Edm.Half) 16-bits drijvende komma (smal)
    • Collection(Edm.Int16) 16-bits ondertekende gehele getallen (smal)
    • Collection(Edm.SByte) 8-bits ondertekende gehele getallen (smal)
    • Collection(Edm.Byte) 8-bits geheel getal zonder teken (alleen toegestaan met verpakte binaire gegevenstypen)
  2. Bepaal in die lijst welk gegevenstype geldig is voor de uitvoer van het insluitmodel of voor vectoren die aangepaste kwantisatie ondergaan.

    De volgende tabel bevat koppelingen naar verschillende insluitingsmodellen die een smal gegevenstype (Collection(Edm.Half)) kunnen gebruiken zonder extra kwantisatie. U kunt casten van float32 naar float16 (met behulp van Collection(Edm.Half)) zonder extra werk.

    Model insluiten Systeemeigen uitvoer Dit type toewijzen in Azure AI Search
    tekst-insluiten-ada-002 Float32 Collection(Edm.Single) of Collection(Edm.Half)
    tekst-insluiten-3-klein Float32 Collection(Edm.Single) of Collection(Edm.Half)
    tekst-insluiten-3-groot Float32 Collection(Edm.Single) of Collection(Edm.Half)
    Cohere V3 insluitmodellen met int8 embedding_type Int8 Collection(Edm.SByte)

    Andere smalle gegevenstypen kunnen worden gebruikt als uw model insluitingen verzendt in de kleinere gegevensindeling of als u aangepaste kwantisatie hebt waarmee vectoren worden geconverteerd naar een kleinere indeling.

  3. Zorg ervoor dat u de compromissen van een smal gegevenstype begrijpt. Collection(Edm.Half) heeft minder informatie, wat resulteert in een lagere resolutie. Als uw gegevens homogeen of dicht zijn, kan het verlies van extra details of nuance leiden tot onaanvaardbare resultaten op het moment van de query, omdat er minder details zijn die kunnen worden gebruikt om nabijgelegen vectoren van elkaar te onderscheiden.

  4. Definieer en bouw de index. U kunt de Azure-portal gebruiken, Index maken of bijwerken (REST API) of een Azure SDK-pakket voor deze stap.

  5. Controleer de resultaten. Ervan uitgaande dat het vectorveld is gemarkeerd als ophaalbaar, gebruikt u Search Explorer of Search - POST om te controleren of de veldinhoud overeenkomt met het gegevenstype.

    Als u de grootte van de vectorindex wilt controleren, gebruikt u De Azure-portal of de GET Statistics (REST API).

Notitie

Het gegevenstype van het veld wordt gebruikt om de fysieke gegevensstructuur te maken. Als u later een gegevenstype wilt wijzigen, kunt u de index verwijderen en opnieuw opbouwen of een tweede veld maken met de nieuwe definitie.

Optie 3: Stel de stored eigenschap in om ophaalbare opslag te verwijderen

De stored eigenschap is een Booleaanse waarde op een vectorvelddefinitie die bepaalt of opslag wordt toegewezen voor inhoud van het vectorveld dat kan worden opgehaald. De stored eigenschap is standaard waar. Als u geen vectorinhoud in een queryantwoord nodig hebt, kunt u maximaal 50 procent opslag per veld opslaan door in te stellen stored op false.

Overwegingen voor het instellen stored op onwaar:

  • Omdat vectoren niet leesbaar zijn voor mensen, kunt u ze weglaten uit resultaten die in RAG-scenario's naar LLM's worden verzonden en uit resultaten die worden weergegeven op een zoekpagina. Bewaar ze echter als u vectoren gebruikt in een downstreamproces dat vectorinhoud verbruikt.

  • Als uw indexeringsstrategie echter gedeeltelijke documentupdates bevat, zoals 'samenvoegen' of 'mergeOrUpload' in een document, moet u er rekening mee houden dat bij het instellen stored op onwaar vectoren in het niet-opgeslagen veld tijdens de samenvoegbewerking worden weggelaten. Bij elke bewerking 'samenvoegen' of 'mergeOrUpload' moet u de vectorvelden opgeven naast andere niet-vectorvelden die u bijwerkt, of de vector wordt verwijderd.

Houd er rekening mee dat de stored toeschrijving niet ongedaan kan worden. Deze wordt ingesteld tijdens het maken van de index op vectorvelden wanneer fysieke gegevensstructuren worden gemaakt. Als u later de vectorinhoud wilt ophalen, moet u de index verwijderen en opnieuw opbouwen, of een nieuw veld maken en laden dat de nieuwe toeschrijving heeft.

In het volgende voorbeeld ziet u de veldenverzameling van een zoekindex. Ingesteld stored op onwaar om permanent ophaalbare opslag voor het vectorveld te verwijderen.

PUT https://[service-name].search.windows.net/indexes/demo-index?api-version=2024-07-01 
   Content-Type: application/json  
   api-key: [admin key]  
 
     { 
       "name": "demo-index", 
       "fields": [ 
         { 
           "name": "vectorContent", 
           "type": "Collection(Edm.Single)", 
           "retrievable": false, 
           "stored": false, 
           "dimensions": 1536, 
           "vectorSearchProfile": "vectorProfile" 
         } 
       ] 
     } 

Belangrijkste punten:

  • Alleen van toepassing op vectorvelden .

  • Beïnvloedt de opslag op schijf, niet het geheugen en heeft geen invloed op query's. Bij het uitvoeren van query's wordt een afzonderlijke vectorindex gebruikt die niet wordt beïnvloed door de stored eigenschap.

  • De stored eigenschap wordt ingesteld tijdens het maken van de index op vectorvelden en kan niet ongedaan worden gemaakt. Als u later inhoud wilt ophalen, moet u de index verwijderen en opnieuw opbouwen, of een nieuw veld maken en laden met de nieuwe toeschrijving.

  • De standaardwaarden zijn stored ingesteld op waar en retrievable ingesteld op onwaar. In een standaardconfiguratie wordt een ophaalbare kopie opgeslagen, maar deze wordt niet automatisch geretourneerd in de resultaten. Wanneer stored is waar, kunt retrievable u op elk gewenst moment schakelen tussen waar en onwaar zonder dat u een index opnieuw hoeft op te bouwen. Wanneer stored onwaar is, retrievable moet onwaar zijn en kan niet worden gewijzigd.

Voorbeeld: vectorcompressietechnieken

Hier volgt Python-code die kwantisatie, smalle gegevenstypen en het gebruik van de opgeslagen eigenschap laat zien: Codevoorbeeld: Vector kwantisatie en opslagopties met behulp van Python.

Met deze code maakt en vergelijkt u de grootte van de opslag- en vectorindex voor elke optie:

****************************************
Index Name: compressiontest-baseline
Storage Size: 21.3613MB
Vector Size: 4.8277MB
****************************************
Index Name: compressiontest-compression
Storage Size: 17.7604MB
Vector Size: 1.2242MB
****************************************
Index Name: compressiontest-narrow
Storage Size: 16.5567MB
Vector Size: 2.4254MB
****************************************
Index Name: compressiontest-no-stored
Storage Size: 10.9224MB
Vector Size: 4.8277MB
****************************************
Index Name: compressiontest-all-options
Storage Size: 4.9192MB
Vector Size: 1.2242MB

Zoek-API's rapporteren opslag en vectorgrootte op indexniveau, dus indexen en geen velden moeten de basis van vergelijking zijn. Gebruik de GET Index Statistics of een equivalente API in de Azure SDK's om vectorgrootte te verkrijgen.

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 of rerankering met oorspronkelijke vectoren.

Zoals u weet, heeft de definitie van vectorcompressie in de index instellingen voor rerankWithOriginalVectors en defaultOversampling om de effecten van een kleinere vectorindex te beperken. U kunt de standaardwaarden overschrijven om het gedrag op het moment van de query te variëren. Als dit bijvoorbeeld defaultOversampling 10.0 is, kunt u deze wijzigen in iets anders in de queryaanvraag.

U kunt de parameter oversampling instellen, zelfs als de index niet expliciet een rerankWithOriginalVectors of defaultOversampling definitie heeft. Op het moment van oversampling query's worden de indexinstellingen voor die query overschreven en wordt de query uitgevoerd met een effectieve rerankWithOriginalVectors als waar.

POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2024-07-01   
  Content-Type: application/json   
  api-key: [admin key]   

    {    
       "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.

Zie ook