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 cosenoeuclidean
- Distancia euclidianadot
- (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