Komprese vektorů pomocí skalárního nebo binárního kvantování

Poznámka:

Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.

Azure AI Vyhledávač podporuje skalární a binární kvantování pro zmenšení velikosti vektorů v indexu vyhledávání. Kvantování se doporučuje, protože snižuje paměť i diskové úložiště pro vkládání float16 a float32. Chcete-li vyvážit účinky ztrátové komprese, můžete přidat převzorkování a opětovné hodnocení.

Pokud chcete použít předdefinované kvantování, postupujte takto:

  • Začínáme s vektorovými poli a vectorSearch konfigurací indexu
  • Přidat vectorSearch.compressions
  • Přidejte konfiguraci scalarQuantization nebo binaryQuantization a pojmenujte ji
  • Nastavte volitelné vlastnosti pro zmírnění dopadů ztrátového indexování
  • Vytvoření nového vektorového profilu, který používá pojmenovanou konfiguraci
  • Vytvoření nového vektorového pole s novým vektorovým profilem
  • Načtení indexu s daty float32 nebo float16, která jsou během indexování kvantována pomocí konfigurace, kterou jste definovali
  • Volitelně můžete dotazovat kvantovaná data pomocí parametru převzorkování. Pokud vektorové pole v definici nezadává převzorkování, můžete ho přidat v době dotazu.

Návod

Azure AI Vyhledávač: Snížení nákladů na vektory až do 92,5% pomocí nových technik komprese porovnává strategie komprese a vysvětluje úspory v úložišti a nákladech. Zahrnuje také metriky pro měření relevance na základě normalizovaného sníženého kumulativního zisku (NDCG), což ukazuje, že můžete komprimovat data bez obětování kvality vyhledávání.

Požadavky

  • Vektorová pole v indexu vyhledávání s vectorSearch konfigurací určující hierarchický navigovatelný malý svět (HNSW) nebo úplný algoritmus K-Nearest Neighbor (KNN) a nový vektorový profil.

Podporované techniky kvantování

Kvantování se vztahuje na vektorová pole, která přijímají vektory typu float. V příkladech v tomto článku se datový typ pole používá Collection(Edm.Single) pro příchozí vkládání float32, ale podporuje se také float16. Když jsou vektory přijaty v poli s nakonfigurovanou kompresí, modul provede kvantování, aby snížil nároky vektorových dat v paměti a na disku.

Podporují se dva typy kvantování:

  • Skalární kvantování komprimuje hodnoty float do užších datových typů. AI Search v současné době podporuje int8, což je 8 bitů, což snižuje velikost vektorového indexu čtyřikrát.

  • Binární kvantování převádí plovoucí hodnoty na binární bity, každý zabírá 1 bit. Výsledkem je až 28krát menší velikost indexu vektoru.

Poznámka:

Bezplatné služby sice podporují kvantování, ale nevykazují úplné úspory úložiště kvůli omezené kvótě úložiště.

Skalární kvantování snižuje rozlišení každého čísla v rámci vkládání vektorů. Místo toho, aby bylo každé číslo popsáno jako 16bitové nebo 32bitové číslo s plovoucí desetinnou čárkou, používá se 8bitové celé číslo. Identifikuje rozsah čísel (obvykle 99. percentil minimální a maximální) a rozdělí je na konečný počet úrovní nebo kategorií, přičemž každé kategorii přiřadí identifikátor. V 8-bitovém skalárním kvantování je 2^8, tedy 256, možných přihrádek.

Každá komponenta vektoru se mapuje na nejbližší reprezentativní hodnotu v rámci této sady úrovní kvantování v procesu, který je podobný zaokrouhlení reálného čísla na nejbližší celé číslo. V kvantizovaném 8bitovém vektoru představuje číslo identifikátoru místo původní hodnoty. Po kvantování je každý vektor reprezentován polem identifikátorů pro intervaly, do kterých jeho součásti patří. Tyto kvantované vektory vyžadují k uložení v porovnání s původním vektorem mnohem méně bitů, což snižuje požadavky na úložiště a nároky na paměť.

Binární kvantování komprimuje vysoce dimenzionální vektory tím, že jednotlivé komponenty představují jako jeden bit, a to buď 0, nebo 1. Tato metoda výrazně snižuje nároky na paměť a zrychluje operace porovnání vektorů, které jsou zásadní pro úlohy vyhledávání a načítání. Srovnávací testy ukazují až 96% snížení velikosti indexu vektoru.

Je zvlášť efektivní pro vkládání s rozměry většími než 1024. Pro menší dimenze doporučujeme otestovat kvalitu binární kvantování nebo místo toho vyzkoušet skalár. Kromě toho jsme zjistili, že binární kvantování funguje velmi dobře, když jsou embeddingy soustředěné kolem nuly. Nejoblíbenější modely vkládání, které nabízí OpenAI, Cohere a Mistral, jsou zaměřené na nulu.

Podporované techniky přehodnocování skóre

Rescoring je volitelná technika, která se používá ke kompenzaci ztráty informací kvůli vektorové kvantizaci. Během provádění dotazu využívá převzorkování k výběru dodatečných vektorů a doplňujících informací pro přeřazení počátečních výsledků dotazu. Doplňkové informace jsou buď nekomprimované původní vektory s plnou přesností, nebo, pokud jde pouze o binární kvantování, máte možnost přepočítat pomocí binárně kvantovaných kandidátů dokumentu vůči vektoru dotazu.

Pouze grafy HNSW umožňují „rescoring“. Vyčerpávající KNN nepodporuje přehodnocování, protože podle definice se všechny vektory prohledávají v době dotazu, což činí přehodnocování a převzorkování irelevantní.

Možnosti rescoringu jsou zadány v indexu, ale můžete vyvolat rescoring v době dotazu přidáním parametru převzorkujícího dotazu.

Object Vlastnosti
Index Přidejte RescoringOptions do oddílu komprese vektorů. Příklady v tomto článku používají RescoringOptions.
Query Přidejte oversampling na RawVectorQuery nebo VectorizableTextQuery definice. Přidání oversampling vyvolá rescoring v době dotazu.

Poznámka:

Názvy parametrů pro přehodnocení se v posledních několika verzích změnily. Pokud používáte starší rozhraní API ve verzi Preview, projděte si pokyny k upgradu, kde najdete informace o řešení zásadních změn.

Obecný proces pro přeohodnocení je:

  1. Vektorový dotaz je prováděn na komprimovaných vektorových polích.
  2. Vektorový dotaz vrátí nejlepších k přeosamplovaných kandidátů.
  3. Převzorkované kandidáty k se překódují pomocí nekomprimovaných původních vektorů pro skalární kvantování nebo tečkovaného součinu binárního kvantování.
  4. Po změně skóre se výsledky upraví tak, aby se relevantnější shody zobrazily nejdříve.

Převzorkování skalárních kvantovaných vektorů vyžaduje dostupnost původních vektorů úplné přesnosti. Převzorkování binárních kvantizovaných vektorů může používat buď vektory s plnou přesností (preserveOriginals) nebo skalární součin binárního vektoru (discardOriginals). Pokud optimalizujete vektorové úložiště, nezapomeňte v indexu zachovat úplné vektory přesnosti, pokud je potřebujete pro účely vyhodnocování. Další informace naleznete v tématu Odstranění volitelných vektorových instancí z úložiště.

Přidání "komprese" do indexu vyhledávání

Tato část vysvětluje, jak zadat vectorsSearch.compressions oddíl v indexu. Následující příklad ukazuje částečnou definici indexu s kolekcí polí, která obsahuje vektorové pole.

Příklad komprese zahrnuje obojí scalarQuantization nebo binaryQuantization. Můžete zadat tolik konfigurací komprese, kolik potřebujete, a pak přiřadit ty, které chcete k vektorovém profilu.

Syntaxe pro stabilní i preview rozhraní REST APIs se liší tím, že preview verze přidává další možnosti pro optimalizaci úložiště a mění stávající syntaxi. Zpětná kompatibilita je zachována prostřednictvím interních mapování rozhraní API, ale doporučujeme přijmout novější vlastnosti v kódu, který cílí na verzi 2024-11-01-Preview a budoucí verze.

Ke konfiguraci nastavení komprese použijte rozhraní REST API pro vytvoření nebo vytvoření nebo aktualizaci indexu.

POST https://[servicename].search.windows.net/indexes?api-version=2026-04-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
      }
    ]
  },
}

Klíčové body:

  • kind musí být nastavena na scalarQuantization hodnotu nebo binaryQuantization.

  • rescoringOptions je kolekce vlastností sloužící ke kompenzaci ztrátové komprese přeskórováním výsledků dotazu pomocí původních vektorů úplné přesnosti, které existují před kvantováním. Aby bylo hodnocení účinné, musíte mít vektorovou instanci, která tento obsah poskytuje. Nastavení rescoreStorageMethod na discardOriginals vám brání v používání enableRescoring nebo defaultOversampling. Další informace o vektorovém úložišti naleznete v tématu Odstranění volitelných vektorových instancí z úložiště.

  • "rescoreStorageMethod": "preserveOriginals" Přehodnocení výsledků vyhledávání vektorů pomocí původních vektorů s plnou přesností může vést k úpravám skóre vyhledávání a hodnocení, čímž se upřednostní relevantnější shody určené fází přehodnocení. Při binárním kvantování můžete nastavit rescoreStorageMethod na discardOriginals k dalšímu snížení úložiště, aniž byste snížili kvalitu. Pro binární kvantizaci nejsou potřeba původní vektory.

  • defaultOversampling zvažuje širší soubor potenciálních výsledků, aby kompenzoval snížení informací způsobené kvantizací. Vzorec pro potenciální výsledky se skládá z k v dotazu spolu s násobitelem převzorkování. Pokud například dotaz určuje k 5 a převzorkování je 20, dotaz efektivně požaduje 100 dokumentů pro použití při opětovném řazení pomocí původního nekomprimovaného vektoru pro tento účel. Vrátí se pouze nejlépe seřazené k výsledky. Tato vlastnost je nepovinná. Výchozí hodnota je 4.

  • quantizedDataType je nepovinný a vztahuje se pouze na skalární kvantování. Pokud to přidáte, musí být nastaveno na hodnotu int8. Toto je jediný primitivní datový typ podporovaný pro skalární kvantování v tuto chvíli. Výchozí hodnota je int8.

  • truncationDimension využívá inherentních schopností text-embedding-3 modelů k "kódování informací na různých úrovních detailu a umožňuje jedinému vkladu přizpůsobit se výpočetním omezením následných úkolů" (viz Učení reprezentace Matryoshka). Zkrácené rozměry můžete použít s možnostmi rescoringu nebo bez. Další informace o implementaci této funkce ve službě Azure AI Vyhledávač najdete v tématu Zkrácení dimenzí pomocí komprese MRL.

Přidání algoritmu vektorového vyhledávání

Algoritmus HNSW nebo eKNN můžete použít v rozhraní REST API verze 2024-11-01-Preview nebo novější. Pro stabilní verzi použijte pouze HNSW. Pokud chcete znovu bodovat, musíte zvolit HNSW.

"vectorSearch": {
    "profiles": [ ],
    "algorithms": [
      {
          "name": "use-hnsw",
          "kind": "hnsw",
          "hnswParameters": {
              "m": 4,
              "efConstruction": 400,
              "efSearch": 500,
              "metric": "cosine"
          }
      }
    ],
     "compressions": [ <see previous section>] 
}

Vytvoření a přiřazení nového vektorového profilu

Pokud chcete použít novou konfiguraci kvantování, musíte vytvořit nový vektorový profil. Vytvoření nového vektorového profilu je nezbytné pro vytváření komprimovaných indexů v paměti. Váš nový profil používá HNSW.

  1. Ve stejné definici indexu vytvořte nový vektorový profil a přidejte vlastnost komprese a algoritmus. Tady jsou dva profily, jeden pro každý přístup kvantování.

    "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. Přiřaďte vektorový profil novému vektorovém poli. Datový typ pole je buď float32, nebo float16.

    Ve službě Azure AI Vyhledávač jsou ekvivalenty modelu Entity Data Model (EDM) pro typy float32 a float16 Collection(Edm.Single) a Collection(Edm.Half) v uvedeném pořadí.

    {
       "name": "vectorContent",
       "type": "Collection(Edm.Single)",
       "searchable": true,
       "retrievable": true,
       "dimensions": 1536,
       "vectorSearchProfile": "vector-profile-hnsw-scalar",
    }
    
  3. Načtěte index pomocí indexerů pro tahový model indexování, nebo rozhraní API pro tlačný model indexování.

Dotazování na kvantované vektorové pole pomocí převzorkování

Syntaxe dotazu pro komprimované nebo kvantované vektorové pole je stejná jako u nekomprimovaných vektorových polí, pokud nechcete přepsat parametry přidružené k převzorkování a přehodnocení. Můžete přidat oversampling parametr pro vyvolání převzorkování a opětovného vyhodnocování v době dotazu.

Pro požadavek použijte vyhledávání v dokumentech.

Vzpomeňte si, že definice vektorové komprese v indexu má nastavení pro enableRescoring, rescoreStorageMethod a defaultOversampling k zmírnění účinků ztrátové komprese. Výchozí hodnoty můžete přepsat, aby se chování při dotazování lišilo. Pokud je například defaultOversampling 10,0, můžete ho změnit na něco jiného v požadavku dotazu.

Parametr převzorkování můžete nastavit i v případě, že index explicitně nemá možnosti defaultOversampling nebo definici rescoringu. Poskytnutí oversampling v době dotazu přepíše nastavení indexu pro tento dotaz a spustí dotaz s efektivním enableRescoring jako pravdivým.

POST https://[service-name].search.windows.net/indexes/demo-index/docs/search?api-version=2026-04-01

{    
    "vectorQueries": [
        {    
            "kind": "vector",    
            "vector": [8, 2, 3, 4, 3, 5, 2, 1],    
            "fields": "myvector",
            "oversampling": 12.0,
            "k": 5   
        }
  ]    
}

Klíčové body:

  • Převzorkování se vztahuje na vektorová pole, která procházejí kompresí vektorů podle přiřazení profilu vektoru.

  • Převzorkování v dotazu přepíše defaultOversampling hodnotu v indexu nebo vyvolá převzorkování a přehodnocení při provádění dotazu, i v případě, že konfigurace komprese indexu nezadá převzorkování nebo možnosti přehodnocení.