VECTOR_DISTANCE (Transact-SQL) (versão prévia)
Aplica-se a: Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Observação
Esse tipo de dados está em versão prévia e está sujeito a alterações. Não deixe de ler os termos de uso da versão prévia no documento SLA (Contratos de Nível de Serviço) para serviços online.
Calcula a distância entre dois vetores usando uma métrica de distância especificada.
Sintaxe
Convenções de sintaxe de Transact-SQL
VECTOR_DISTANCE ( distance_metric, vector1, vector2 )
Argumentos
distance_metric
Uma string com o nome da métrica de distância a ser usada para calcular a distância entre os dois vetores fornecidos. As seguintes métricas de distância são suportadas:
cosine
- Distância do cossenoeuclidean
- Distância euclidianadot
- (Negativo) Produto escalar
vetor1
Uma expressão que é avaliada como um vetor em formato binário.
vetor2
Uma expressão que é avaliada como um vetor em formato binário.
Métricas de distância
Métrica | Descrição | Intervalo | Exemplos |
---|---|---|---|
cosine |
Distância do cosseno (angular) | [0, 2] | 0 : vetores idênticos 2 : vetores opostos |
euclidean |
Distância euclidiana | [-∞, +∞] | 0 : vetores idênticos |
dot |
Indicação de distância baseada em produto escalar, obtido pelo cálculo do produto escalar negativo |
[-∞, +∞] | Números menores indicam vetores mais semelhantes |
Valor retornado
A função retorna um valor escalar flutuante que representa a distância entre os dois vetores usando a métrica de distância especificada.
Um erro será retornado se distance_metric não for uma métrica válida e se os valores binários fornecidos não representarem vetores válidos.
Exemplos
Examine o repositório GitHub de Exemplos de Pesquisa de Vetor do Banco de Dados SQL do Azure para obter exemplos de trabalho de ponta a ponta.
Os exemplos assumem a existência de uma tabela nomeada wikipedia_articles
com uma coluna title_vector
do tipo vector
que armazena as incorporações de títulos de artigos da Wikipédia. title_vector
é considerado uma incorporação gerada com um modelo de incorporação como text-embedding-ada-002 ou text-embedding-3-small , que retorna vetores com 1.536 dimensões.
Exemplo 1
O exemplo a seguir cria um vetor com três dimensões de uma cadeia de caracteres com uma matriz 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;
Exemplo 2
O exemplo a seguir retorna os 10 artigos mais semelhantes a um determinado artigo, com base na distância do cosseno entre seus vetores de título. Detalhes do banco de dados usado na amostra podem ser encontrados aqui: Baixe e importe o artigo da Wikipedia com incorporações vetoriais
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
Exemplo 3
O exemplo a seguir retorna todos os artigos semelhantes a um determinado artigo, com base na distância do cosseno entre seus vetores de título, selecionando apenas aqueles com uma distância menor que 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