🚀 Zilliz Cloudを無料で試す、完全管理型のMilvus—10倍の高速パフォーマンスを体験しよう!今すぐ試す>>

milvus-logo
LFAI
  • Home
  • Blog
  • マトリョーシカの埋め込み複数のスケールにおけるディテール

マトリョーシカの埋め込み複数のスケールにおけるディテール

  • Engineering
October 30, 2024
Stefan Webb, David Wang

マトリョーシカ・エンベッディングとは?

効率的なベクトル検索システムを構築する際の重要な課題の1つは、許容可能なレイテンシとリコールを維持しながら、ストレージコストを管理することです。最新の埋め込みモデルは数百から数千次元のベクトルを出力するため、未加工のベクトルとインデックスに大きなストレージと計算オーバーヘッドが発生します。

従来は、インデックスを構築する直前に量子化や次元削減を行うことで、ストレージの容量を削減していました。例えば、積量子化(PQ)を使って精度を下げたり、主成分分析(PCA)を使って次元数を下げることで、ストレージを節約することができます。これらの方法はベクトル集合全体を分析し、ベクトル間の意味的関係を維持した、よりコンパクトなものを見つける。

効果的ではあるが、これらの標準的なアプローチは精度や次元数を一度だけ、しかも単一のスケールで削減する。しかし、複数の詳細なレイヤーを同時に維持し、ピラミッドのように精度を高めていくことができるとしたらどうだろう?

マトリョーシカ埋め込みが登場する。ロシアの入れ子人形にちなんで名付けられたこの巧妙な構造は(図を参照)、1つのベクトル内に複数のスケールの表現を埋め込む。従来の後処理手法とは異なり、マトリョーシカ埋め込みは最初の学習過程でこのマルチスケール構造を学習する。その結果は驚くべきもので、完全な埋め込みが入力のセマンティクスを捉えるだけでなく、入れ子になったサブセットの接頭辞(前半、4分の1など)が、詳細ではないものの、首尾一貫した表現を提供します。

Figure: Visualization of Matryoshka embeddings with multiple layers of detail 図:マトリョーシカ埋込みの多層詳細化による視覚化

図:マトリョーシカ埋め込みを多層化した可視化図

このアプローチは、ベクトル次元の任意の部分集合を使用することで、一般的に意味的な意味を破壊してしまう従来の埋め込みとは対照的です。マトリョーシカ埋め込みでは、特定のタスクの精度と計算コストのバランスが最も良い粒度を選択することができます。

迅速な近似検索が必要ですか?最小の "人形 "を使います。最大限の精度が必要ですか?完全なエンベッディングを使います。この柔軟性は、異なる性能要件やリソース制約に適応するシステムにとって、特に有用です。

推論

マトリョーシカ埋込みの有用なアプリケーションは、想起を犠牲にすることなく類似検索を高速化することです。クエリやデータベースの埋め込み空間のより小さな部分集合(例えば、それらの次元の最初の1/32)を活用することで、類似性情報の多くを保持したまま、この縮小された空間に対するインデックスを構築することができます。この小さな埋め込み空間から得られる最初の結果は、そのまま使うことができる。それでもなお、想起を高め、次元削減によるわずかな減少を考慮する技術もあり、このアプローチは類似検索タスクにとって効率的かつ効果的である。

Figure: How the funnel search works with Matryoshka embeddings 図:マトリョーシカ埋め込みによる漏斗探索の仕組み

図:マトリョーシカ埋め込みによる漏斗探索の仕組み

精度を保ちながら効率的に類似検索の速度を上げるには、「漏斗探索」アプローチを用いることができる。まず、埋め込み次元の最初の1/32のみを用いて最初の類似探索を行い、候補となる項目を幅広く生成します。次に、最初の1/16次元を使って、クエリとの類似度に基づいてこれらの候補を再ランクし、リストの一部を刈り込みます。このプロセスは繰り返し行われ、8分の1、4分の1......といった具合に、埋め込み次元の部分集合が大きくなるにつれて、再ランク付けとプルーニングが行われる。重要なことは、この低次元空間での最初の類似検索は1回しか行わず、埋め込みモデルの1回のパスでクエリの埋め込みを計算することです。このファネル化プロセスは各ステップで候補を絞り込み、全次元空間で直接検索するよりも高速で効率的である。1/32次元空間から多くのマッチを抽出し、ファネル検索によって絞り込むことで、強力な想起を維持しながら類似検索を大幅に高速化することができる。

トレーニング

技術的な詳細を少し説明しよう。この方法は適用が非常に簡単である。文埋め込み用のBERT モデルを微調整するというコンテキストを考えてみよう。マスクされたトークンの損失について事前に訓練されたBERTモデルを文埋め込みモデルに変換するために、最終層の平均、つまり、トークンごとに文脈化された埋め込み量の平均として文埋め込みを形成します。

学習目的の一つの選択肢は、L(u,v;s)L(u,v; s) L v sCosine Sentence (CoSENT)損失である。u,vu,vの組の文埋め込み、 u vと、それらの希望する類似度スコア、sssを入力します(式は上のリンクを参照)。ここで、マトリョーシカ埋め込みを学習するために、学習目的を少し修正する:

LM(u,v)=w0L(u1:d,v1:d)+w1L(u1:d/2,v1:d/2)+w2L(u1:d/4,v1:d/4)+⋯L_M(u, v) = w_0L(u_{1:d}, v_{1:d}) + w_1L(u_{1:d/2}, v_{1:d/2}) + w_2L(u_{1:d/4}, v_{1:d/4}) + \cdotsLv=wL1,v1)+wL1,v1)+wL1,v

ここで和は、情報ボトルネックに達するまで、前の項への入力の半分の損失を計算することによって続けられる。著者らは

w0=w1=⋯=1w_0=w_1=cdots=1 w

簡単に言うと、マトリョーシカ損失は、入力の再帰的部分集合に対する元の損失の加重和です。

上の式から得られる1つの重要な点は、マトリョーシカ損失は、埋め込みモデル間で重みを共有することで、複数のスケールにおける表現の効率的な学習を実現するということです(同じモデルが、例えばu1du_{1:d}u u1:d/2u_{1:d/2} u )と、スケールを超えた次元の共有u1:d/2u_{1:d/2}uuu u の部分集合である)。

マトリョーシカ埋め込みとmilvus

Milvusは、pymilvus.modelセンテンストランスフォーマーなどの標準的なライブラリを介してロードされるマトリョーシカ埋め込みモデルをシームレスにサポートします。システムの観点からは、通常の埋め込みモデルと、マトリョーシカ埋め込みを生成するために特別に訓練されたモデルの間に、機能的な違いはありません。

一般的なマトリョーシカ埋め込みモデルには、以下のようなものがあります:

Milvusでマトリョーシカ埋め込みを使用するための完全なガイドは、Matryoshka Embeddingsを使ったFunnel Searchを参照してください。

概要

マトリョーシカ埋め込みは、セマンティックインテグリティを犠牲にすることなく、短縮された埋め込みを作成することができます。既存のモデルを修正することもできますが、OpenAIや Hugging Faceのような事前に訓練されたオプションも利用可能です。

しかし、現在の限界は、オープンソースのマトリョーシカ埋め込みが少ないことです。加えて、これらのモデルはしばしば "マトリョーシカ "として明示的にラベル付けされていないため、見つけるのが難しくなっています。関心の高まりとともに、より広範な利用可能性と明確なラベル付けがすぐに実現することを願っています。

検索機能を効率化する準備はできていますか?Milvus + Matryoshkaのエンベッディングを今すぐ始めましょう!

リソース

Like the article? Spread the word

続けて読む