Termékkvantálás vektorkereséshez az Azure DocumentDB-ben

A termékkvantálás (PQ) egy hatékony technika az Azure DocumentDB-ben, amely jelentősen tömöríti a vektorkeresésben használt nagy dimenziójú vektorbeágyazást. Ez a tömörítés csökkenti a memóriahasználatot, és felgyorsítja a legközelebbi szomszédkereséseket, és javítja a nagy vektoradatkészletek hatékonyságát. Bár a PQ a sebesség és a skálázás előnyeit kínálja, a pontosság rovására is járhat.

Benefits

  • Csökkentett tárterület: A PQ jelentősen csökkenti a vektorindexekhez szükséges tárterületet a teljes pontosságú (lebegőpontos32) vektorokhoz képest, ami jelentős költségmegtakarítást eredményez a nagy adathalmazok esetében.
  • Gyorsabb keresés: A tömörített vektorok használata lehetővé teszi a rendszer számára a távolságok kiszámítását és a potenciális legközelebbi szomszédok gyorsabb megtalálását, mint a teljes pontosságú vektorokkal.
  • Továbbfejlesztett méretezhetőség: Az alacsonyabb memóriaterhelés lehetővé teszi a vektorkeresés skálázását a fürtben lévő nagyobb és magasabb dimenziójú beágyazások kezeléséhez.

Hogyan működik?

A termékkvantizálás a nagy dimenziójú vektorteret több alsó dimenziós altérre osztja. Ezután az egyes altéreket egymástól függetlenül kvantáljuk egy fürtözési algoritmus használatával (általában k-közép). Az egyes fürtök középpontja a benne lévő összes vektort jelöli. Az egyes eredeti vektorokat ezután az egyes altérben található fürtazonosítók rövid kódja jelöli.

Termékkvantálás használata

Vektorindex termékkvantizálással történő létrehozásához használja a createIndexes parancsot a cosmosSearchOptions, "compression": "pq" és "kind" : "vector-diskann" megadásával:

{
    "createIndexes": "<collection_name>",
    "indexes": [
        {
            "name": "<index_name>",
            "key": {
                "<path_to_property>": "cosmosSearch"
            },
            "cosmosSearchOptions": {
                "kind": "vector-diskann",
                "similarity": "<string_value>", // "COS", "L2"
                "dimensions": <integer_value>, // Max 16,000
                "compression": "pq",
                "pqCompressedDims": <integer_value>, // Dimensions after compression (< original)
                "pqSampleSize": <integer_value>    // Samples for centroid generation
            }
        }
    ]
}
Field Típus Description
compression karakterlánc Termékkvantálás engedélyezésére "pq" van beállítva.
pqCompressedDims egész szám A PQ-tömörítés utáni dimenziók (az eredeti méretnél kisebbnek kell lenniük). Automatikusan kiszámítva, ha nincs megadva. Tartomány: 1-8000.
pqSampleSize egész szám PQ centroid betanítás mintavektorainak száma. A magasabb érték jobb minőséget, de hosszabb összeállítási időt jelent. Alapértelmezett: 1000. Tartomány: 1000-100000.

Megjegyzés:

A termékkvantálás jelenleg csak az vector-diskann indextípussal támogatott.

Megjegyzés:

A legjobb eredmény érdekében hozzon létre egy PQ-indexet, miután a gyűjtemény adataival rendelkezik. Ha a gyűjtemény üres, a rendszer véletlenszerű vektorokat használ a kezdeti centroidokhoz. Ha a dokumentumok száma kisebb, mint pqSampleSize, a betanítási adatokat véletlenszerű adatokkal töltjük fel a meglévő vektoradatok tartományán belül.

A tömörített dimenziók beállítása

Ha nem adja meg pqCompressedDims, az automatikusan az eredeti vektor dimensionsalapján határozza meg:

Eredeti dimenziótartomány pqCompressedDims
[0 - 32) méretek / 2
[32 - 64) 16
[64 - 128) 32
[128 - 512) 64
[512 - 1536) 96
1536 felett 128

PQ-index létrehozása

db.runCommand(
{
    "createIndexes": "your_vector_collection",
    "indexes": [
        {
            "key": { "v": "cosmosSearch" },
            "name": "diskann_pq_index",
            "cosmosSearchOptions": {
                "kind": "vector-diskann",
                "similarity": "COS",
                "dimensions": 1536,
                "compression": "pq",
                "pqCompressedDims": 96,
                "pqSampleSize": 2000
            }
        }
    ]
} )

A keresés javítása a túlmintavételezéssel

A PQ-tömörítés pontosságvesztéshez vezethet a távolságszámításokban. Az Azure DocumentDB a oversampling operátorban kínálja a $search paramétert ennek csökkentése érdekében.

A oversampling tényező (legalább 1 lebegőpontos szám) meghatározza, hogy hány jelölt vektort kell lekérni a tömörített indexből a k (a kívánt eredmények száma) meghaladásával. Ezek a további jelöltek az eredeti, teljes pontosságú vektorok használatával pontosítják a keresést, javítva a végső pontosságot k . Ha például az első 10 (k=10) legtöbb hasonló vektort szeretné megkapni, érdemes lehet egy oversampling vagy 2,0-s értékre állítani. Ezzel "oversampling": 1.5a rendszerrel először 15 jelöltet kapna az indexből, majd a teljes pontosságú adatokkal finomítaná a top 10-et.

{
    "$search": {
        "cosmosSearch": {
            "vector": <vector_to_search>,
            "path": "<path_to_property>",
            "k": <num_results_to_return>,
            "oversampling": <float_value> 
        },
    }
}

Ez a kódrészlet egy vektorkeresést mutat be a $search Product quantization operátor használatával. Bemenetként vesz queryVector, és megkeresi a v mezőt. A lekérdezés a 10 legtöbb hasonló dokumentumot (k: 102,0-s tényezővel oversampling ) kéri le, amely 20 jelöltet kér le, akik javítják a keresés pontosságát a tömörített indexen.

db.your_vector_collection.aggregate([
    {
        $search: {
            "cosmosSearch": {
                "vector": [0.1, 0.5, 0.9, ...],
                "path": "v",
                "k": 10,
                "oversampling": 2.0 // Retrieve 2 * 10 = 20 candidates for reranking
            },
            "returnStoredSource": true
        }
    }
])

Half-Precision és termékkonkvantizáció

A Félprecíziós és a termékkvantálási (PQ) eljárások egyaránt tömörítik a vektorindexeket az Azure DocumentDB-ben, de eltérnek abban, hogyan érik el a tömörítést, és milyen hatással vannak a keresésre.

Feature Félprecíziós Termékkvantálás (PQ)
Tömörítési módszer Az egyes vektordimenziókat 16 bitre csökkenti. A vektorteret altereire osztja, és mindegyiket kvantálja.
Maximális méretek Legfeljebb 4000 Legfeljebb 16 000
Pontosság módosítása Kisebb veszteség az alacsonyabb bitmélység miatt. Potenciálisan nagyobb veszteség, beállítható pqCompressedDims segítségével.
Keresési sebesség Kisebb index miatt mérsékelt sebességnövekedés. Jelentős sebességnövekedés a nagymértékben tömörített vektorok miatt.
Index felépítési ideje Viszonylag gyors. Lehet hosszabb is a centroid betanítás (pqSampleSize) miatt.
Indextámogatás HNSW, IVF. DiskANN.
Configuration Egyszerűen engedélyezze compression: "half". További paraméterek: pqCompressedDims, pqSampleSize.
Túlmintavételezés használata Segít a kisebb precízióvesztés kezelésében. Nélkülözhetetlen a nagyobb tömörítési pontosság helyreállításához.
Ideális használati esetek Mérsékelt memóriacsökkentés, megnövelt méretek, elfogadható pontosságú kompromisszumok. Nagy adathalmazok, nagy méretek, gyors keresés rangsorolása, túlméretezéssel felügyelt pontosság.

A termékkvantálás szempontjai

  • Pontosság és tömörítés: A nagyobb PQ-tömörítés kisebb indexekhez és gyorsabb kereséshez, de nagyobb pontosságvesztéshez vezet. Kísérletezzen pqCompressedDims-val és oversampling-vel, hogy megtalálja a megfelelő egyensúlyt.
  • Index építési ideje: A PQ index létrehozása hosszabb időt vehet igénybe a centroidok betanítási folyamata miatt, amelyet pqSampleSize befolyásol.
  • Adatterjesztés: A PQ akkor működik a legjobban, ha a vektoradatok tiszta fürtstruktúrával rendelkeznek.

Következő lépések