Sdílet prostřednictvím


Kvantování produktů pro vektorové vyhledávání v Azure DocumentDB

Kvantování produktů (PQ) je výkonná technika v Azure DocumentDB, která výrazně komprimuje vysoce dimenzionální vkládání vektorů používaných při vektorovém vyhledávání. Tato komprese snižuje využití paměti a zrychluje hledání nejbližších sousedů a zlepšuje efektivitu velkých vektorových datových sad. I když PQ nabízí výhody pro rychlost a škálování, může to být na úkor přesnosti.

Výhody

  • Omezené úložiště: PQ výrazně snižuje úložiště potřebné pro vektorové indexy v porovnání s vektory s plnou přesností (float32), což vede k podstatným úsporám nákladů u velkých datových sad.
  • Rychlejší hledání: Práce s komprimovanými vektory umožňuje systému vypočítat vzdálenosti a najít potenciální nejbližší sousedy mnohem rychleji než pomocí vektorů s plnou přesností.
  • Vylepšená škálovatelnost: Nižší režie paměti umožňuje škálovat vektorové vyhledávání pro zpracování větších a vyšších dimenzionálních vkládání v rámci clusteru.

Jak to funguje

Kvantování produktu rozdělí prostor s vysokorozměrným vektorovým prostorem do několika podprostorů s nižšími rozměry. Každý podprostor se pak kvantuje nezávisle pomocí algoritmu clusteringu (obvykle k-means). Střed každého clusteru představuje všechny vektory v něm. Každý původní vektor je pak reprezentován krátkým kódem ID clusteru, ke které patří v každém podprostoru.

Použití kvantování produktu

Pokud chcete vytvořit vektorový index s kvantováním produktu, použijte createIndexes příkaz s určením cosmosSearchOptions"compression": "pq" a"kind" : "vector-diskann":

{
    "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
            }
        }
    ]
}
Obor Typ Description
compression řetězec Nastavte na hodnotu "pq", abyste povolili kvantizaci produktů.
pqCompressedDims integer Rozměry po kompresi PQ (musí být menší než původní dimenze). Automaticky se vypočítá, pokud je vynechán. Rozsah: 1-8000.
pqSampleSize integer Počet vzorových vektorů pro trénování centroidu PQ Vyšší hodnota znamená lepší kvalitu, ale delší dobu sestavení. Výchozí hodnota: 1000. Rozsah: 1000-1000000.

Poznámka:

Kvantování produktu je aktuálně podporováno pouze s typem indexu vector-diskann .

Poznámka:

Nejlepších výsledků dosáhnete tak, že po shromáždění dat vytvoříte index PQ. Pokud je kolekce prázdná, systém používá náhodné vektory pro počáteční centroidy. Pokud je počet dokumentů menší než pqSampleSize, trénovací data jsou doplněna náhodnými daty v rozmezí vašich stávajících vektorových dat.

Nastavení komprimovaných dimenzí

Pokud nezadáte pqCompressedDims, automaticky se určí na základě původního vektoru dimensions:

Původní rozsah dimenzí pqCompressedDims
[0 - 32) rozměry / 2
[32 - 64) 16
[64 - 128) 32
[128 - 512) 64
[512 - 1536) 96
nad 1536 128

Vytvoření indexu PQ

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

Vylepšení vyhledávání pomocí převzorkování

Komprese PQ může vést ke ztrátě přesnosti při výpočtech vzdálenosti. Aby se tento parametr snížil, Azure DocumentDB nabízí oversampling parametr v operátoru $search .

Faktor oversampling (float s minimálně 1) určuje, kolik kandidátských vektorů se má načíst z komprimovaného indexu než k (počet požadovaných výsledků). Tyto další kandidáty se používají k upřesnění hledání pomocí původních vektorů s plnou přesností a zlepšením konečné nejvyšší k přesnosti. Pokud například chcete získat prvních 10 (k=10) nejvíce podobných vektorů, osvědčeným postupem může být nastavit oversampling hodnotu jako 1,5 nebo 2,0. Systém by nejprve získal 15 kandidátů z indexu a pak by upřesnil prvních 10 pomocí dat s plnou přesností.

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

Tento fragment kódu ukazuje vektorové vyhledávání pomocí operátoru $search s kvantizací produktu. Používá queryVector jako vstup a prohledá pole v. Dotaz požaduje 10 nejpodobnějších dokumentů (k: 10), a to pomocí oversampling faktoru 2,0, který načte 20 kandidátů, což zlepšuje přesnost hledání přes komprimovaný index.

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

Poloviční přesnost vs. kvantování produktu

Azure DocumentDB používá dvě metody pro kompresi vektorových indexů: kvantizaci s poloviční přesností a kvantizaci produktů (PQ). Tyto dvě metody se liší způsoby, jakými dosahují komprese a jak ovlivňují vyhledávání.

Vlastnost Poloviční přesnost Kvantování produktu (PQ)
Metoda komprese Zmenšuje každou dimenzi vektoru na 16 bitů. Rozdělí vektorový prostor na podprostory a vyčíslí každou z nich.
Maximální rozměry Až 4 000 Až 16 000
Změna přesnosti Mírná ztráta vlivem nižší hloubky bitu. Potenciálně větší ztráta, konfigurovatelná prostřednictvím pqCompressedDims.
Rychlost vyhledávání Mírné zvýšení rychlosti kvůli menšímu indexu. Výrazné zvýšení rychlosti kvůli vysoce komprimovaným vektorům.
Čas sestavení indexu Relativně rychle. Může být delší v důsledku tréninku centroidu (pqSampleSize).
Podpora indexů HNSW, IVF. DiskANN.
Configuration Jednoduše povolte compression: "half". Další parametry: pqCompressedDims, pqSampleSize.
Použití převzorkování Pomáhá s drobnou ztrátou přesnosti. Nezbytné pro obnovení přesnosti z větší komprese.
Ideální případy použití Střední snížení paměti, zvětšení rozměrů a přijatelný kompromis v přesnosti. Velké datové sady, vysoké dimenze, rychlé vyhledávání s prioritou, přesnost spravovaná pomocí převzorkování

Důležité informace o kvantování produktů

  • Přesnost vs. Komprese: Vyšší komprese PQ vede k menším indexům a rychlejšímu vyhledávání, ale větší ztrátě přesnosti. Experimentujte s pqCompressedDims a oversampling, abyste našli správnou rovnováhu.
  • Čas sestavení indexu: Vytvoření indexu PQ může trvat déle kvůli procesu centroidového trénování ovlivněného pqSampleSize.
  • Distribuce dat: PQ funguje nejlépe, když vektorová data mají jasnou strukturu clusteru.

Další kroky