マルチベクトル埋め込みモデルのためのトークンプーリング対応トレーニング
マルチベクトル検索におけるトークンプーリングの理解
ColBERTのようなマルチベクトル埋め込みモデルは、ドキュメントを単一のベクトルではなく、文脈化されたトークンベクトルの集合として表現します。このアプローチにより、クエリトークンを最も関連性の高いドキュメントトークンと照合するMaxSimスコアリングを通じて、高い表現力を持つ検索が可能になります。しかし、この粒度の細かさはストレージ要件の増大を招き、数百万のドキュメントを持つコーパスでは数億ものベクトルが生成される可能性があります。
トークンプーリングは、類似したトークンベクトルをより少ない代表的なベクトルに統合することで、この問題を軽減します。標準的なプーリングはどのモデルにも適用できますが、エンコーダーがもともと圧縮された表現を使用して検索を行うように訓練されていないため、情報の損失を招くことがよくあります。プーリング対応トレーニング(Pooling-aware training)は、ベクトルが統合された際にも検索精度を維持するようにモデルを明示的に学習させることで、この問題に対処します。
プーリング対応トレーニングのメカニズム
プーリング対応トレーニングは、Matryoshka埋め込みと同様に、完全な表現と圧縮された表現の両方に検索目的関数を適用することで機能します。トレーニング中、各バッチは2つの損失を計算します。
- 非プーリング損失: 元の完全なドキュメント埋め込みセットを使用した検索。
- プーリング損失: ドキュメントをターゲットのベクトル数(例:
pool_factor4を使用)に圧縮した後の検索。
合計損失は、これら2つのコンポーネントの平均です。これにより、エンコーダーは重要な情報がクラスタリングプロセスを生き残るようにトークン埋め込みを構造化せざるを得なくなります。HierarchicalTokenPoolingモジュールはWardの階層型クラスタリングを使用してベクトルをグループ化し、トレーニングプロセスでは、クラスター割り当ての離散的な性質にもかかわらず、勾配を元のトークン埋め込みに逆伝播させるためにストレートスルー推定器を採用しています。
実装とパフォーマンス
開発者は、Sentence Transformersライブラリ内の MultiVectorTokenPoolingLoss ラッパーを使用してこれを実装できます。既存の検索損失をラップすることで、このアプローチは異なるプーリングバリエーションのために個別のエンコーダーパスを必要とせずに効率的なトレーニングを可能にします。
主なパフォーマンス向上
NanoBEIRベンチマークでの ModernBERT-base を使用した評価では、プーリング対応トレーニングが同じストレージ予算において標準モデルよりも大幅に優れた性能を発揮することが示されています。
- 保持率:
pool_factor=4(ベクトル数が4分の1)において、プーリング対応トレーニングは非プーリング時のnDCG@10スコアの97.8%を保持し、通常トレーニングされたモデルの94.6%を上回りました。 - 柔軟性: このトレーニングの利点はトレーニング中に使用された特定の
pool_factorを超えて広がり、さまざまな固定上限や適応型プーリングしきい値全体で一貫した改善を示しています。 - 適応型キャリブレーション: ユーザーは距離しきい値を調整してターゲットの平均ベクトル数を達成でき、情報密度の高いドキュメントにより多くのベクトルを動的に割り当てることが可能になります。
推奨される圧縮戦略
インデックスサイズが主要な制約となるアプリケーションでは、以下の段階的なアプローチが推奨されます。
- 量子化: Fast-PLAID(2ビットまたは4ビットの残差量子化)のような手法を適用して、座標あたりのストレージを削減します。
- トークンプーリング: プーリング対応のファインチューニングを使用して、ドキュメントベクトルの総数を削減します。
- Matryoshka埋め込み: Matryoshkaトークン埋め込みを利用して、個々のベクトルの次元数を削減します。
これらの手法は補完的であり、MultiVectorMatryoshkaLoss や MultiVectorTokenPoolingLoss のような複数の損失関数をラップすることで組み合わせることができ、ベクトル数と次元数の両方を最適化できます。