ほとんどの埋め込みモデルは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システムに取り組んだことがある方々からの意見を歓迎します。
ぜひ入力してほしい質問:
- ここでの適切なベースラインはPCAでしょうか?それとも、比較対象としてもっと強力な線形ベースラインがあるでしょうか?
- 検索(retrieval)では、どの指標を最も意思決定に関わるものとして扱うべきでしょうか:コサインの再構成、Recall@10、または別の何かでしょうか?
- 他の方々も、Matryoshkaではない埋め込みモデルで同様の挙動を見たことはありますか?
[link] [comments]




