次の方法で共有


VECTOR_DISTANCE (Transact-SQL) (プレビュー)

適用対象:Azure SQL データベース Azure SQL Managed Instance

Note

このデータ型はプレビュー段階であり、変更される可能性があります。 Online Services のサービス レベル アグリーメント (SLA) ドキュメントで、プレビューの使用条件をお読みください。

指定した距離メトリックを使用して、2 つのベクトル間の距離を計算します。

構文

Transact-SQL 構文表記規則

VECTOR_DISTANCE ( distance_metric, vector1, vector2 )

引数

distance_metric

指定された 2 つのベクトル間の距離を計算するために使用する距離メトリックの名前を持つ文字列。 次の距離メトリックがサポートされています。

  • cosine - コサイン距離
  • euclidean - ユークリッド距離
  • dot - (負の) ドット積

vector1

バイナリ形式で ベクトル に評価される式。

vector2

バイナリ形式でベクターに評価される式。

距離メトリック

メトリック 説明 Range
cosine コサイン (角度) 距離 [0, 2] 0: 同一のベクトル
2: 反対のベクトル
euclidean ユークリッド距離 [-∞, +∞] 0: 同一のベクトル
dot ドット積に基づく距離の表示、
ドット積を計算することによって得られる
[-∞, +∞] 数値が小さいほど、ベクトルが類似していることが示されます

戻り値

この関数は、指定した距離メトリックを使用して 2 つのベクトル間の距離を表すスカラー float 値を返します。

distance_metricが有効なメトリックではない場合、および指定されたバイナリ値が有効なベクトルを表していない場合は、エラーが返されます。

Azure SQL Database Vector Search Samples GitHub リポジトリを確認して、エンドツーエンドの作業サンプルを取得します。

例では、タイトルの Wikipedia 記事の埋め込みを格納するvector型の列title_vectorwikipedia_articlesという名前のテーブルが存在することを前提としています。 title_vector は、 text-embedding-ada-002text-embedding-3-small などの埋め込みモデルを使用して生成された埋め込みであると見なされます。これは、1,536 次元のベクトルを返します。

例 1

次の例では、JSON 配列を持つ文字列から 3 次元のベクターを作成します。

DECLARE @v1 VECTOR(2) = '[1,1]';
DECLARE @v2 VECTOR(2) = '[-1,-1]';

SELECT 
    VECTOR_DISTANCE('euclidean', @v1, @v2) AS euclidean,
    VECTOR_DISTANCE('cosine', @v1, @v2) AS cosine,
    VECTOR_DISTANCE('dot', @v1, @v2) AS negative_dot_product;

例 2

次の例では、タイトル ベクター間のコサイン距離に基づいて、特定のアーティクルに最も類似した記事の上位 10 個を返します。 サンプルで使用されているデータベースの詳細については、 Vector Embeddings を使用した Wikipedia 記事のダウンロードとインポートを参照してください。

DECLARE @v AS VECTOR(1536);
SELECT @v = title_vector FROM [dbo].[wikipedia_articles] WHERE title = 'Alan Turing';

SELECT TOP(10) 
  id, 
  title, 
  VECTOR_DISTANCE('cosine', @v, title_vector) AS distance 
FROM 
  [dbo].[wikipedia_articles] 
ORDER BY
  distance

例 3

次の例では、タイトル ベクトル間のコサイン距離に基づいて、距離が 0.3 未満のアーティクルのみを選択して、特定のアーティクルに類似するすべてのアーティクルを返します。

DECLARE @v AS VECTOR(1536);
SELECT @v = title_vector FROM [dbo].[wikipedia_articles] WHERE title = 'Alan Turing';

SELECT  
  id, 
  title,
  VECTOR_DISTANCE('cosine', @v, title_vector) AS distance
FROM 
  [dbo].[wikipedia_articles] 
WHERE
  VECTOR_DISTANCE('cosine', @v, title_vector) < 0.3
ORDER BY
  distance