SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2025 のベクターデータ型 / べークターインデックスについて確認した内容 その 2

leave a comment

SQL Server 2025 のベクターデータ型 / べークターインデックスについて確認した内容 その 1 の続きです。

ベクターデータの次元数の削減

その 1 で記載しましたが、ベクター検索のオーバーヘッドストレージと処理は何ですか? に記載されているように、ベクターデータ型で使用されるデータ領域は次元数に依存しています。

SQL Server データ ページには最大 8,060 バイトを保持できるため、ベクターのサイズは、1 つのページに格納できるベクターの数に影響します。 たとえば、1,024 次元のベクターがあり、各次元が単精度 浮動小数点数 (4 バイト) の場合、ベクターの合計サイズは 4,104 バイト (4096 バイトペイロード + 8 バイト ヘッダー) になります。 これにより、1 ページに収まるベクターの数が 1 に制限されます。

検索の精度とのトレードオフですが、大量のデータにベクトルの埋め込みを行う場合、ストレージ削減の観点でベクターデータの次元数を削減する必要が出てくるかもしれません。

OpenAI の API を使用する場合ですが、「text-embedding-3 以降のモデル」では  次元数が調整 できるようになっています。

現状、Azure OpenAI Service で提供されているモデルとして、Embedding で使用できるものは、次の 3 種類となりますが、「text-embedding-ada-002 以外」であれば、次元数の調整ができます。

  • text-embedding-ada-002
  • text-embedding-3-large
  • text-embedding-3-small

text-embedding-ada-002 が提供されたのが 2022/12/15 で text-embedding-3-large / small が提供されたのが、2024/01/25 となります。

text-embedding-ada-002 と比較すると、text-embedding-3-small のほうが精度 / コスト / スループットのバランスがよさそうですので、今までは何となく text-embedding-ada-002 を使用していたのですが、text-embedding-3-small を使用するように切り替えようかと思っています。

次元数はリクエストのボディに「dimensions」を指定することで調整できますので、CREATE EXTERNAL MODEL の PARAMETERS を指定して次元数を調整します。

CREATE EXTERNAL MODEL [text-embedding-3-small-768]
WITH (
      LOCATION = 'https://xxxxxxx.openai.azure.com/openai/deployments/text-embedding-3-small/embeddings?api-version=2023-05-15',
      API_FORMAT = 'Azure OpenAI',
      MODEL_TYPE = EMBEDDINGS,
      MODEL = 'text-embedding-3-small-768',
      CREDENTIAL =  [https://xxxxxxx.openai.azure.com/openai/deployments/text-embedding-3-small],
      PARAMETERS = '{"dimensions":768}'
);
GO

 

これにより、次元数を削減した状態で埋め込みを作成することができます。float32 / float16 の指定も含めると調整の余地はかなりありそうですね。

  • 1536,  float32 (デフォルト): 6,152 バイト
  • 1536,  float16: 3,080 バイト
  • 768, float32: 3,080 バイト
  • 768, float16: 1,544 バイト
Share

Written by Masayuki.Ozawa

12月 14th, 2025 at 4:42 pm

Leave a Reply