ベクトル サイズを小さくする簡単な方法は、埋め込みをより小さなデータ形式で保存することです。 ほとんどの埋め込みモデルでは、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 の [Search management > Indexes]\(インデックスの検索管理\) ページのベクター インデックス サイズ列を参照してください。 または、 GET Index Statistics (REST API) または同等の Azure SDK メソッドを使用することもできます。
注
フィールドのデータ型は、物理データ構造を作成するために使用されます。 後でデータ型を変更する場合は、 インデックスを削除して再構築 するか、新しい定義で 2 番目のフィールドを作成します。