MRL 圧縮を使用してディメンションを切り詰める (プレビュー)
重要
この機能はパブリック プレビュー段階にあり、追加使用条件の下で提供されます。 この機能は、プレビュー REST API でサポートされます。
text-embedding-3 モデルで使うディメンションを減らす機能を使ってみます。 Azure OpenAI の text-embedding-3 モデルは、異なる圧縮レベルで複数のベクトル表現を生成する Matryoshka Representation Learning (MRL) 手法を使って再トレーニングされています。 この方法では、セマンティック情報の損失を最小限に抑えながら、検索の高速化とストレージ コストの削減が実現します。
Azure AI 検索の MRL は、スカラー量子化とバイナリ量子化の補完をサポートします。 いずれかの量子化方法を使用する場合は、ベクトル フィールドに truncationDimension
プロパティを指定して、テキスト埋め込みのディメンションを減らすこともできます。
MRL マルチレベル圧縮では、ベクトル ストレージが節約され、テキスト埋め込みに基づいてベクトル クエリのクエリ応答時間が向上します。 Azure AI 検索では、MRL のサポートは、量子化の別の方法と共にのみ提供されます。 MRL でバイナリ量子化を使用すると、最大限のベクトル インデックス サイズの削減が提供されます。 最大のストレージ削減を実現するには、MRL でバイナリ量子化を使用し、stored
を false に設定します。
この機能はプレビュー段階にあります。 これは、2024-09-01-preview
およびプレビュー API バージョンを対象とするベータ版 SDK パッケージで利用できます。
前提条件
Text-embedding-3-small や Text-embedding-3-large などの Text-embedding-3 モデル (テキスト コンテンツのみ)。
Edm.Half
またはEdm.Single
型の新しいベクトル フィールド (既存のフィールドに MRL 圧縮を追加することはできません)。Hierarchical Navigable Small World (HNSW) アルゴリズム (このプレビューでは、網羅的 KNN はサポートされていません)。
スカラーまたはバイナリ量子化。 切り詰められたディメンションは、スカラーまたはバイナリ量子化が構成されている場合にのみ設定できます。 MRL 圧縮の場合はバイナリ量子化をお勧めします。
サポートされるクライアント
REST API または Azure SDK ベータ パッケージを使って、MRL 圧縮を実装できます。
各 Azure SDK ベータ パッケージ (Python、.NET、Java、JavaScript) の変更ログをご確認ください。
現時点では、Azure portal または Azure AI Studio のサポートはありません。
MRL 拡張テキスト埋め込みの使用方法
MRL は、既に使っているテキスト埋め込みモデルに組み込まれる機能です。 Azure AI 検索でこれらの機能を活用するには、次の手順に従います。
インデックス スキーマを指定するには、インデックスの作成または更新 (プレビュー) または同等の API を使います。
インデックス定義にベクトル フィールドを追加します。
インデックス定義で
vectorSearch.compressions
オブジェクトを指定します。スカラーまたはバイナリ (推奨) のいずれかの量子化方法を含めます。
truncationDimension
パラメーターを 512 に設定して含めるか、text-embedding-3-large モデルを使用する場合は最低 256 に設定します。HNSW アルゴリズムとベクトル圧縮オブジェクトを指定するベクトル プロファイルを指定します。
フィールド コレクション内の
Edm.Half
またはEdm.Single
型のベクトル フィールドに、ベクトル プロファイルを割り当てます。
MRL 対応のテキスト埋め込みモデルを使用するためのクエリ側の変更はありません。 垂直統合、クエリ時のテキストからクエリへの変換、セマンティック ランク付け、元のベクトルとの再ランク付けやオーバーサンプリングなどのその他の関連強化機能は、MRL サポートの影響を受けません。
手順が増えるためインデックスの作成は遅くなりますが、クエリは速くなります。
MRL をサポートするベクトル検索構成の例
次の例は、MRL の要件と推奨事項を満たすベクトル検索構成を示しています。
truncationDimension
は圧縮プロパティです。 スカラーやバイナリ圧縮などの圧縮方法と併せて、メモリ内のベクトル グラフの圧縮量を指定します。 バイナリ量子化を使用する truncationDimension
には、1,024 以上をお勧めします。 ディメンションが 1,000 未満の場合、MRL とバイナリ圧縮を使用すると、検索結果の品質が低下します。
{
"vectorSearch": {
"profiles": [
{
"name": "use-bq-with-mrl",
"compression": "use-mrl,use-bq",
"algorithm": "use-hnsw"
}
],
"algorithms": [
{
"name": "use-hnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
],
"compressions": [
{
"name": "use-mrl",
"kind": "truncation",
"rerankWithOriginalVectors": true,
"defaultOversampling": 10,
"truncationDimension": 1024
},
{
"name": "use-bq",
"kind": "binaryQuantization",
"rerankWithOriginalVectors": true,
"defaultOversampling": 10
}
]
}
}
MRL の要件を満たすすべて指定されたベクトル フィールド定義の例を次に示します。
ベクトル フィールドは、Edm.Half
型または Edm.Single
型である必要があることを思い出してください。 ベクトル フィールドには、アルゴリズムと圧縮設定を決定する vectorSearchProfile
プロパティが必要です。 ベクトル フィールドには、スコアリングとランク付けの結果のディメンション数を指定するために使用される dimensions
プロパティがあります。 その値は、使用しているモデルのディメンション制限である必要があります (text-embedding-3-small の場合は 1,536)。
{
"name": "text_vector",
"type": "Collection(Edm.Single)",
"searchable": true,
"filterable": false,
"retrievable": false,
"stored": false,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"normalizer": null,
"dimensions": 1536,
"vectorSearchProfile": "use-bq-with-mrl",
"vectorEncoding": null,
"synonymMaps": []
}