Información general de vectores en el Motor de base de datos de SQL
Se aplica a: Azure SQL Database
Los vectores son matrices ordenadas de números (normalmente floats) que pueden representar información sobre algunos datos. Por ejemplo, una imagen se puede representar como un vector de valores de píxeles o una cadena de texto se puede representar como un vector o valores ASCII. El proceso para convertir los datos en un vector se denomina vectorización.
Incrustraciones
Las incrustaciones son vectores que representan características importantes de los datos. Las incrustaciones a menudo se aprenden mediante un modelo de aprendizaje profundo, y los modelos de aprendizaje automático e inteligencia artificial las usan como características. Las incrustaciones también pueden capturar la similitud semántica entre conceptos similares. Por ejemplo, al generar una incrustación para las palabras person
y human
, podemos esperar que sus incrustaciones (representaciones vectoriales) tengan valores similares, ya que las palabras son semánticamente similares.
Azure OpenAI ofrece modelos para crear incrustaciones a partir de datos de texto. El servicio divide el texto en tokens y genera incrustaciones mediante modelos entrenados previamente por OpenAI. Para obtener más información, consulte Creación de incrustaciones con Azure OpenAI.
Una vez generadas las incrustaciones, se pueden almacenar en una base de datos de SQL Server. Esto le permite almacenar las incrustaciones junto con los datos que representan y realizar consultas de búsqueda vectorial para buscar puntos de datos similares.
Vector de búsqueda
La búsqueda de vectores hace referencia al proceso de búsqueda de todos los vectores de un conjunto de datos similar a un vector de consulta específico. Por lo tanto, un vector de consulta para la palabra human
busca en todo el conjunto de datos vectores similares y, por tanto, palabras similares: en este ejemplo debe encontrar la palabra person
como una coincidencia cercana. Esta proximidad, o distancia, se mide mediante una métrica de distancia, como la distancia coseno. Los vectores más cercanos son, más similares son.
SQL Server proporciona compatibilidad integrada con vectores a través del tipo de datos vectorial. Los vectores se almacenan en un formato binario optimizado, pero se exponen como matrices JSON para mayor comodidad. Cada elemento del vector se almacena mediante el valor de punto flotante de precisión única (4 bytes). Junto con el tipo de datos hay funciones dedicadas para operar en vectores. Por ejemplo, es posible encontrar la distancia entre dos vectores mediante la VECTOR_DISTANCE
función . La función devuelve un valor escalar con la distancia entre dos vectores en función de la métrica de distancia que especifique.
Dado que normalmente los vectores se administran como matrices de floats, la creación de un vector se puede hacer simplemente convertir una matriz JSON a un tipo de datos vectorial . Por ejemplo, el código siguiente crea un vector a partir de una matriz JSON:
SELECT CAST('[1.0, -0.2, 30]' AS VECTOR(3)) AS vector;
o bien, mediante la conversión implícita
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT @v;
Lo mismo sucede para convertir un vector en una matriz JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(@v AS NVARCHAR(MAX)) AS vector;
Limitaciones
Todavía no se admite la conversión en versión preliminar actual hacia y desde el tipo de datos JSON. La solución consiste en convertir primero desde o a NVARCHAR(MAX) y, a continuación, a/desde JSON. Por ejemplo, para convertir un vector en un tipo JSON:
DECLARE @v VECTOR(3) = '[1.0, -0.2, 30]';
SELECT CAST(CAST(@v AS NVARCHAR(MAX)) AS JSON) AS j;
y para convertir de un tipo JSON a vector:
DECLARE @j JSON = JSON_ARRAY(1.0, -0.2, 30)
SELECT CAST(CAST(@j AS NVARCHAR(MAX)) AS VECTOR(3)) AS v;
Puede encontrar más información sobre cómo usar vectores en SQL Server en los siguientes artículos: