Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
pqCompressedDimsaoversampling, 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.