Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Produktkvantisering (PQ) är en kraftfull teknik i Azure Cosmos DB for MongoDB vCore som avsevärt komprimerar högdimensionella vektorinbäddningar som används i vektorsökning. Den här komprimeringen minskar minnesanvändningen och påskyndar sökningarna efter närmaste grannen, vilket förbättrar effektiviteten för stora uppsättningar av vektordata. Även om PQ erbjuder fördelar för hastighet och skala, kan det komma på bekostnad av noggrannhet.
Fördelar
- Reducerad lagring: PQ sänker avsevärt den lagring som behövs för vektorindex jämfört med vektorer med full precision (float32), vilket leder till betydande kostnadsbesparingar för stora datamängder.
- Snabbare sökning: Genom att arbeta med komprimerade vektorer kan systemet beräkna avstånd och hitta potentiella närmaste grannar mycket snabbare än med fullprecisionsvektorer.
- Förbättrad skalbarhet: Med lägre minnesomkostnader kan skalningsvektorsökning hantera större och högre dimensionell inbäddning i klustret.
Så här fungerar det
Produktkvantisering delar upp det högdimensionella vektorutrymmet i flera lägre dimensionella underområden. Varje underområde kvantifieras sedan oberoende av varandra med hjälp av en klustringsalgoritm (vanligtvis k-means). Mitten av varje kluster representerar alla vektorer i det. Varje ursprunglig vektor representeras sedan av en kort kod för de kluster-ID:t som den tillhör i varje underområde.
Använda produktkvantisering
Om du vill skapa ett vektorindex med produktkvantisering använder du createIndexes kommandot för att specificera "compression": "pq" och "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
}
}
]
}
| Fält | Typ | Beskrivning |
|---|---|---|
compression |
snöre | Ställ in på "pq" för att aktivera produktkvantisering. |
pqCompressedDims |
heltal | Dimensioner efter PQ-komprimering (måste vara mindre än ursprungliga dimensioner). Beräknas automatiskt om det utelämnas. Intervall: 1-8000. |
pqSampleSize |
heltal | Antal exempelvektorer för PQ-centroidträning. Högre värde innebär bättre kvalitet men längre byggtid. Standard: 1 000. Intervall: 1000-100000. |
Anmärkning
Produktkvantisering stöds för närvarande endast med vector-diskann indextypen.
Anmärkning
För bästa resultat skapar du ett PQ-index när din samling har data. Om samlingen är tom använder systemet slumpmässiga vektorer för initiala centroider. Om antalet dokument är mindre än pqSampleSize, fylls träningsdata med slumpmässiga data inom intervallet för dina befintliga vektordata.
Så här anges komprimerade dimensioner
Om du inte anger pqCompressedDimsavgör den automatiskt baserat på den ursprungliga vektorn dimensions:
| Ursprungligt dimensionsintervall | pqCompressedDims |
|---|---|
| [0 - 32) | mått / 2 |
| [32 - 64) | 16 |
| [64 - 128) | 32 |
| [128 - 512) | 64 |
| [512 - 1536) | 96 |
| över 1536 | 128 |
Skapa ett PQ-index
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
}
}
]
} )
Förbättra sökningen med Översampling
PQ-komprimering kan leda till precisionsförlust i avståndsberäkningar. För att minska detta erbjuder Azure Cosmos DB for MongoDB (vCore) parametern oversampling i operatorn $search .
Faktorn oversampling (en flyttal med minst 1) anger hur många fler kandidatvektorer som ska hämtas från det komprimerade indexet än k (antalet önskade resultat). Dessa extra kandidater används för att förfina sökningen med hjälp av de ursprungliga vektorerna med full precision, vilket förbättrar den slutliga toppprecisionen k . För att till exempel få de 10 främsta (k=10) mest liknande vektorerna kan en bra metod vara att ange oversampling ett värde som 1,5 eller 2,0. Med "oversampling": 1.5skulle systemet först få 15 kandidater från indexet och sedan förfina de 10 främsta med hjälp av data med full precision.
{
"$search": {
"cosmosSearch": {
"vector": <vector_to_search>,
"path": "<path_to_property>",
"k": <num_results_to_return>,
"oversampling": <float_value>
},
}
}
Det här kodfragmentet visar en vektorsökning med operatorn $search med produktkvantisering. Det tar en queryVector som indata och söker i v fältet. Frågan begär de 10 mest liknande dokumenten (k: 10), med hjälp av en oversampling faktor 2.0, som hämtar 20 kandidater som förbättrar sökningens noggrannhet över det komprimerade indexet.
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 jämfört med produktkvantisering
Både halvprecision och produktkvantisering (PQ) komprimerar vektorindex i Azure Cosmos DB för MongoDB (vCore), men de skiljer sig åt i hur de uppnår komprimering och påverkar sökningen.
| Egenskap | Half-Precision | Produktkvantisering (PQ) |
|---|---|---|
| Komprimeringsmetod | Minskar varje vektordimension till 16 bitar. | Delar upp vektorutrymmet i underområden och kvantifierar var och en. |
| Maximalt antal dimensioner | Upp till 4 000 | Upp till 16 000 |
| Precisionsändring | Liten förlust på grund av lägre bitdjup. | Potentiellt större förlust, kan konfigureras via pqCompressedDims. |
| Sökhastighet | Måttlig hastighetsökning på grund av mindre index. | Betydande hastighetsökning på grund av mycket komprimerade vektorer. |
| Tid för indexgenerering | Relativt snabbt. | Kan vara längre på grund av centroid träning (pqSampleSize). |
| Indexstöd | HNSW, IVF. | DiskANN. |
| Konfiguration | Enkelt, aktivera compression: "half". |
Fler parametrar: pqCompressedDims, pqSampleSize. |
| Översamplingsanvändning | Hjälper till med mindre precisionsförlust. | Viktigt för att återställa noggrannhet från större komprimering. |
| Idealiska användningsfall | Måttlig minskning av minne, ökade dimensioner, acceptabel avvägning mellan noggrannhet. | Stora datamängder, höga dimensioner, snabb sökning prioriterad, precision som hanteras med översampling. |
Överväganden för produktkvantisering
-
Precision jämfört med komprimering: Högre PQ-komprimering leder till mindre index och snabbare sökning men större precisionsförlust. Experimentera med
pqCompressedDimsochoversamplingför att hitta rätt balans. -
Indextid: Det kan ta längre tid att skapa PQ-index på grund av centroidträningsprocessen, som påverkas av
pqSampleSize. - Datadistribution: PQ fungerar bäst när vektordata har en tydlig klusterstruktur.