マトリョーシカ表現学習(マトリョーシカヒョウゲンガクシュウ)
マトリョーシカ表現学習(Matryoshka Representation Learning, MRL)は、1つの埋め込みモデルから任意の次元数のベクトルを切り出しても意味的品質を維持できるよう訓練する手法である。ロシアの入れ子人形「マトリョーシカ」のように、先頭d次元が常にd次元空間での最適表現となる構造を学習する。
マトリョーシカ表現学習(Matryoshka Representation Learning, MRL)は、2022年にGoogle Researchが発表した埋め込みモデルの訓練手法である。従来のEmbeddingモデルは固定次元(例: 768次元や1536次元)のベクトルを出力し、先頭のd次元だけを切り出して使うと品質が著しく劣化していた。MRLはこの制約を解消し、同一モデルの出力ベクトルを任意の次元で切り出しても、その次元数における最適に近い品質を維持できるよう訓練する。
名前の由来と核心アイデア
「マトリョーシカ」はロシアの入れ子人形で、大きな人形の中に順に小さな人形が収まっている。MRLのベクトルも同様に、先頭d次元が「d次元空間での最良の表現」となるよう構造化される:
- 3072次元ベクトルの先頭1536次元 → 1536次元モデルに匹敵
- 先頭768次元 → 768次元モデルに匹敵
- 先頭256次元 → 256次元専用モデルに匹敵
- 先頭64次元 → 品質は劣化するが、粗い事前フィルタには十分
この「入れ子構造」により、1つのモデルで複数のユースケース(高精度検索、メモリ制約環境、高速事前フィルタ)に対応できる。
訓練手法
MRLの訓練は、通常のcontrastive learning(対照学習)に「多段階損失関数」を追加する:
- 通常の対照学習: アンカー・正例・負例のトリプレットでfull-dimensionの埋め込みを学習
- MRL損失の追加: 複数の次元数 d ∈ {64, 128, 256, 512, 1024, ...} それぞれで対照学習損失を計算
- 損失の集約: 各次元での損失の加重平均を最終損失とする
各次元dでの損失計算では、ベクトルの先頭d次元のみを使ってコサイン類似度を算出する。これにより、先頭の次元ほど重要な情報を担うようモデルが学習する。
重要なポイント:
- 追加の計算コストは最小限(各次元でのslicing + 損失計算のみ)
- モデルアーキテクチャの変更は不要
- 推論時はfull-dimensionベクトルを一度だけ生成し、用途に応じて切り出す
対応モデル一覧
| モデル | ベース次元 | MRL対応次元 | 提供元 |
|---|---|---|---|
| text-embedding-3-small | 1536 | 512, 1536 | OpenAI |
| text-embedding-3-large | 3072 | 256, 1024, 3072 | OpenAI |
| embed-v4 | 1024 | 256, 512, 1024 | Cohere |
| nomic-embed-text-v1.5 | 768 | 64, 128, 256, 512, 768 | Nomic AI |
| mxbai-embed-large-v1 | 1024 | 任意 | mixedbread.ai |
| BGE-M3 | 1024 | 256, 512, 1024 | BAAI |
| jina-embeddings-v3 | 1024 | 任意 | Jina AI |
2024年以降にリリースされた主要Embeddingモデルの大部分がMRLを採用している。
次元数と品質の関係
OpenAI text-embedding-3-largeでのMTEB(Massive Text Embedding Benchmark)スコア:
| 次元数 | MTEBスコア | float32メモリ/1Mベクトル | 対full比率 |
|---|---|---|---|
| 3072(full) | 64.6 | 12.3 GB | 100% |
| 1024 | 64.1 | 4.1 GB | 99.2% |
| 512 | 63.2 | 2.0 GB | 97.8% |
| 256 | 61.4 | 1.0 GB | 95.0% |
| 64 | 54.3 | 0.25 GB | 84.1% |
1024次元でfull(3072次元)の99.2%の品質を維持しつつ、メモリを1/3に削減できる。これは量子化と組み合わせることでさらに圧縮可能(1024次元×int8 = 1.0GB、1024次元×binary = 128MB)。
MRL + 量子化の組み合わせ
MRLと量子化の組み合わせは、圧縮率の掛け算効果を生む:
| 構成 | 次元 | 精度 | 1M vecのメモリ | 圧縮率 |
|---|---|---|---|---|
| float32 full | 3072 | 100% | 12.3 GB | 1x |
| MRL 1024次元 | 1024 | 99.2% | 4.1 GB | 3x |
| MRL 1024 + int8 | 1024 | 98.5% | 1.0 GB | 12x |
| MRL 1024 + binary | 1024 | 95% | 128 MB | 96x |
| MRL 256 + int8 | 256 | 94% | 256 MB | 48x |
| MRL 256 + binary | 256 | 85% | 32 MB | 384x |
MRL 1024次元 + int8量子化で12倍圧縮・品質98.5%維持は、多くのRAGシステムで最適なバランスとなる。
自作PCでの実用シナリオ
MRLは自作PCのローカルLLM/RAG環境で特に有用:
- 段階的検索: MRL 256次元(binary)で粗い候補100件を高速抽出 → MRL 1024次元(float32)で精密リランキング → 上位10件をLLMに投入
- メモリ適応: RTX 3060(12GB VRAM)ではMRL 512次元、RTX 4090(24GB VRAM)ではMRL 1024次元と、ハードウェアに応じて次元数を選択
- マルチモーダル: テキストと画像の埋め込みを同じMRLモデルで生成し、低次元で事前フィルタ → 高次元で精密検索のパイプライン構築
よくある質問(FAQ)
Q1: MRL対応モデルと非対応モデルの見分け方は? A: モデルカードに「Matryoshka」「MRL」「variable dimensions」の記載があるか確認。OpenAIのtext-embedding-3シリーズ、Cohereのembed-v4は公式にMRL対応。非対応モデルの先頭d次元を切り出すと品質が大幅に劣化するため、必ず対応モデルを使用すること。
Q2: MRLモデルの推論コストは通常モデルより高い? A: 推論コストは同一。MRLは訓練時の損失関数の変更のみで、推論時のアーキテクチャは変わらない。full-dimensionベクトルを一度生成し、必要な次元数で切り出すだけ。
Q3: どの次元数を選ぶべき? A: メモリと品質のバランスで決定。一般指針: 10万件未満ならfull次元、10万〜100万件ならMRL 1024次元、100万件以上ならMRL 512次元 + int8量子化が最適解となることが多い。重要なのはベンチマーク(Recall@k)で自分のデータセットでの精度を検証すること。
まとめ
- MRLは先頭d次元がd次元空間の最適表現となる入れ子構造を学習
- 1つのモデルで複数の次元数・ユースケースに対応
- 量子化との組み合わせで最大384倍の圧縮が可能
- 2024年以降の主要Embeddingモデルの大部分がMRL対応
- 自作PCでは段階的検索・メモリ適応に特に有用