From cdbdb7d3d2875edb7a340b3b68f0dce040535924 Mon Sep 17 00:00:00 2001 From: sabrinaaquino Date: Tue, 17 Sep 2024 01:27:35 -0300 Subject: [PATCH] applying review to PQ section --- .../content/articles/what-is-quantization.md | 24 ++++++++++-------- .../subvectors.png | Bin 0 -> 23688 bytes 2 files changed, 14 insertions(+), 10 deletions(-) create mode 100644 qdrant-landing/static/articles_data/what-is-vector-quantization/subvectors.png diff --git a/qdrant-landing/content/articles/what-is-quantization.md b/qdrant-landing/content/articles/what-is-quantization.md index 78a0173f6..1dd855bed 100644 --- a/qdrant-landing/content/articles/what-is-quantization.md +++ b/qdrant-landing/content/articles/what-is-quantization.md @@ -101,7 +101,11 @@ These performance gains are significantly lower compared to Binary Quantization, [Product Quantization](https://qdrant.tech/documentation/guides/quantization/#product-quantization) is a method used to compress high-dimensional vectors by representing them with a smaller set of representative points. -The process begins by setting up a **codebook,** which represents regions in the data space where common patterns occur. +The process begins by splitting the original high-dimensional vectors into smaller **sub-vectors.** Each sub-vector represents a segment of the original vector, which can capture different characteristics of the data. + +![](/articles_data/what-is-vector-quantization/subvectors.png) + +For each sub-vector, a separate **codebook** is created, representing regions in the data space where common patterns occur. The codebook in Qdrant is trained automatically during the indexation process. As vectors are added to the collection, Qdrant uses your specified quantization settings in the `quantization_config` to build the codebook and quantize the vectors. Here’s how you might set it up: @@ -120,9 +124,9 @@ collection_config = { } ``` -Each region in the codebook is defined by a **centroid**, which serves as a representative point that summarizes the characteristics of that region. So, instead of treating every single data point as equally important, we can group similar points together and represent them with a single centroid that is more representative of the general characteristics of that group. +Each region in the codebook is defined by a **centroid**, which serves as a representative point that summarizes the characteristics of that region. So, instead of treating every single data point as equally important, we can group similar sub-vectors together and represent them with a single centroid that captures the general characteristics of that group. -The centroids used in Product Quantization are determined using the **[K-means clustering algorithm](https://en.wikipedia.org/wiki/K-means_clustering)**, which Qdrant applies to a representative sample of the dataset you want to quantize. +The centroids used in Product Quantization are determined using the **[K-means clustering algorithm](https://en.wikipedia.org/wiki/K-means_clustering)**. ![Codebook and Centroids example](/articles_data/what-is-vector-quantization/codebook.png) @@ -132,15 +136,13 @@ Qdrant always selects **K = 256** for the number of centroids in its implementat This makes the compression process efficient because each centroid index can be stored in a single byte. -After the codebook is created, the original high-dimensional vectors are split into smaller **sub-vectors.** - -Each sub-vector is then compared to every centroid in the codebook and mapped to the nearest centroid. +After the codebooks are created, the original high-dimensional vectors are quantized by mapping each sub-vector to the nearest centroid in its respective codebook. ![Vectors being mapped to their correspondent centroids example](/articles_data/what-is-vector-quantization/centroids-mapping.png) -The compressed vector stores the index of the closest centroid for each subvector. +The compressed vector stores the index of the closest centroid for each sub-vector. -Here’s how a 1024-dimensional vector originally taking up 4096 bytes is reduced to just 128 bytes by representing it as 128 indexes, each pointing to the centroid of a subvector: +Here’s how a 1024-dimensional vector originally taking up 4096 bytes is reduced to just 128 bytes by representing it as 128 indexes, each pointing to the centroid of a sub-vector: ![Product Quantization example](/articles_data/what-is-vector-quantization/product-quantization.png) @@ -159,9 +161,11 @@ search_payload = { } ``` -Product Quantization is generally more memory efficient than **Scalar Quantization**, being able to reduce the memory footprint by up to **64x** while still retaining much of the essential information. However, the computational overhead of mapping sub-vectors to centroids results in the **slowest performance** compared to the other methods. +Product Quantization can significantly reduce memory usage, potentially offering up to **64x** compression in certain configurations. However, it's important to note that this level of compression can lead to a noticeable drop in quality. -If your application requires high precision or real-time performance, this slower computation might be a significant factor to consider. For a more in-depth exploration of benchmarks, check out our dedicated article on [Product Quantization in Vector Search](https://qdrant.tech/articles/product-quantization/). +If your application needs high precision or real-time performance, Product Quantization may not be the best choice. But if **memory savings** are critical and some accuracy loss is acceptable, it could still be the ideal solution. + +For a more in-depth understanting of the benchmarks you can expect, check out our dedicated article on [Product Quantization in Vector Search](https://qdrant.tech/articles/product-quantization/). # 3. What is Binary Quantization? diff --git a/qdrant-landing/static/articles_data/what-is-vector-quantization/subvectors.png b/qdrant-landing/static/articles_data/what-is-vector-quantization/subvectors.png new file mode 100644 index 0000000000000000000000000000000000000000..213b40986a34eb69ba0a96394a92dcce0e059e19 GIT binary patch literal 23688 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 literal 0 HcmV?d00001