AI・機械学習
中級

埋め込み次元削減(ウメコミジゲンサクゲン)

埋め込み次元削減とは、高次元の埋め込みベクトルを低次元空間に射影し、情報の損失を最小限に抑えながらメモリ・計算コストを削減する手法群の総称である。PCA、UMAP、ランダム射影、Matryoshka切り出しなどが代表的手法。

0 回閲覧
0 いいね

埋め込み次元削減(Embedding Dimensionality Reduction)は、N次元の埋め込みベクトルをd次元(d < N)に変換し、ベクトルの意味的品質を可能な限り維持しながらメモリ使用量と検索レイテンシを削減する技術群の総称である。量子化がビット精度を下げるのに対し、次元削減はベクトルの長さ自体を短縮する。両者の組み合わせにより、飛躍的な圧縮率を実現できる。

次元削減 vs 量子化

項目次元削減量子化
対象ベクトルの長さ(次元数)各次元の精度(ビット幅)
例3072次元 → 1024次元float32 → int8
圧縮率次元比(3x, 6x, ...)ビット比(4x, 32x)
組み合わせ可能(掛け算効果)可能(掛け算効果)
精度影響次元依存(低次元で劣化大)次元依存(低次元で劣化大)
追加学習手法による(PCA: 不要、MRL: 訓練時)不要(統計量のみ)

例: 3072次元float32(12.3GB/1M vec)→ 1024次元int8(1.0GB/1M vec)= 12.3倍圧縮。

主な次元削減手法

1. Matryoshka切り出し(MRL Truncation)

MRL対応モデルの先頭d次元をそのまま使用する最もシンプルな方法。追加の変換処理が不要で、推論後にスライスするだけ。

  • 利点: 変換不要、品質最良(モデル訓練時に最適化済み)
  • 制約: MRL対応モデル限定
  • 推奨次元: モデルのMRLサポート次元(256, 512, 1024 等)

2. PCA(主成分分析)

ベクトルの分散が最大となる方向(主成分)を軸として、上位d主成分に射影する線形次元削減手法。

手順:

  1. ベクトルセットの共分散行列を計算
  2. 固有値分解で固有ベクトル(主成分)と固有値を取得
  3. 上位d個の固有ベクトルで射影行列Wを構成
  4. 各ベクトルvに対し v' = W^T × v で次元削減
  • 利点: 教師なし、実装簡単、scikit-learnで即座に適用可能
  • 制約: 線形変換のため非線形構造を捉えられない
  • 計算コスト: 射影行列の学習にO(N×d²)、適用はO(d×D)(D=元次元、d=目標次元)

3. UMAP(Uniform Manifold Approximation and Projection)

高次元データの局所的な距離関係を保存しつつ低次元に射影する非線形次元削減手法。t-SNEの改良版として位置づけられる。

  • 利点: 非線形構造の保存、クラスタ構造の可視化に優秀
  • 制約: 新規ベクトルの射影に追加計算が必要(transform())、パラメータ感度が高い
  • 用途: 主に可視化・探索用。検索用の次元削減にはMRLやPCAが優先

4. ランダム射影(Random Projection)

Johnson-Lindenstrauss補題に基づき、ランダムな射影行列でベクトルを低次元に変換する手法。

  • 利点: データ非依存(学習不要)、計算が極めて高速
  • 制約: PCAより精度が劣る傾向、次元削減率が控えめ
  • 理論保証: ε-近似で距離を保存するにはd ≥ O(log(n) / ε²)次元が必要

5. Autoencoderベース

ニューラルネットワークのAutoencoder(ボトルネック層)で非線形次元削減を行う手法。

  • 利点: 非線形変換で情報保持率が高い、タスク特化の学習可能
  • 制約: 学習コスト大、推論時にエンコーダの順伝播が必要
  • 用途: 大規模なカスタムEmbeddingパイプラインで採用されることがある

手法比較

手法学習線形性新規データ品質速度推奨用途
MRL切り出しモデル訓練時-スライスのみ★★★★★★★★★★MRL対応モデル使用時
PCA教師なし学習線形射影行列適用★★★★★★★★汎用、非MRLモデル
Random Projection不要線形射影行列適用★★★★★★★★超高速処理、近似OK
UMAP教師なし学習非線形transform()★★★★★★可視化、探索
Autoencoder教師あり/なし非線形順伝播★★★★★★★カスタムパイプライン

次元削減の品質評価

次元削減後の品質は、元のfloat32 full次元をベースラインとして以下の指標で評価する:

  • Recall@k: 元のベクトルでの上位k件が、次元削減後の上位k件にどれだけ含まれるか
  • 相対的品質保持率: MTEBスコアの元次元比(例: 1024次元のスコア / 3072次元のスコア × 100%)
  • 累積寄与率(PCA): 上位d主成分が全分散の何%を説明するか。95%以上が目安

実装例: scikit-learnでPCA次元削減

PCA次元削減の典型的なワークフロー:

  1. サンプルベクトル(10万〜100万件)でPCAを学習
  2. 累積寄与率95%以上の次元数dを選択
  3. 射影行列を保存(pickle/joblib)
  4. 新規ベクトルに射影を適用してインデックスに格納

注意点:

  • PCA前にL2正規化を適用するかはタスク依存(コサイン類似度ならPCA前に正規化)
  • PCA後に再度L2正規化を適用し、コサイン類似度検索に対応
  • 射影行列のサイズ: D×d × 4バイト(3072→1024次元なら約12MB)

自作PCでの活用

次元削減はローカルRAG環境のリソース最適化に直結する:

  • VRAM節約: RTX 4060 Ti(16GB VRAM)でLLM推論とベクトル検索を共存させるため、Embeddingを3072→768次元に削減
  • CPU検索の高速化: 次元数が半分になると距離計算のFLOPSも半分に。768→384次元でCPU検索レイテンシが約2倍改善
  • ディスクI/O最適化: NVMe SSDからのベクトルロード量が次元比で削減され、起動時間が短縮
  • MRL+量子化の組み合わせ: text-embedding-3-largeを MRL 1024次元 + int8量子化で使用し、12.3GB→1.0GBに圧縮

よくある質問(FAQ)

Q1: MRL対応モデルなら次元削減にPCAは不要? A: 基本的に不要。MRL切り出しの方がPCAより品質が高い(モデル訓練時に最適化されているため)。ただし、MRLのサポート次元以外(例: 700次元)を使いたい場合はPCAの出番がある。

Q2: 次元削減と量子化のどちらを先に適用すべき? A: 次元削減を先に適用する。理由: (1) 次元削減でベクトル長を短縮 → (2) 短くなったベクトルを量子化。順序を逆にすると、量子化で失われた精度を次元削減がさらに劣化させるリスクがある。

Q3: 次元を減らしすぎるとどうなる? A: 情報のボトルネックが発生し、意味的に異なるテキストのベクトルが近接して検索精度が急落する。目安として、PCAなら累積寄与率95%以上、MRLならモデルの公式サポート次元を下限とするのが安全。

Q4: 可視化目的の2-3次元削減はベクトル検索に使える? A: 使えない。2-3次元ではRecall@10が10%以下に落ちる。UMAPやt-SNEによる2D/3D投影はあくまで可視化・探索的分析用であり、検索インデックスには使用しない。

まとめ

  • 次元削減はベクトルの長さを短縮してメモリ・レイテンシを削減
  • MRL切り出しが品質最良、非MRLモデルにはPCAが標準
  • 量子化との組み合わせで掛け算効果(3072次元float32 → 1024次元int8 で12倍圧縮)
  • UMAPは可視化用、検索にはMRL/PCA/Random Projectionを使用
  • 次元削減は量子化の前に適用するのが正しい順序