VECTOR_DISTANCE (Transact-SQL) (プレビュー)
適用対象:Azure SQL データベース Azure SQL Managed Instance
Note
このデータ型はプレビュー段階であり、変更される可能性があります。 Online Services のサービス レベル アグリーメント (SLA) ドキュメントで、プレビューの使用条件をお読みください。
指定した距離メトリックを使用して、2 つのベクトル間の距離を計算します。
構文
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_vector
wikipedia_articles
という名前のテーブルが存在することを前提としています。 title_vector
は、 text-embedding-ada-002 や text-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