VECTOR_DISTANCE (Transact-SQL) (预览版)
适用于: Azure SQL 数据库
Azure SQL 托管实例
注意
该数据类型为预览版,可能会发生变化。 请务必阅读联机服务的服务级别协议 (SLA) 文档中的预览版使用条款。
使用指定的距离指标计算两个向量之间的距离。
语法
VECTOR_DISTANCE ( distance_metric, vector1, vector2 )
参数
distance_metric
一个字符串,其中包含用于计算两个给定向量之间的距离的距离指标的名称。 支持以下距离指标:
cosine
- 余弦距离euclidean
- Euclidean 距离dot
- (负数) 点积
vector1
一个以二进制格式计算为 矢量 的表达式。
vector2
一个以二进制格式计算为矢量的表达式。
距离指标
跃点数 | 说明 | 范围 | 示例 |
---|---|---|---|
cosine |
余弦(角)距离 | [0, 2] | 0 :相同的向量 2 :对立向量 |
euclidean |
欧几里得距离 | [-∞, +∞] | 0 :相同的向量 |
dot |
基于点产品的距离指示, 通过计算 负 点积获取 |
[-∞, +∞] | 较小的数字表示更相似的向量 |
返回值
该函数返回一个标量浮点值,该值表示使用指定距离指标的两个向量之间的距离。
如果 distance_metric 不是有效的指标,并且提供的二进制值不表示有效向量,则返回错误。
示例
查看Azure SQL 数据库矢量搜索示例 GitHub 存储库以获取端到端工作示例。
示例假定存在一个表,该表具有wikipedia_articles
存储标题的维基百科文章嵌入的类型vector
列title_vector
。 title_vector
假定是使用嵌入模型(如 text-embedding-ada-002 或 text-embedding-3-small )生成的嵌入,该模型返回具有 1,536 个维度的矢量。
示例 1
以下示例使用 JSON 数组从字符串创建具有三个维度的向量。
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 Embedding 的维基百科文章
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