ベクター データ型とベクター検索を実装する

完了

SQL Server 2025 には、 ベクター データ型とベクター 検索のネイティブ サポートが含まれています。 この機能を使用すると、リレーショナル データと共に高次元ベクター埋め込みを格納し、類似性検索を実行できるため、データ内のセマンティック リレーションシップを理解するアプリケーションを構築できます。

ベクター検索は、従来のデータベース クエリの制限に対処します。 従来のデータベースは完全一致と構造化クエリに優れていますが、コンテキストと意味の理解に苦労しています。 ベクター検索では、セマンティック理解を有効にすることで、正確なキーワードを共有していない場合でも概念的に似た項目を見つけることができます。 たとえば、"快適なランニング シューズ" の検索では、ベクター埋め込みによって同様のセマンティック意味がキャプチャされるため、"クッション付き運動靴" と記述された製品を見つけることができます。

開発者にとって、これは、個別のベクター データベースや複雑なデータ同期プロセスを管理することなく、インテリジェントなアプリケーションを構築できることを意味します。 ベクターを SQL Server のリレーショナル データと共に保持することで、ACID コンプライアンスを維持し、既存のセキュリティ ポリシーを使用し、使い慣れた T-SQL 構文を使用して、アーキテクチャを簡略化します。 この統合は、次のようなシナリオに適用されます。

  • セマンティック検索と推奨事項: キーワードだけでなく、意味に基づいて関連する製品、ドキュメント、またはコンテンツを検索する
  • 質問に回答するシステム: エンタープライズ データに対する自然言語クエリを理解する Power Chatbot と仮想アシスタント
  • 異常検出: 意味的に通常の動作から離れたデータ ポイントを見つけることで、通常とは異なるパターンを特定する
  • コンテンツ重複除去: 異なる表現でも類似または重複するアイテムを検出する
  • パーソナル化エンジン: 微妙な類似性に基づいて、ユーザー設定を製品またはコンテンツに一致させる

ベクター データ型を調べる

SQL Server 2025 の ベクター データ型 は、浮動小数点数の配列を効率的に格納するように設計されています。 ベクターは、AI モデルによって生成される埋め込みを表すために一般的に使用されます。各ディメンションは、データの特定の特徴やセマンティック特性をキャプチャします。

主な特性を調べる

  • 最適化されたストレージ形式: ベクターは、内部的には最適化されたバイナリ形式で格納されますが、使いやすく互換性のために JSON 配列として公開されます。
  • 柔軟な精度: ベクトル内の各要素は、既定で単精度 (4 バイト) 浮動小数点値を使用して格納されます。 半精度 (2 バイト) float16 ストレージもサポートされていますが、現在、SQL Server 2025 ではプレビュー段階です。PREVIEW_FEATURESデータベース スコープの構成を有効にする必要があります。
  • ディメンションのサポート: SQL Server 2025 では、単精度で最大 1,998 次元のベクトルがサポートされます。 半精度 (プレビュー) を使用する場合、ベクターは最大 3,996 次元を持つことができます。

ベクターを作成して格納する

JSON 配列を vector データ型にキャストすることで、ベクターを作成できます。 次に例を示します。

-- Create a vector from a JSON array
DECLARE @v1 VECTOR(3) = '[1.0, -0.2, 30]';
DECLARE @v2 VECTOR(3) = JSON_ARRAY(1.0, -0.2, 30);

SELECT @v1 AS v1, @v2 AS v2;

このコードでは、JSON 文字列リテラルを直接キャストするか、 JSON_ARRAY 関数を使用して、3 次元ベクターを作成する 2 つの方法を示します。 どちらのメソッドも同じ結果を生成し、値 [1.0, -0.2, 30] をベクター データ型に格納します。

テーブルにベクターを格納するには:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name NVARCHAR(100),
    description NVARCHAR(MAX),
    embedding VECTOR(1536)  -- Common dimension for OpenAI embeddings
);

このコードでは、1536 次元ベクター埋め込みと共に製品情報を格納するテーブルを作成します。 1536 のディメンション サイズは、OpenAI のテキスト埋め込みモデルでよく使用され、このテーブルは製品の説明から生成された埋め込みを格納する準備ができています。

ベクターを JSON に変換する

ベクターは、表示または処理のために JSON 配列に簡単に変換できます。

DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT 
    CAST(@v AS NVARCHAR(MAX)) AS string_representation,
    CAST(@v AS JSON) AS json_representation;

このコードは、ベクターを読み取り可能な形式に変換します。 CASTするNVARCHAR(MAX)はベクターを文字列として返しますが、CASTJSONは JSON 配列として返します。これは、アプリケーションや API との相互運用性に役立ちます。

正確な最近隣検索 (k-NN) を実行する

正確な最近傍 (k-NN) 検索では、クエリ ベクターとデータセット内のすべてのベクトルの間の距離を計算し、最も近い k 個の一致を返します。 このメソッドは正確な結果を保証しますが、大規模なデータセットでは計算負荷が高くなります。

VECTOR_DISTANCE 関数を使用する

VECTOR_DISTANCE関数は、指定した距離メトリックを使用して、2 つのベクトル間の類似性を測定します。

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'Pink Floyd music style' 
    USE MODEL Ada2Embeddings
);

SELECT TOP (10) 
    product_id, 
    product_name,
    VECTOR_DISTANCE('cosine', @query_vector, embedding) AS distance
FROM products
ORDER BY distance;

このクエリでは、Ada2Embeddings モデルを使用して "Pink Floyd music style" というテキストの埋め込みを生成し、そのクエリに最も似た埋め込みを含む 10 個の製品を検索します。 VECTOR_DISTANCE関数は、クエリ ベクターと各製品の埋め込みの間のコサイン距離を計算します。距離が小さい方が類似性が高くなります。

距離メトリックの選択

SQL Server 2025 では、いくつかの距離メトリックがサポートされています。

  • コサインの類似性: ベクトル間の角度を測定し、テキスト埋め込みに最適
  • ユークリッド距離: ベクトル空間の直線距離を測定します。
  • ドット積: 正規化されたベクトルに役立ちます

正確な検索は、次の場合に推奨されます。

  • 検索するベクターが 50,000 個未満である
  • クエリ述語は、データセットを管理可能なサイズにフィルター処理します
  • 完璧な記憶が必要です(100% 完璧)
  • 余分な計算コストは許容されます

近似最近隣検索 (ANN) を実装する

大規模なデータセットの場合、近似最近傍 (ANN) 検索は速度と精度のバランスを取ります。 SQL Server 2025 は DiskANN アルゴリズムを使用して ANN を実装し、効率的なベクター ナビゲーションのためのグラフベースのインデックスを作成します。

リコールについて

リコールは、ANN アルゴリズムが正確な検索と比較して特定する真の再近傍の割合を測定します。 1.0 (100%) を取り消すと、近似検索は正確な検索と同じ結果を返します。 実際には、0.95 を超えるリコール値は、多くの場合、パフォーマンスを大幅に向上させながら、AI アプリケーションに優れた結果を提供します。

ベクター インデックスを作成する

Note

CREATE VECTOR INDEX VECTOR_SEARCHは、SQL Server 2025 のプレビュー機能です。 それらを使用する前に、プレビュー機能のデータベース スコープ構成オプションを有効にします。 ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;

ANN 検索を有効にするには、ベクター列に ベクター インデックス を作成します。

CREATE VECTOR INDEX idx_product_embedding 
ON products(embedding);

このコードでは、DiskANN アルゴリズムを使用して埋め込み列にベクター インデックスを作成します。 このインデックスは、効率的なベクター ナビゲーション用のグラフ構造を作成することで、大規模なデータセットでの近似最近隣検索のパフォーマンスを向上させます。

SQL Server 2025 のベクター インデックス:

  • DiskANN アルゴリズムを使用して効率的なグラフベースの検索を行う
  • 制限付きメモリと CPU リソースをサポートする
  • ディスク I/O、メモリ使用量、クエリ パフォーマンスのバランスを取る
  • データの変更時に自動的に更新する

VECTOR_SEARCH 関数を使用する

VECTOR_SEARCH関数は、おおよその最も近い近隣の検索を実行します。

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'Pink Floyd music style' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 10
    ) AS s
ORDER BY s.distance;

このクエリは、前に作成したベクター インデックスを使用して、近似最近隣検索を実行します。 VECTOR_SEARCH関数では、DiskANN アルゴリズムを使用して、すべてのベクトルをスキャンせずに最も類似した 10 個の製品を検索し、高い精度を維持しながら大規模なデータセットのパフォーマンスを向上させます。

パフォーマンス上の利点を考慮する

ANN 検索プラン:

  • クエリ実行の高速化: 特に、何百万ものベクターを含むデータセットの場合
  • リソース消費量の削減: 正確な検索と比較して CPU とメモリの使用量が削減されました
  • スケーラビリティ: 大規模なベクター データセットを効率的に処理する
  • 高い再現率: 通常、95%を超えるリコール率を達成し、品質の結果を保証します

ハイブリッド検索シナリオを構築する

SQL Server 2025 では、ハイブリッド検索シナリオでのベクター検索と従来の SQL 操作の組み合わせがサポートされています。

ベクトルを使用してセマンティック検索を実行すると同時に、従来のフィルターを適用することもできます。

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'comfortable running shoes' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    t.category,
    t.price,
    s.distance
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 20
    ) AS s
WHERE 
    t.category = 'Footwear'
    AND t.price BETWEEN 50 AND 150
ORDER BY s.distance;

このハイブリッド検索は、セマンティック類似性検索と従来の SQL フィルター処理を組み合わせた検索です。 まず、最も意味的に似た20の製品を「快適なランニングシューズ」に見つけ、その結果をフィルター処理して、50 USD から 150 USD の間の価格のフットウェアアイテムのみを含めます。 この方法では、セマンティック理解を使用しながら正確なターゲット設定を行います。

フルテキスト検索とベクター検索を組み合わせて包括的な結果を得る:

DECLARE @query_vector VECTOR(1536) = AI_GENERATE_EMBEDDINGS(
    N'sustainable materials' 
    USE MODEL Ada2Embeddings
);

SELECT 
    t.product_id,
    t.product_name,
    s.distance,
    fts.RANK AS text_rank
FROM
    VECTOR_SEARCH(
        TABLE = products AS t, 
        COLUMN = embedding, 
        SIMILAR_TO = @query_vector, 
        METRIC = 'cosine', 
        TOP_N = 50
    ) AS s
INNER JOIN CONTAINSTABLE(products, description, 'sustainable OR eco-friendly') AS fts
    ON t.product_id = fts.[KEY]
ORDER BY (s.distance * 0.6) + ((1.0 - fts.RANK/1000.0) * 0.4);

このクエリでは、ベクター検索とフルテキスト検索を組み合わせます。 ベクター埋め込みを使用して意味的に "持続可能な素材" に似た製品を見つけ、説明の中でキーワード "持続可能" または "環境に優しい" のフルテキスト検索結果と結合します。 最終的なランク付けでは、両方のスコアが加重式 (60% セマンティック類似性、40% キーワード一致) と結合されます。

ベスト プラクティスを適用する

SQL Server 2025 でベクター検索を実装する場合:

  • 適切な精度を選択します。ストレージの効率が重要な場合に大きなサイズに半精度 (float16、SQL Server 2025 のプレビュー) を使用する
  • 戦略的にインデックスを作成する: 頻繁に検索される列にベクター インデックスを作成する
  • 再現率を監視する: ANN クエリをテストして、ユースケースの許容できる再現率を確保する
  • クエリを最適化する: 適切なフィルターを使用して、ベクター操作の前に検索領域を減らす
  • バッチ操作: パフォーマンスを向上させるために、埋め込みをバッチで生成して挿入する

これらのベクター機能を使用すると、セマンティックリレーションシップを理解し、インテリジェントな推奨事項を提供し、自然言語検索エクスペリエンスを提供する AI を利用したアプリケーションを構築できます。これらはすべて、信頼できる SQL Server プラットフォーム内にあります。