Azure AI 検索でベクトル フィールドに狭いデータ型を割り当てる
ベクトル サイズを小さくする簡単な方法は、埋め込みをより小さなデータ形式で保存することです。 ほとんどの埋め込みモデルでは 32 ビット浮動小数点数が出力されますが、ベクトルを量子化する場合、または埋め込みモデルでネイティブにサポートされている場合は、float16、int16、または int8 が出力される可能性があります。この場合、float32 よりも大幅に小さくなります。 ナロー データ型をベクトル フィールドに割り当てることで、これらの小さなベクトル サイズに対応できます。 ベクトル インデックスでは、ナロー データ型の方がストレージの消費量が少なくなります。
フィールドへのデータ型の割り当ては、インデックスの定義で行います。 Azure portal、Search REST API、またはその機能を提供する Azure SDK パッケージを使用できます。
前提条件
- text-embedding-3 や Cohere V3 埋め込みモデルなど、小さなデータ形式を出力する埋め込みモデル。
サポートされている狭いデータ型
推奨される使用方法については、「ベクトル フィールドに使用されるデータ型」を確認してください。
Collection(Edm.Single)
32 ビット浮動小数点 (既定値)Collection(Edm.Half)
16 ビット浮動小数点 (ナロー)Collection(Edm.Int16)
16 ビット符号付き整数 (ナロー)Collection(Edm.SByte)
8 ビット符号付き整数 (ナロー)Collection(Edm.Byte)
8 ビット符号なし整数 (パックされたバイナリ データ型でのみ使用できます)
そのリストから、埋め込みモデルの出力、またはカスタム量子化の対象となるベクトルに対して有効なデータ型を決定します。
次の表は、追加の量子化なしでナロー データ型 (
Collection(Edm.Half)
) を使用できるいくつかの埋め込みモデルへのリンクを示しています。 追加の作業なしで float32 から float16 (Collection(Edm.Half)
を使用) にキャストできます。埋め込みモデル ネイティブ出力 Azure AI 検索でこの型を割り当てる text-embedding-ada-002 Float32
Collection(Edm.Single)
またはCollection(Edm.Half)
text-embedding-3-small Float32
Collection(Edm.Single)
またはCollection(Edm.Half)
text-embedding-3-large Float32
Collection(Edm.Single)
またはCollection(Edm.Half)
int8 embedding_type を使用した Cohere V3 埋め込みモデル Int8
Collection(Edm.SByte)
モデルがより小さなデータ形式で埋め込みを生成する場合、またはベクトルをより小さな形式に変換するカスタム量子化がある場合は、他のナロー データ型を使用できます。
狭いデータ型のトレードオフを理解していることを確認します。
Collection(Edm.Half)
には含まれる情報が少ないため、解像度が低くなります。 データが同種または高密度の場合、追加の詳細情報や微妙な差異が失われると、近くのベクトルを区別するために使用できる詳細情報が少なくなるため、クエリ時に許容できない結果になることがあります。
データ型を割り当てる
インデックスを定義して構築します。 この手順では、Azure portal、Create or Update Index (REST API)、または Azure SDK パッケージを使用できます。
このフィールド定義では、float16 の値として格納された float32 の埋め込みを受け入れることができる狭いデータ型 Collection(Edm.Half)
を使います。 すべてのベクター フィールドでそうであるように、dimensions
と vectorSearchProfile
が設定されます。 vectorSearchProfile
の詳細は、データ型には重要ではありません。
フィールドの値を目で見て調べたい場合は、retrievable
と stored
を true に設定することをお勧めします。 後の再構築では、これらのプロパティを false に変更して、必要なストレージを減らすことができます。
{
"name": "nameEmbedding",
"type": "Collection(Edm.Half)",
"searchable": true,
"filterable": false,
"retrievable": true,
"sortable": false,
"facetable": false,
"key": false,
"indexAnalyzer": null,
"searchAnalyzer": null,
"analyzer": null,
"synonymMaps": [],
"dimensions": 1536,
"vectorSearchProfile": "myHnswProfile"
}
ベクトル フィールドはフィルター可能、並べ替え可能、ファセット可能ではないことに注意してください。 それをキーとして使うことはできず、アナライザーやシノニム マップは使われません。
運用インデックスの操作
新しいフィールドが作成されるときに、データ型が割り当てられます。 既存のフィールドのデータ型を変更することはできず、インデックスを再構築しないでフィールドを削除することはできません。 運用環境で既に確立されているインデックスの場合、この問題の一般的な回避策は、必要なリビジョンで新しいフィールドを作成した後、計画的なインデックス再構築の間に古いフィールドを削除することです。
結果をチェックする
フィールドの内容がデータ型と一致することを確認します。 ベクトル フィールドが
retrievable
とマークされている場合は、Search エクスプローラーまたは Search - POST を使って、ベクトル フィールドの内容を返します。ベクトル インデックスのサイズを調べるには、Azure portal の [検索管理] > [インデックス] ページのベクトル インデックス サイズ列を参照するか、GET Statistics (REST API) または同等の Azure SDK メソッドを使ってサイズを取得します。
Note
フィールドのデータ型は、物理データ構造を作成するために使用されます。 後でデータ型を変更する場合は、インデックスを削除して再構築するか、新しい定義で 2 つ目のフィールドを作成します。