In this lesson, you will learn how to shrink high-dimensional vector embeddings using Product Quantization (PQ) to achieve massive storage savings while preserving efficient similarity search.
The Problem of Scale
When dealing with Vector Embeddings (Lesson 21), high-dimensional vectors (e.g., 768 or 1024 dimensions) consume significant memory. If you have millions of vectors, storing them as raw 32-bit floats becomes a major bottleneck for both storage and speed in Approximate Nearest Neighbor Search (Lesson 24).
How Product Quantization Works
Instead of storing the entire vector, Product Quantization breaks it down:
- Decomposition: We split the original -dimensional vector into smaller sub-vectors (segments).
- Training: We use a clustering algorithm (like k-means) on each segment across the entire dataset to create a "codebook." This codebook contains a small set of representative centroids (e.g., 256 centroids) for each segment.
- Quantization: We replace each sub-vector with the ID of its nearest centroid.
- Compression: Since we only store the ID (an 8-bit integer) rather than all the floating-point numbers in the segment, the memory footprint drops drastically—often by a factor of 10 to 50.
Conceptual Illustration
Imagine a 128-dimensional vector. If we divide it into 8 sub-vectors of 16 dimensions each and represent each sub-vector with a single 8-bit index, the storage requirement shifts from 512 bytes (128 floats * 4 bytes) to just 8 bytes.
-- Conceptual logic of PQ-based search:
-- Instead of calculating raw Euclidean distance, we perform a
-- lookup in the pre-computed distance table (codebook).
SELECT
vector_id,
approx_distance(compressed_vector, query_vector) AS dist
FROM vector_index
ORDER BY dist ASC
LIMIT 10;
Maintaining Retrieval Quality
Because we use representative centroids, the distances calculated during search are "approximate." However, because these centroids are trained on your specific data distribution, the retrieval quality remains high. When performing a similarity search, we don't need to decompress the vectors; we calculate the distance between the query vector and the centroids in the codebook, significantly speeding up the Vector Similarity Search (Lesson 22).
Key Takeaway: Product Quantization drastically reduces vector storage footprints by decomposing vectors into sub-segments and replacing them with cluster-based ID codes, allowing for high-performance approximate search at scale.