Compartir a través de


VECTOR_DISTANCE (Transact-SQL) (versión preliminar)

Se aplica a: Azure SQL Database Azure SQL Managed Instance

Nota:

Este tipo de datos está en versión preliminar y está sujeto a cambios. Asegúrese de leer los términos de uso de la versión preliminar en el documento Acuerdo de Nivel de Servicio (SLA) para servicios en línea.

Calcula la distancia entre dos vectores mediante una métrica de distancia especificada.

Sintaxis

Convenciones de sintaxis de Transact-SQL

VECTOR_DISTANCE ( distance_metric, vector1, vector2 )

Argumentos

distance_metric

Cadena con el nombre de la métrica de distancia que se va a usar para calcular la distancia entre los dos vectores especificados. Se admiten las siguientes métricas de distancia:

  • cosine - Distancia de coseno
  • euclidean - Distancia euclidiana
  • dot - (Negativo) Producto de puntos

vector1

Expresión que se evalúa como un vector en formato binario.

vector2

Expresión que se evalúa como un vector en formato binario.

Métricas de distancia

Métrica Descripción Intervalo Ejemplos
cosine Distancia de coseno (angular) [0, 2] 0: vectores idénticos
2: vectores opuestos
euclidean Distancia euclidiana [-∞, +∞] 0: vectores idénticos
dot Indicación de distancia basada en producto de puntos,
obtenido calculando el producto de puntos negativos
[-∞, +∞] Los números más pequeños indican vectores más similares

Valor devuelto

La función devuelve un valor float escalar que representa la distancia entre los dos vectores mediante la métrica de distancia especificada.

Se devuelve un error si distance_metric no es una métrica válida y si los valores binarios proporcionados no representan vectores válidos.

Ejemplos

Revise el repositorio de GitHub de ejemplos de búsqueda vectorial de Azure SQL Database para obtener ejemplos de trabajo de un extremo a otro.

En los ejemplos se supone que existe una tabla denominada wikipedia_articles con una columna title_vector de tipo vector que almacena las inserciones de título de los artículos de Wikipedia. title_vector se supone que es una inserción generada con un modelo de inserción como text-embeding-ada-002 o text-embeding-3-small , que devuelve vectores con 1536 dimensiones.

Ejemplo 1

En el ejemplo siguiente se crea un vector con tres dimensiones a partir de una cadena con una 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;

Ejemplo 2

En el ejemplo siguiente se devuelven los 10 artículos más similares a un artículo determinado, en función de la distancia coseno entre sus vectores de título. Los detalles de la base de datos usada en el ejemplo se pueden encontrar aquí: Descargar e importar el artículo de Wikipedia con incrustaciones de vectores

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

Ejemplo 3

En el ejemplo siguiente se devuelven todos los artículos similares a un artículo determinado, en función de la distancia coseno entre sus vectores de título, seleccionando solo aquellos con una distancia inferior a 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