Vektorok tömörítése skaláris vagy bináris kvantálással

Az Azure AI Keresés támogatja a skaláris és bináris kvantálást a vektorok méretének csökkentéséhez a keresési indexben. A kvantálás azért ajánlott, mert csökkenti a float16 és lebegőpontos 32 beágyazások memória- és lemeztárolását is. A veszteséges tömörítés hatásainak ellensúlyozásához hozzáadhat túlmintavételezést és újraértékelést.

A beépített kvantálás használatához kövesse az alábbi lépéseket:

  • Kezdje vektormezőkkel és egy konfigurációval vectorSearch egy index számára
  • vectorSearch.compressions hozzáadása
  • Adjon hozzá egy scalarQuantization vagy binaryQuantization konfigurációt, és adjon neki nevet
  • Választható tulajdonságok beállítása a veszteséges indexelés hatásainak mérsékléséhez
  • Hozzon létre egy új vektorprofilt, amely a nevesített konfigurációt használja
  • Új vektormező létrehozása az új vektorprofillal
  • Az index betöltése float32 vagy float16 adatokkal, amelyek számszerűsítve lesznek az indexelés során a megadott konfigurációval
  • Igény szerint kvantált adatokat kérdezhet le a túlméretezési paraméterrel. Ha a vektormező nem ad meg túlsamplinget a definíciójában, akkor a lekérdezési időpontban is hozzáadhatja.

Jótanács

Azure AI Keresés: A vektorköltségek csökkentése akár 92,5% új tömörítési technikákkal összehasonlítja a tömörítési stratégiákat, és elmagyarázza a tárolási és költségmegtakarításokat. Emellett metrikákat is tartalmaz a relevancia normalizált diszkontált összesített nyereségen (NDCG) alapuló méréséhez, amely azt mutatja, hogy a keresési minőség feláldozása nélkül tömörítheti az adatokat.

Előfeltételek

  • Vektormezők a keresési indexben, ahol a konfiguráció meghatározza, hogy a Hierarchikus Navigálható Kis Világok (HNSW) vagy a Kimerítő K-Legközelebbi Szomszéd (KNN) algoritmust, valamint egy új vektorprofilt tartalmaz vectorSearch.

Támogatott kvantálási technikák

A kvantálás lebegőpontos típusú vektorokat fogadó vektormezőkre vonatkozik. A cikkben szereplő példákban a mező adattípusa a bejövő float32-beágyazásokhoz tartozik Collection(Edm.Single) , de a float16 is támogatott. Ha a vektorok tömörítéssel konfigurált mezőre érkeznek, a motor kvantálást végez a vektoradatok memóriabeli és lemezbeli lábnyomának csökkentése érdekében.

Kétféle kvantálás támogatott:

  • A skaláris kvantálás szűkebb adattípusokba tömöríti az lebegőpontos értékeket. Az AI Search jelenleg az int8-at támogatja, amely 8 bites, így négyszeresére csökkenti a vektorindex méretét.

  • A bináris kvantálás lebegőpontos számokat alakít bináris bitekké, ez 1 bitet foglal el. Ez akár 28-szor kisebb vektorindex-méretet eredményez.

Feljegyzés

Bár az ingyenes szolgáltatások támogatják a kvantálást, a korlátozott tárterületkvóta miatt nem mutatják be a teljes tárterület-megtakarítást.

A skaláris kvantálás csökkenti az egyes számok felbontását az egyes vektorok beágyazásán belül. Az egyes számokat nem 16 bites vagy 32 bites lebegőpontos számként írja le, hanem egy 8 bites egész számot használ. Azonosítja a számtartományt (általában a 99. percentilis minimumot és a maximumot), és véges számú szintre vagy tárolóra osztja őket, és mindegyik tárolóhoz azonosítót rendel. Az 8 bites skaláris kvantálásban 2^8, vagyis 256 lehetséges rekesz található.

A vektor minden összetevője a legközelebbi reprezentatív értékre van leképezve ebben a kvantálási szintek készletében egy folyamat során, amely egy valós számot a legközelebbi egész számra kerekít. A kvantált 8 bites vektorban az azonosítószám az eredeti érték helyett áll. A kvantálás után az egyes vektorokat az összetevőket tartalmazó tárolók azonosítóinak tömbje jelöli. Ezek a kvantált vektorok sokkal kevesebb bit tárolását igénylik az eredeti vektorhoz képest, ami csökkenti a tárolási követelményeket és a memóriaigényt.

A bináris kvantálás úgy tömöríti a nagy dimenziójú vektorokat, hogy minden összetevőt egyetlen bitként jelöl, akár 0, akár 1. Ez a módszer jelentősen csökkenti a memóriaigényt, és felgyorsítja a vektor-összehasonlító műveleteket, amelyek kulcsfontosságúak a keresési és lekérési feladatokhoz. A teljesítménytesztek akár 96%-os csökkenést is mutatnak a vektorindex méretében.

Különösen hatékony az 1024-nél nagyobb méretű beágyazásokhoz. Kisebb méretek esetén javasoljuk, hogy tesztelje a bináris kvantálás minőségét, vagy próbálja inkább a skalárt. Azt is megállapítottuk, hogy a bináris kvantálás nagyon jól működik, ha a beágyazások nulla körül vannak. Az OpenAI, a Cohere és a Mistral által kínált legnépszerűbb beágyazási modellek középpontja nulla.

Támogatott újrabecslési technikák

A rescoring egy opcionális technika, amellyel a vektorkvantizálás miatti adatvesztés eltolható. A lekérdezés végrehajtása során túlmintavételezést alkalmaz a további vektorok kiválasztására, valamint kiegészítő információkat használ az elsődleges eredmények újbóli értékelésére, amelyeket a lekérdezés talált. A kiegészítő információk vagy tömörítetlen, eredeti, teljes pontosságú vektorok, vagy – amennyiben csak a bináris kvantálás lehetséges – lehetőség van arra, hogy a bináris kvantált dokumentumjelölteket ismételten pontozza a lekérdezésvektor alapján.

Csak a HNSW-gráfok engedélyezik az újraértékelést. A teljes körű KNN nem támogatja az újraszámlálást, mert definíció szerint az összes vektort a lekérdezés időpontjában ellenőrzi a rendszer, ami irrelevánssá teszi az újraszámlálást és a túlmintavételezést.

A rescoring beállítások az indexben vannak megadva, de a túlmintavételezési lekérdezési paraméter hozzáadásával lekérdezéskor is meghívhatja az újrasorolást.

Objektum Tulajdonságok
Index Adja hozzá RescoringOptions a vektortömörítések szakaszához. A cikkben szereplő példák a következőt használják RescoringOptions:
Query Adja hozzá oversamplingRawVectorQuery vagy VectorizableTextQuery definíciók nevében. A oversampling hozzáadása pontozás újbóli kiszámítását idézi elő lekérdezéskor.

Feljegyzés

Az újraskálázási paraméternevek az elmúlt néhány kiadás során megváltoztak. Ha régebbi előzetes verziójú API-t használ, tekintse át a kompatibilitástörő változások kezelésére vonatkozó frissítési utasításokat .

Az újraszámolás általános folyamata a következő:

  1. A vektorlekérdezés tömörített vektormezőkön fut.
  2. A vektoros lekérdezés visszaadja a túlmintavételezett k legjobb jelöltet.
  3. A túl mintavételezett k-jelölteket újraértékelik, akár a skalár kvantálás tömörítetlen eredeti vektorai alapján, akár a bináris kvantálás pontszorzata alapján.
  4. A rekcoring után a rendszer úgy módosítja az eredményeket, hogy a relevánsabb találatok jelenjenek meg először.

A skaláris kvantált vektorok túlméretezéséhez szükség van az eredeti teljes pontosságú vektorok rendelkezésre állására. A bináris kvantált vektorok túlméretezése teljes pontosságú vektorokat (preserveOriginals) vagy a bináris vektor (discardOriginals) pont szorzatát használhatja. Ha a vektoros tárolást optimalizálja, mindenképpen tartsa meg a teljes pontosságú vektorokat az indexben, ha újraszerkesztéshez szüksége van rájuk. További információ: Az opcionális vektorpéldányok eltávolítása a tárolóból.

"Tömörítések" hozzáadása keresési indexhez

Ez a szakasz az index egy vectorsSearch.compressions szakaszának megadását ismerteti. Az alábbi példa egy részleges indexdefiníciót mutat be egy vektormezőt tartalmazó mezőgyűjteménysel.

A tömörítési példa tartalmazza mind a scalarQuantization, mind a binaryQuantization. A szükséges számú tömörítési konfigurációt megadhatja, majd hozzárendelheti a kívánt konfigurációkat egy vektorprofilhoz.

vectorSearch.Compressions A szintaxis a stabil és az előzetes REST API-k között változik, az előzetes verzió további tárolási optimalizálási lehetőségeket ad hozzá, valamint a meglévő szintaxis módosításait. A visszamenőleges kompatibilitás belső API-leképezésekkel megmarad, de javasoljuk, hogy a 2024-11-01-es verziójú és a jövőbeli verziókra vonatkozó kódban alkalmazza az újabb tulajdonságokat.

A tömörítési beállítások konfigurálásához használja az Index létrehozása vagy az Index létrehozása vagy frissítése REST API-t.

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
      }
    ]
  },
}

Főbb pontok:

  • kind beállításnak kell lennie a következőre: scalarQuantization vagy binaryQuantization.

  • rescoringOptions olyan tulajdonságok gyűjteménye, amelyek a veszteséges tömörítés eltolására szolgálnak a lekérdezési eredményeknek a kvantálás előtt létező eredeti teljes pontosságú vektorok használatával történő ismételt rögzítése révén. Ahhoz, hogy az utóértékelés működjön, rendelkeznie kell a tartalmat biztosító vektorpéldánnyal. rescoreStorageMethod beállítása discardOriginals-re megakadályozza a enableRescoring és defaultOversampling használatát. A vektoros tárolásról további információt a nem kötelező vektorpéldányok kizárása a tárolóból című témakörben talál.

  • "rescoreStorageMethod": "preserveOriginals" A rescores vektorkeresési eredmények az eredeti teljes pontosságú vektorokkal a keresési pontszám és a rangsor módosításához vezethetnek, így elősegítve a rescoring lépés által meghatározott relevánsabb találatokat. Bináris kvantálás esetén a minőség csökkentése nélkül beállíthatja rescoreStorageMethod-t discardOriginals, hogy tovább csökkentse a tárolást. A bináris kvantáláshoz nincs szükség eredeti vektorokra.

  • defaultOversampling a lehetséges eredmények szélesebb halmazát veszi figyelembe, hogy ellensúlyozza a kvantálásból származó információk csökkenését. A lehetséges eredmények képlete a k lekérdezésben található, túlbélyegző szorzóval. Ha például a lekérdezés 5-öt ad meg k , és a mintavételezés 20, akkor a lekérdezés 100 dokumentumot kér le az újrarangsoroláshoz, az eredeti tömörítetlen vektor használatával erre a célra. A rendszer csak a legjobban k újrarangsorolt eredményeket adja vissza. Ez a tulajdonság opcionális. Az alapértelmezett érték 4.

  • quantizedDataType nem kötelező, és csak a skaláris kvantálásra vonatkozik. Ha hozzáadja, azt int8-ra kell beállítani. Jelenleg ez az egyetlen primitív adattípus, amelyet a skaláris kvantálás támogat. Az alapértelmezett szint a int8.

  • truncationDimension a text-embedding-3 modellek belső képességeire koppintva "különböző részletességű információkat kódol, és lehetővé teszi, hogy egyetlen beágyazás alkalmazkodjon az alsóbb rétegbeli feladatok számítási korlátaihoz" (lásd : Matryoshka Representation Learning). Csonkolt dimenziókat újraszámítási beállításokkal vagy anélkül is használhatja. A szolgáltatás Azure AI Keresésben való implementálásával kapcsolatos további információkért lásd : Truncate dimenziók MRL-tömörítéssel.

A vektorkeresési algoritmus hozzáadása

A HNSW- vagy eKNN-algoritmust a 2024-11-01-es előzetes verziójú REST API-ban vagy újabb verzióban használhatja. A stabil verzióhoz csak a HNSW-t használja. Ha újraindítást szeretne, a HNSW-t kell választania.

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

Új vektorprofil létrehozása és hozzárendelése

Új kvantálási konfiguráció használatához létre kell hoznia egy új vektorprofilt. A tömörített indexek memóriabeli létrehozásához új vektorprofil létrehozása szükséges. Az új profil a HNSW-t használja.

  1. Ugyanebben az indexdefinícióban hozzon létre egy új vektorprofilt, és adjon hozzá egy tömörítési tulajdonságot és egy algoritmust. Íme két profil, egy minden kvantálási megközelítéshez.

    "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. Vektorprofil hozzárendelése új vektormezőhöz. A mező adattípusa float32 vagy float16.

    Az Azure AI Keresésben a float32 és float16 típusok entitásadat-modell (EDM) megfelelői rendre Collection(Edm.Single) és Collection(Edm.Half).

    {
       "name": "vectorContent",
       "type": "Collection(Edm.Single)",
       "searchable": true,
       "retrievable": true,
       "dimensions": 1536,
       "vectorSearchProfile": "vector-profile-hnsw-scalar",
    }
    
  3. Töltse be az indexet indexelőkkel a lekéréses modellek indexeléséhez, vagy API-k használatával a leküldéses modellek indexelését.

Kvantált vektormező lekérdezése túlméretezés használatával

A tömörített vagy kvantált vektormezők lekérdezési szintaxisa megegyezik a nem tömörített vektormezőkével, kivéve, ha felül szeretné bírálni a túlméretezéshez és az ismételt javításhoz társított paramétereket. Hozzáadhat egy oversampling paramétert a túlmintavételezés és újraértékelés lekérdezési időpontban történő meghívásához.

A kéréshez használja a Keresési dokumentumok parancsot .

Ne feledje, hogy az index vektortömörítési definíciója a , enableRescoringés rescoreStorageMethod a veszteséges tömörítés hatásainak mérséklésére szolgáló beállításokkal defaultOversamplingrendelkezik. Az alapértelmezett értékeket felülbírálhatja, hogy a lekérdezési időpontban eltérő legyen a viselkedés. Ha például defaultOversampling 10.0, a lekérdezési kérelemben másra is módosíthatja.

A túlmintavételi paramétert akkor is beállíthatja, ha az index nem rendelkezik explicit módon a javítási lehetőségekkel vagy defaultOversampling definíciókkal. A lekérdezési időpont megadása oversampling felülbírálja a lekérdezés indexbeállításait, és a lekérdezést az igaz értékekkel enableRescoring hajtja végre.

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   
        }
  ]    
}

Főbb pontok:

  • A túlmintavétel a vektormezőkre vonatkozik, amelyek vektortömörítésen mennek keresztül a vektorprofil-hozzárendelés szerint.

  • A lekérdezésben a túlmintavételezés felülbírálja az defaultOversampling index értékét, vagy a lekérdezési időpontban meghívja a túlmintavételezést és az újrarangsorolást, még akkor is, ha az index tömörítési konfigurációja nem adott meg túlmintavételi vagy újrarangsorolási beállításokat.