Compartilhar via


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 cosseno
  • euclidean - Distância euclidiana
  • dot - (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