AI・機械学習
初級

埋め込み量子化(ウメコミリョウシカ)

埋め込み量子化とは、高次元の埋め込みベクトル(Embedding)を低精度の数値表現に変換し、メモリ使用量と検索コストを削減する技術である。float32からint8やbinaryへの変換が代表的で、RAGシステムやベクトルデータベースの運用コスト最適化に広く活用される。

0 回閲覧
0 いいね

埋め込み量子化(Embedding Quantization)とは、テキスト・画像・コードなどの意味表現を担う埋め込みベクトル(Embedding Vector)の各次元の値を、元のfloat32(32ビット浮動小数点)からより低精度の表現(int8、uint8、float16、binary など)に変換する技術である。ベクトルデータベースやRAG(Retrieval-Augmented Generation)システムで数百万〜数十億のベクトルを格納・検索する際、メモリ消費と検索レイテンシを大幅に削減できる。

概要と背景

LLMやVision Transformerの普及により、あらゆるデータを高次元ベクトルに変換(埋め込み)して類似検索する手法が標準化した。しかしベクトルの次元数は年々増加しており、OpenAI text-embedding-3-large は3,072次元、Cohere embed-v4は1,024次元のfloat32ベクトルを生成する。

100万ベクトル×3,072次元×4バイト(float32)= 約12GBのメモリが必要となり、1億ベクトル規模では1.2TBに達する。これはGPUメモリ(H100で80GB)はおろか、一般的なサーバーのDRAM容量も超える。量子化はこのメモリ問題を解決する中核技術である。

主な量子化方式:

方式ビット幅圧縮率精度劣化代表的用途
float32(原精度)32bit1xなしベースライン
float1616bit2xほぼなしGPU推論最適化
int8(スカラー量子化)8bit4x1-3%汎用近似検索
uint88bit4x1-3%Qdrant/Weaviate標準
int44bit8x3-8%実験的
binary(1bit)1bit32x5-15%高速事前フィルタ

量子化の動作原理

量子化の基本操作は「連続値の離散化」である。float32の値域[-1.0, 1.0]をint8の値域[-128, 127]にマッピングする場合:

  1. レンジ計算: ベクトル全体(またはチャネルごと)のmin/maxを求める
  2. スケール算出: scale = (max - min) / 255(uint8の場合)
  3. ゼロポイント算出: zero_point = round(-min / scale)
  4. 量子化: q = round(x / scale) + zero_point
  5. 逆量子化(復元): x' = (q - zero_point) × scale

この「アフィン量子化」は最も基本的な方式で、スカラー量子化(Scalar Quantization)とも呼ばれる。より高度な方式として、Product Quantization(直積量子化)やResidual Quantization(残差量子化)がある。

主要ベクトルDBの量子化サポート

ベクトルDBスカラー量子化バイナリ量子化PQ(直積量子化)自動量子化
Qdrant○(uint8)○○○(auto)
Weaviate○(BQ+SQ)○○-
Pinecone--○(内部)○(自動PQ)
Milvus○(int8)○○(IVF_PQ)-
pgvector○(halfvec)○(bit)--
ChromaDB----

RAGシステムでの活用

RAG(Retrieval-Augmented Generation)パイプラインでは、量子化は以下の段階で適用される:

  1. インデックス構築時: float32ベクトルをint8/binaryに量子化してインデックスに格納。メモリ75-97%削減
  2. クエリ時: クエリベクトルも同じ方式で量子化し、量子化空間で近似最近傍検索(ANN)を実行
  3. リスコアリング: 候補上位N件を元のfloat32ベクトルで再スコアリングし精度回復(Rescoring / Oversampling)

リスコアリングにより、量子化による精度劣化を1%未満に抑えることが可能。Qdrantではrescore=trueパラメータで自動的にfloat32リスコアリングが適用される。

量子化と検索品質のトレードオフ

量子化の精度影響は、ベクトルの次元数と量子化方式に大きく依存する:

  • 高次元(1024+次元): 量子化誤差が多次元に分散するため、int8で精度劣化1%未満
  • 低次元(128-384次元): 各次元の情報密度が高く、int8でも3-5%劣化の可能性
  • バイナリ量子化: 768次元以上で実用的(Recall@10で90%以上)、384次元以下では精度劣化が大きい

精度評価の標準メトリクス:

  • Recall@k: 真の上位k件中、量子化後の上位k件に含まれる割合
  • NDCG@k: 順位の正確性を加味した指標
  • MRR: 最初の正解の順位の逆数平均

自作PCとの関連

ローカルRAGシステムを自作PCで運用する場合、量子化は特に重要:

  • GPUメモリ制約: RTX 4090(24GB VRAM)で100万ベクトル×1024次元をfloat32で格納すると約4GB。int8なら1GB、binaryなら128MBに収まり、LLM推論用のVRAMを確保できる
  • CPU検索: AVX-512対応CPU(Intel 12世代以降)ではint8 SIMD演算で検索速度が4倍向上
  • NVMe活用: 量子化ベクトルをNVMe SSDに格納し、オンデマンドでメモリにロードする方式も実用的(Qdrant mmap モード)

よくある質問(FAQ)

Q1: 量子化するとどのくらいメモリが減る? A: float32→int8で75%削減(4x圧縮)、float32→binaryで97%削減(32x圧縮)。100万ベクトル×1024次元の場合、float32で約4GB、int8で約1GB、binaryで約128MBとなる。

Q2: 量子化後の検索精度はどの程度低下する? A: 1024次元以上のベクトルでint8量子化+リスコアリングを使えば、Recall@10の低下は1%未満。バイナリ量子化でも768次元以上ならOversampling付きで5%未満の劣化に抑えられる。

Q3: すべてのEmbeddingモデルで量子化は有効? A: ほとんどのモデルで有効だが、Matryoshka Representation Learning(MRL)対応モデルは量子化との相性が特に良い。MRLモデルは低次元でも情報を保持するよう訓練されているため、次元削減+量子化の組み合わせで最大の圧縮効果を得られる。

Q4: 量子化はいつ行うべき? A: ベクトル数が10万件を超えたら検討開始。100万件以上では必須。インデックス構築後でもQdrantやWeaviateは動的に量子化を適用できるため、まずfloat32で構築し、スケール時に量子化を追加する戦略が安全。

まとめ

  • 埋め込み量子化はfloat32ベクトルを低精度表現に変換してメモリ・コスト削減
  • int8(4x圧縮)とbinary(32x圧縮)が主要方式
  • リスコアリング併用でRecall低下を1%未満に抑制可能
  • 高次元(1024+)ベクトルほど量子化耐性が高い
  • ローカルRAGでは限られたGPUメモリの有効活用に直結