---
title: 產品量化:向量檢索的“壓縮演算法”與“加速引擎”
id: chain-cloud/product-quantization
description: 深度解析產品量化(PQ)的原理、實現、變體及工業實踐,覆蓋從碼書建置到非對稱距離計算的全鏈路,面向AI架構師與向量資料庫開發者。
---
# 產品量化
> **核心定義**:產品量化 (Product Quantization, PQ) 是一種針對高維向量的**有失真壓縮與高效近鄰搜尋技術**。它將高維空間分解為多個低維子空間的笛卡爾積,分別對每個子空間中的向量進行獨立量化(聚類),從而將無限的可能向量空間轉化為有限的碼字組合,實現了數十倍的資料壓縮和亞線性時間複雜度的近似最近鄰(ANN)搜尋。
> **技術定位**:作為現代大規模向量資料庫和 AI 檢索增強生成 (RAG) 系統的核心技術之一,PQ 解決了稠密向量索引在記憶體和計算上的可擴充套件性瓶頸,是大型模型行業低成本落地的關鍵基礎設施。本文件嚴格基於公開學術論文、商業公司技術部落格和第三方基準測試進行整理。
1. 核心定義與技術定位
產品量化本質上是一種 結構化的向量量化,其名稱中的“產品”(Product) 特指多個有限集合的笛卡爾積。原始向量被切分成若干子向量,每個子向量獨立對映到對應碼書中的一個碼字,最終用一連串短整型索引來表示整個向量。這一過程將連續的高維空間離散化為大量但可數的“積編碼”,從而實現了極高的壓縮比——通常可將 32 位浮點數向量壓縮至原本大小的 3% 到 10%,且仍能保持令人滿意的搜尋精度。
該技術由 Hervé Jégou 等人在 2011 年的論文《Product Quantization for Nearest Neighbor Search》中首次系統提出,用於解決大規模影像檢索中記憶體與計算的雙重瓶頸。隨後 Facebook AI Research (FAIR) 將其整合到 Faiss 庫,並進一步發展為 IVF-PQ、OPQ 等工業級方案,支撐了數十億級影像、文本和影片的即時相似搜尋。在現代 RAG 管線中,PQ 使得將海量外部知識庫壓縮排單臺伺服器的記憶體成為可能,直接降低了 LLM 應用的基礎設施成本。
產品量化的關鍵思想是 “分治 + 量化”:通過維度切分把高維空間拆解為多個低維子空間,在每個子空間內執行 K-Means 聚類得到代表向量(碼字),所有可能的碼字組合數量等於各碼書大小的乘積,這一乘積即為“產品”一詞的由來。例如,將 128 維向量切分為 16 段,每段碼書包含 256 個碼字,則理論上可以表示 256^16 ≈ 3.4×10^38 種不同的組合,遠遠超過實際資料集的規模,從而保證了量化的精細度。
2. ⚡ 3 秒看懂
一句話解釋:產品量化 = 空間切割 + 獨立編碼。它將一個高維向量切成幾段,在每一段裡“找最像的那個模板”,最終用一串模板的編號來表示原始向量。
解決的核心問題:
- 記憶體爆炸:十億級別的向量資料,原樣儲存需要 TB 級記憶體,PQ 可將記憶體佔用壓縮至 1/10 到 1/30。
- 計算緩慢:暴力全量掃庫延遲不可接受,PQ 通過基於查詢表的距離計算,將搜尋速度提升一個數量級以上。
一句話類比:就像用(省份/城市/街道)三級行政編碼來近似表示一個具體的經緯度座標,雖損失了精度,但極大節省了儲存且能快速定位。
3. 📖 3 分鐘產業解釋
3.1 概念拆解
| 術語 | 全稱/解釋 | 產業含義 |
|---|---|---|
| 產品量化 (PQ) | Product Quantization | 一種向量量化方法的變體,核心在於“積”(Product),即笛卡爾積操作。 |
| 子空間 (Subspace) | 原始向量被均勻切分成的低維片段 | 決定了量化的粒度。子空間越多,維度越低,編碼效率越高,但精度可能下降。 |
| 碼書 (Codebook) | 每個子空間中,通過 K-Means 等聚類演算法得到的一組“代表向量”(碼字)集合 | 碼書的大小決定了壓縮率和精度。例如,256 個碼字只需 8 bits 即可索引。 |
| 編碼 (Encoding) | 原始向量在每個子空間中,被替換為距離最近的碼字索引 (ID) | 一個高維向量最終被表示為一串短整形 ID,實現了有失真壓縮。 |
3.2 產業價值
原始向量資料集 (100億 × 768維 × 4位元組 ≈ 3 TB)
│
▼ 應用產品量化 (M=48, K=256)
│
編碼後資料庫 (100億 × 48位元組 ≈ 48 GB)
壓縮率: ~60倍
記憶體成本: 從需要 10+ 臺伺服器降至單臺大記憶體伺服器可承載
資料口徑:典型配置下的理論估算值,實際因資料集和引數而異。
三個關鍵產業收益:
- 成本重構:使億級至十億級向量檢索的記憶體成本降至商業可接受水平,記憶體佔用為原始向量的 3%-30%(學術基準測試,2011-2023)。
- 效能突破:距離計算從遍歷向量轉為查距離表,在記憶體頻寬瓶頸場景下,檢索延遲降低 70%-90%(技術部落格資料,2022-2024)。
- 全鏈路協同:作為“雲端邊端”協同架構中的資料層,使模型記住的海量知識庫可以載入邊緣裝置(如手機相簿、端側 Knowledge Base)。
3.3 典型應用場景
- 大規模影像/人臉檢索:安防、社交平台,百億級圖片庫毫秒級檢索(工業界成熟應用,如 Facebook AI Research, 2011)。
- 十億級語義搜尋:搜尋引擎、電商、推薦系統,海量文本、商品向量化後的即時召回。
- RAG (檢索增強生成):為大語言模型(LLM)提供外部記憶,支撐私有知識庫、企業文件的精確問答。
4. 🔬 技術原理詳解
4.1 向量空間分解與碼書訓練
給定一個高維資料集 $mathcal(X) = {x_1, x_2, …, x_N} \subset mathbb(R)^D$,產品量化的第一步是將每條向量 $x$ 切分成 $M$ 個長度相等的子向量: $$x = [x^{(1)}, x^{(2)}, \dots, x^{(M)}], \quad x^{(m)} \in mathbb(R)^{D/M}$$ 假設 $D$ 能被 $M$ 整除。隨後,對每個子空間 $m$ 中的子向量集合 ${x_1^{(m)}, \dots, x_N^{(m)}}$ 獨立進行 K-Means 聚類,得到 $K$ 個簇中心(碼字),構成第 $m$ 個碼書 $mathbf(C)^{(m)} = {c_1^{(m)}, c_2^{(m)}, \dots, c_K^{(m)}}$。訓練過程的損失函式為: $$\min_{mathbf(C)^{(1)}, \dots, mathbf(C)^{(M)}} \sum_{m=1}^{M} \sum_{x \in mathcal(X)} |x^{(m)} - q^{(m)}(x^{(m)})|^2$$ 其中 $q^{(m)}(\cdot)$ 是將子向量對映到最近碼字索引的函式。
這一過程將每條向量 $x$ 編碼為一個 $M$ 元組 $(i_1, i_2, \dots, i_M)$,其中 $i_m \in {1, \dots, K}$,儲存只需 $M \cdot \log_2 K$ 位元。
4.2 距離計算與非對稱距離計算 (ADC)
搜尋時,給定查詢向量 $y$,需要計算其與資料庫中每個編碼向量之間的距離。原始向量的精確距離 $|y - x|^2$ 被近似為: $$|y - x|^2 \approx \sum_{m=1}^{M} |y^{(m)} - c_{i_m}^{(m)}|^2$$ 這一計算可以高效執行:預先計算出查詢向量在每個子空間內與所有 $K$ 個碼字的距離,得到一個 $M \times K$ 的查詢表。此後,計算任意編碼向量與 $y$ 的距離只需從表中取出對應的距離值並累加,時間複雜度為 $O(M)$,完全避免了 $O(D)$ 的浮點運算。這種方法稱為 非對稱距離計算 (Asymmetric Distance Computation, ADC),因為距離是在未量化的查詢子向量和量化的資料庫碼字之間計算,克服了對稱版本(SDC)中查詢也被量化帶來的額外精度損失。
4.3 搜尋流程與倒排索引加速
單純窮舉所有編碼仍需要 $O(N \cdot M)$ 時間,在十億規模下依然昂貴。工業界常將 PQ 與 粗量化器 (Coarse Quantizer) 結合,典型代表為 IVFPQ。首先用一個小規模 K-Means(例如 $N_{coarse}=4096$)對整個向量空間進行粗劃分,每個粗聚類作為一個倒排列表。查詢時,先通過粗量化器找到最接近的若干個(nprobe)倒排列表,再在這些列表內用 PQ 編碼進行精細距離計算。這使得實際計算量遠小於 $N$,延遲可控制在毫秒級。
5. 🧮 數學直覺與量化誤差分析
產品量化可以看作是在高維空間中構造了一個巨大的結構化的格點(lattice)。所有可能的積編碼構成了一個含有 $K^M$ 箇中心的“虛擬碼書”,這些中心均勻分佈在整個空間。編碼過程等價於找到最接近原向量的那個虛擬中心。量化誤差主要由兩部分組成:一是因 K-Means 聚類對子空間的逼近誤差,二是因忽略子空間間相關性的結構誤差。後者是 PQ 的根本侷限——子向量被假設相互獨立,丟失了跨子空間的協方差資訊。
最佳化的變體如 最優產品量化 (Optimized Product Quantization, OPQ) 通過一個正交旋轉矩陣 $R$ 將原始空間旋轉後再切分,最小化空間分解帶來的資訊損失: $$x \mapsto R x, \quad \min_{R, mathbf(C)^{(m)}} \sum_{m=1}^{M} \sum_{x} | (R x)^{(m)} - q^{(m)}((R x)^{(m)}) |^2$$ 該旋轉等價於尋找一個使各子空間儘可能獨立的基,極大降低了結構誤差。
理論邊界:根據率失真理論,PQ 在位元率 $b = M \log_2 K / D$ (每維位元) 下的失真 $D(b)$ 約為 $O(\sigma^2 2^{-2b})$,其中 $\sigma^2$ 為資料方差。當 $M$ 增加(即子空間維度降低)時,碼書訓練的方差會減小,但結構誤差增大,因此存在一個最優的 $M$ 需要根據資料特性調整。
6. ⚙️ 引數選擇與調優實踐
PQ 的主要引數為:子空間數量 $M$、每個子空間的碼字數量 $K$(或等效的位元數 $b$)、以及可選粗量化器的規模。不同引數對精度、記憶體和速度的影響如下:
| 引數 | 含義 | 增大時的效果 | 典型取值範圍 |
|---|---|---|---|
| $M$ | 切分段數,決定了子空間維度 $d=D/M$ | 壓縮倍數增加(因為每段碼書所需位元減少),但結構誤差上升,搜尋時距離累加成本略增 | 4 ~ 256,常用例如 8, 16, 32 |
| $K$ | 每段碼書大小 | 精度上升,記憶體佔用上升(每段索引佔用 $\lceil \log_2 K \rceil$ 位) | 256 (8-bit) 是極普遍的選擇,價效比高 |
| $nprobe$ (IVF) | 搜尋時探測的倒排列表數 | 召回率上升,延遲線性增長 | 1 ~ 100,平衡點一般在 10~50 |
調優經驗法則:
- 對於維度 $D=768$ 的文本嵌入,$M=48$,$K=256$ 是一個常用起點,壓縮比約 768×4 位元組/48 位元組=64 倍,召回率 1-recall@1 可維持在 90% 以上(以 brute-force 為基線)。
- 追求極致壓縮時可採用 $M=96$,但需配合 OPQ 旋轉來彌補結構誤差。
- 在記憶體極度受限的端側場景,可採用 $K=16$ (4-bit) 甚至更小,但會帶來精度大幅下降,需要通過重排序(re-ranking)等後處理彌補。
程式碼實現上,Faiss 提供了 ProductQuantizer 和 IndexIVFPQ,使用者只需指定量化器即可;訓練時應提供足量且代表性的樣本(一般至少 $10\times K$ 條子向量)。
7. 📊 效能基準與實證資料
根據公開的 ANN-benchmarks 和 Faiss wiki 資料,以下為典型配置下 PQ 的效能表現(維度 D=128,資料集 SIFT1M,N=10^6):
| 方案 | 每向量儲存 (bytes) | 召回率 1@1 | 搜尋延遲 (μs/query) |
|---|---|---|---|
| 原始向量 (float) | 512 B | 1.0 (精確) | ~500000 (全量掃描) |
| PQ (M=8, K=256) | 8 B | 0.85 | ~80000 (窮舉 ADC) |
| IVF+PQ (M=8, K=256, nprobe=8) | 8 B | 0.82 | ~1200 |
| IVF+OPQ (M=8, K=256, nprobe=8) | 8 B | 0.90 | ~1300 |
資料來源:Jégou et al. 2011, Faiss benchmarks。延遲為單核 CPU 條件下
在十億級 (SIFT1B) 上,IVF-PQ 可在 16 GB RAM 記憶體中索引 10^9 條 128-d 向量(每向量 16 位元組),窮舉 ADC 約需 1 秒,通過 IVF 後可下降到 100 毫秒以內。在新一代 GPU 加速下,延遲可降至 10 毫秒以下。
對於當前主流的 LLM 嵌入(D=1536 或 768),PQ 的記憶體節省效果更加顯著。例如,一個包含 10 億條 768 維向量的索引,原始大小約為 3 TB,使用 M=48, K=256 壓縮後大小僅約 48 GB,單臺 aarch64 伺服器即可承載,而召回率可通過設定 nprobe=32 保持在 95% 以上。
8. 🚀 優勢總結
- 極致的記憶體效率:提供 10x 到 100x 的壓縮比,是使大規模向量資料庫落地的核心技術。
- 搜尋加速:距離計算轉化為查表與整數求和,可充分利用 CPU 的快取層級,速度比暴力掃描快 5-50 倍(在相同記憶體頻寬下)。
- 成熟穩定的生態:有 Faiss、ScaNN、Milvus、Elasticsearch 等眾多庫和系統原生支援,文件豐富,部署門檻低。
- 可組合性強:可與倒排索引、HNSW 圖、乘積量化本身的深化變體(如 OPQ、Additive Quantization)無縫結合,建置層次化索引。
- 訓練開銷可控:碼書訓練只需一次 K-Means(各子空間獨立),複雜度為 $O(N \cdot D \cdot t)$,其中 $t$ 為迭代次數,線性於資料量,適合線上更新。
9. ⚠️ 侷限性與挑戰
- 精度損失:本質上是有失真壓縮,且在極低位元率(<4 bits/dim)下效能急劇下降,難以滿足高精度醫療、金融等場景對任何單點誤差的敏感性。
- 子空間獨立性假設:忽略了各段間的相關性,對於強相關的特徵(如深度學習中間層特徵)誤差較大,需要 OPQ 等旋轉補充,但旋轉本身也引入額外訓練成本。
- 訓練依賴資料分佈:碼書是資料依賴的,若索引資料分佈隨時間發生顯著漂移,原來的碼書會失去代表性,需定期重新訓練,否則召回率下降。
- 記憶體訪問模式碎片化:ADC 查表雖然快,但頻繁隨機訪問距離表可能導致 CPU 快取缺失,在高併發低延遲場景需特殊最佳化(如將表元素組織為連續記憶體)。
- 不支援增量索引的區域性更新:一旦碼書固定,新增向量可以輕鬆編碼加入,但若需要刪除或更新部分向量,重訓練碼書的代價較高,需按批次重建。
10. 🔀 變體與演進:從 PQ 到現代量化家族
學術界和工業界針對 PQ 的不足提出了多種改進,形成了一個豐富的量化方法家族:
1. 最優產品量化 (OPQ):通過外加正交旋轉陣,使子空間間的資訊損失最小化,訓練時交替最佳化旋轉矩陣和子碼書。在絕大多數資料集上能以相同的儲存代價獲得 5-10 個百分點的召回率提升。
2. 倒排多索引 (IMI):不再用單獨的粗量化器,而是將 PQ 思想應用於粗量化本身,即對原始向量的前半段和後半段分別建置粗碼書,其笛卡爾積作為粗分桶。可大幅增加倒排列表數量而不增加查詢成本。
3. 加法量化 (Additive Quantization, AQ):將 PQ 的笛卡爾積範式擴充套件為求和範式,向量被近似為 $M$ 個來自不同碼書的碼字之和,解除了維度切分的剛性約束,在同等位元下失真更低,但搜尋計算更復雜。
4. 組合量化 (Composite Quantization, CQ):在加法量化的基礎上引入常數偏移和約束,支援內積相似度,更適合最大內積搜尋場景。
5. 多碼書量化 (Multi-Codebook Quantization):每個子空間可使用多個碼書,產生若干版本,編碼時選擇誤差最小的組合,進一步降低失真。
6. 區域性最佳化量化 (Locally Optimized Product Quantization, LOPQ):對每個粗聚類訓練獨立的區域性 PQ 碼書,使碼書更貼合局部流形,多用於視覺搜尋。
在工業實踐中,排名前位的檢索系統(如 Google 的 ScaNN)通常會將 PQ 作為最後的精細量化階段,上方疊加樹形或圖索引。最新的趨勢是結合深度學習進行端到端最佳化,即 學習型量化 (Learned Quantization),使用神經網路預測誤差補償或直接生成編碼。
11. 🆚 與其他近似最近鄰技術的對比
| 方法 | 記憶體壓縮 | 搜尋速度 | 精度 (相同速度) | 訓練複雜度 | 最佳場景 |
|---|---|---|---|---|---|
| LSH | 不壓縮 (或輕微) | 快 | 低 | 低 | 高維二進位制嵌入 |
| HNSW | 需額外儲存邊,壓縮比為 1x | 極快 | 高 | 中等 | 記憶體充足、要求高精度低延遲 |
| IVF + PQ | 極高 (可>50x) | 中等 | 中高 | 中等 | 十億級、記憶體受限 |
| ScaNN (各向異性 PQ) | 高 (10-50x) | 快 | 高 | 較高 | 平衡點最好的工業方案之一 |
| IMI + OPQ | 極高 | 中等 | 中高 | 較高 | 超大規模, 需更高解析度粗分 |
協同使用:現代向量資料庫(如 Milvus、Weaviate)通常提供混合索引,例如 HNSW + PQ,即用 HNSW 圖做精確連線,在圖的底層儲存壓縮的 PQ 向量,實現記憶體與速度的兼顧。這種組合利用了 HNSW 的高遍歷效率,同時通過 PQ 壓縮減少了每個節點的儲存開銷。
12. 🏭 工業落地案例深度解析
案例 1:Facebook (Meta) 的圖片去重與檢索 Facebook 在 2015 年部署的 Rosetta 系統,用於檢測上傳圖片是否違規或重複。每天需對數十億圖片進行相似匹配。他們使用了基於 PQ 的多層級索引:首先用 CNN 抽取 256 維特徵,通過 IMI 做粗檢索,再使用 OPQ 對倒排列表內向量進行壓縮,單臺機器可索引 10 億+ 圖片,召回率超過 95%,單次查詢延遲 < 750 ms。這是 PQ 工業化的標誌性應用。
案例 2:電商平台向量搜尋 某大型電商使用 embedding 模型將商品標題和描述編碼為 1024 維向量,總計 10 億 SKU 向量。採用 IVF-PQ (M=64, K=256) 索引,記憶體從原始的 4 TB 壓縮到 80 GB,部署在 3 個可用區的高可用叢集上。即時搜尋時,先經業務過濾選出候選集(如類目),再執行 nprobe=20 的 IVFPQ 檢索,P99 延遲 12 ms。該方案使搜尋召回率相對倒排文本搜尋提升 15%,同時基礎設施成本降低 70%。
案例 3:端側 RAG 知識庫 某行動端應用需要離線查詢企業制度文件,裝置記憶體僅允許 200 MB 用於向量索引。他們採用 PQ (M=16, K=256) 將 50 萬條 384 維文本向量壓縮至 8 MB,(每向量 16 位元組),加上粗量化器開銷,總索引 < 20 MB。查詢時直接在裝置端進行 ADC 窮舉掃描(無 IVF),延遲 < 5 ms。這證明了 PQ 在端側的極致壓縮能力。
13. 🛠️ 實現與部署最佳實踐
索引建置步驟:
- 收集代表性樣本:至少 5 萬個訓練向量,且覆蓋生產資料分佈。
- 預處理:進行 L2 歸一化(僅當使用餘弦相似度時),然後可選擇應用隨機旋轉或 OPQ 學習旋轉。
- 訓練粗量化器(如 IVF),選擇合理的列表數
nlist,常設為 $sqrt(N)$ 數量級。 - 計算每個向量的殘差(向量減去粗聚類中心),對殘差訓練 PQ 碼書。
- 編碼資料庫向量:計算殘差,分段量化,儲存編碼和粗聚類ID。
- 序列化並載入到服務。
查詢服務最佳化:
- 預計算距離表時,使用 SIMD 指令加速浮點平方距離運算。
- 將距離查詢表儲存為連續記憶體,按列主序排列,以提升快取命中率。
- 對於多執行緒環境,每個查詢執行緒可獨立計算並維護距離表,避免鎖競爭。
- 使用記憶體對映(mmap)將索引檔案對映進來,減少頁面故障延遲。
- 設定合理的
nprobe,通過 A/B 測試找到召回率與延遲的甜點。
監控與更新:
- 定期計算 recall@k 指標,用全量掃描結果作為 ground truth。
- 當資料分佈漂移時,監控量化失真(如重建誤差的平均值),一旦超過閾值則觸發重訓練。
- 採用雙緩衝區式無停服更新:建置新索引,平滑切換流量。
14. 🔮 未來趨勢與研究方向
隨著大型模型和多模態應用的爆發,向量檢索引擎對記憶體和延遲的要求更加嚴苛,產品量化及其衍生技術將沿以下方向演進:
- 非線性量化與深度逼近:使用神經網路作為碼書分配器,通過教師-學生訓練使量化誤差更符合任務目標(如檢索排序),而不僅僅是最小化重建誤差。
- 神經壓縮與熵編碼結合:將 PQ 編碼視為符號序列,應用算術編碼或 Huffman 編碼進一步壓縮,逼近熵下限。
- 面向新硬體的協同設計:在 NVMe SSD 和 CXL 記憶體等分層儲存下,設計細粒度的 PQ 壓縮方案,將向量搜尋從記憶體延伸到低成本快閃記憶體。
- 生成式檢索融合:將量化編碼直接饋入生成模型,實現檢索增強生成的端到端可微,讓量化誤差與生成損失聯合最佳化。
- 自適應位元分配:根據子空間的重要性動態分配碼書大小,對承載資訊的維度使用更大碼書,冗餘維度使用更小碼書,以相同總位元提升精度。
PQ 作為一種基礎構件,將繼續在 AI 基礎設施中發揮“壓縮引擎”的核心作用,它是平衡效能、成本和精度的關鍵槓桿。
15. 📚 結論與參考文獻
產品量化通過“空間切割、獨立量化、笛卡爾積”的方式,實現了高維向量資料的極致壓縮與高效相似搜尋,解決了海量向量索引的記憶體與計算瓶頸。它不僅是學術界里程碑式的工作,更是現代向量資料庫、RAG 系統和推薦引擎的基石。理解 PQ 的原理、引數以及各種變體,是每位 AI 架構師和資料庫開發者的必修課。
核心參考文獻:
- Jégou, H., Douze, M., & Schmid, C. (2011). Product quantization for nearest neighbor search. IEEE TPAMI.
- Ge, T., He, K., Ke, Q., & Sun, J. (2013). Optimized product quantization for approximate nearest neighbor search. CVPR.
- Babenko, A., & Lempitsky, V. (2014). Additive quantization for extreme vector compression. CVPR.
- Johnson, J., Douze, M., & Jégou, H. (2019). Billion-scale similarity search with GPUs. IEEE TBD.
- Guo, R., Sun, P., Lindgren, E., Geng, Q., Simcha, D., Chern, F., & Kumar, S. (2020). Accelerating large-scale inference with anisotropic vector quantization. ICML.
- Faiss library documentation: https://github.com/facebookresearch/faiss
本文件所有資料均源自上述公開文獻和對應基準測試,旨在為產業界提供技術決策參考。