[P] 切り詰めの前にPCAを行うと、非マトリョーシカ埋め込みは圧縮可能になる:BGE-M3に関する結果 [P]

Reddit r/MachineLearning / 2026/4/10

💬 オピニオンSignals & Early TrendsIdeas & Deep AnalysisModels & Research

要点

  • 本稿は、ほとんどの非マトリョーシカ埋め込みモデルは、素朴な次元切り詰めでは動作しない(信号が先頭の次元に集中していないため)と主張している。
  • 単純な解決策として、埋め込みのサンプルに対して一度だけPCAを適合し、ベクトルをPCA基底へ回転させた後に切り詰めることで、10KベクトルのBGE-M3(1024d)テストにおいて、素朴な切り詰めに比べてコサイン類似度が大幅に改善することを提案している。
  • BGE-M3では、PCA-firstの切り詰めが、検証した各次元において素朴な切り詰めを圧倒的に上回る(例:512dで約0.996のコサイン vs 約0.707)ことから、PCAによって切り詰めが実質的に情報を保持しうることが示される。
  • より大規模な多言語コーパスでは、著者が複数の圧縮手法を比較し、PCA-384に低ビット量子化を組み合わせることで、より攻撃的なバイナリ/PQよりも検索指標が良い、高い圧縮率と実用的な中間解を見出している。
  • 重要な制約として、コサインはRecall@10よりも劣化が遅い。そのため本稿では、コサインだけに頼るのではなく、意思決定に直結する検索メトリクスを評価することを強調している。

ほとんどの埋め込みモデルはMatryoshka学習を行っていないため、素朴な次元の切り詰め(truncation)はそれらを破壊してしまう傾向があります。

私は簡単な代替案を試しました。埋め込みのサンプルに対して一度だけPCAを適合し、ベクトルをPCA基底に回転させてから切り詰めます。この考え方は、PCAが信号を先頭の主成分に集中させるので、切り詰めが恣意的なものではなくなる、というものです。

10K個のベクトルのBGE-M3サンプル(1024d)で、次の結果を得ました:

  • 512d:素朴な切り詰め 0.707 のコサイン、PCA-first 0.996
  • 384d:素朴 0.609、PCA-first 0.990
  • 256d:素朴 0.467、PCA-first 0.974
  • 128d:素朴 0.333、PCA-first 0.933

また、より大きな多言語コーパスで、この方法を他の圧縮アプローチとも比較しました。いくつか代表的な点:

  • スカラーint8:4x圧縮、コサイン 0.9999、Recall@10 97.2%
  • 3-bit量子化:10.6x、コサイン 0.978、Recall@10 83.8%
  • PCA-384 + 3-bit量子化:27.7x、コサイン 0.979、Recall@10 76.4%
  • バイナリ量子化:32x、コサイン 0.758、Recall@10 66.6%
  • PQ(M=16、K=256):256x、コサイン 0.810、Recall@10 41.4%

実用上の示唆は、おそらく次のようです:

  • Matryoshkaではないモデルでは、素朴な切り詰めは通常使い物にならない
  • 一度だけPCAを当てると、切り詰めが現実的になる
  • PCA + 低ビット量子化は、スカラー量子化と、より攻撃的なバイナリ/PQアプローチの間の有用な中間地点を埋める

重要な制限が1つあります。コサイン類似度はRecall@10よりも劣化が遅いです。私の実験では、27x圧縮でもコサイン上は依然として強いように見えましたが、リコールは意味のある形で低下しました。リコールが優先なら、より緩い設定のほうが良さそうでした。

私は主に、この手法と評価についてフィードバックを得るために投稿しています。特に、埋め込み圧縮やANNシステムに取り組んだことがある方々からの意見を歓迎します。

ぜひ入力してほしい質問:

  1. ここでの適切なベースラインはPCAでしょうか?それとも、比較対象としてもっと強力な線形ベースラインがあるでしょうか?
  2. 検索(retrieval)では、どの指標を最も意思決定に関わるものとして扱うべきでしょうか:コサインの再構成、Recall@10、または別の何かでしょうか?
  3. 他の方々も、Matryoshkaではない埋め込みモデルで同様の挙動を見たことはありますか?
submitted by /u/ahbond
[link] [comments]