Habilitación y uso de pgvector en Azure Database for PostgreSQL: servidor flexible
SE APLICA A: Azure Database for PostgreSQL con servidor flexible
La extensión pgvector
agrega una búsqueda de similitud vectorial de código abierto a PostgreSQL.
En este artículo se presentan funcionalidades adicionales habilitadas por pgvector
. Se describen los conceptos de similitud de vectores e inserciones, y se proporcionan instrucciones sobre cómo habilitar la extensión pgvector
. Verá cómo crear, almacenar y consultar los vectores.
Es posible que también quiera consultar el archivo LÉAME oficial del proyecto.
Habilitación de una extensión
Para poder habilitar pgvector
en la instancia de servidor flexible de Azure Database for PostgreSQL, debe agregarla a la lista de permitidos, tal como se describe en cómo usar extensiones de PostgreSQL y comprobar si se ha agregado correctamente mediante la ejecución de SHOW azure.extensions;
.
Importante
Observe que, aunque toda la comunidad de PostgreSQL tiende a hacer referencia a esta extensión como pgvector, el nombre del archivo binario y la propia extensión es simplemente vector
. Tenga esto en cuenta, ya que es el nombre que debe usar para incluirlo en la lista de permitidos o para crearlo en cualquier base de datos a través del comando CREATE EXTENSION.
A continuación, puede instalar la extensión mediante la conexión a la base de datos de destino y la ejecución del comando CREATE EXTENSION. Debe repetir el comando por separado para cada base de datos en la que quiera que la extensión esté disponible.
CREATE EXTENSION vector;
Nota:
Para quitar la extensión de la base de datos conectada actualmente, use DROP EXTENSION vector;
.
Conceptos
Similitud de vectores
La similitud de vectores es un método que se usa para medir la similitud de dos elementos mediante su representación como vectores, que son series de números. Los vectores se usan a menudo para representar puntos de datos, donde cada elemento del vector representa una característica o atributo del punto de datos.
La similitud de vectores se calcula normalmente mediante métricas de distancia, como la similitud de Euclidean distance
o cosine
. La distancia euclidiana mide la distancia en línea recta entre dos vectores en el espacio unidimensional, mientras que la similitud coseno mide el coseno del ángulo entre dos vectores. Los valores de las métricas de similitud suelen oscilar entre 0
y 1
, con valores higher
que indican una mayor similitud entre los vectores.
La similitud de vectores se usa ampliamente en varias aplicaciones, como las de sistemas de recomendación, clasificación de texto, reconocimiento de imágenes y agrupación en clústeres. Por ejemplo, en los sistemas de recomendaciones, la similitud vectorial se puede usar para identificar elementos similares en función de las preferencias del usuario. En la clasificación de texto, la similitud vectorial se puede usar para determinar la similitud entre dos documentos u oraciones en función de sus representaciones vectoriales.
Inserciones
Una inserción es una técnica para evaluar la "relación" de texto, imágenes, vídeos u otros tipos de información. La evaluación permite que los modelos de Machine Learning identifiquen eficazmente las relaciones y similitudes entre los datos, lo que permite a los algoritmos identificar patrones y realizar predicciones precisas. Por ejemplo, en una tarea de análisis de sentimiento, es posible que las palabras con inserciones similares tengan puntuaciones de opinión similares.
Introducción
Cree un tblvector
de tabla con una columna embedding
de tipo vector(3)
que represente un vector tridimensional.
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
Una vez que haya generado una inserción mediante un servicio como la API de OpenAI, puede almacenar el vector resultante en la base de datos. La definición de un vector como vector(3)
designa [x,y,z] coordinates
en el plano tridimensional. El comando inserta cinco filas nuevas en la tabla tblvector
con las inserciones proporcionadas.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');
Al usar la instrucción INSERT INTO ... ON CONFLICT
, puede especificar una acción alternativa, como actualizar registros que coincidan con los criterios. Le permite controlar posibles conflictos de una manera más eficaz.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
El comando DELETE
quita las filas de una tabla especificada según las condiciones especificadas en la cláusula WHERE. Cuando la cláusula WHERE no está presente, se eliminan todas las filas de la tabla.
DELETE FROM tblvector WHERE id = 1;
Para recuperar vectores y calcular la similitud, use instrucciones SELECT
y los operadores vectoriales integrados. Por ejemplo, la consulta calcula la distancia euclidiana (distancia L2) entre el vector especificado y los vectores almacenados en la tabla tblvector
, ordena los resultados por la distancia calculada y devuelve los cinco elementos más similares más cercanos.
SELECT * FROM tblvector
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
La consulta usa el operador "<->", que es el "operador de distancia" que se usa para calcular la distancia entre dos vectores en un espacio multidimensional. La consulta devuelve todas las filas con una distancia de menos de 6 con respecto al vector [3,1,2].
SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;
El comando recupera el valor medio de la columna "embedding" de la tabla "tblvector". Por ejemplo, si la columna "embedding" contiene inserciones de palabras para un modelo de lenguaje, el valor medio de estas inserciones se podría usar para representar toda la oración o documento.
SELECT AVG(embedding) FROM tblvector;
Operadores vectoriales
pgvector
presenta seis nuevos operadores que se pueden usar en vectores:
Operador | Descripción |
---|---|
+ | adición por elementos |
- | resta por elementos |
* | multiplicación por elementos |
<-> | Distancia euclidiana |
<#> | producto interno negativo |
<=> | distancia de coseno |
Funciones vectoriales
cosine_distance
Calcula la distancia de coseno entre dos vectores.
cosine_distance(vector, vector)
Argumentos
vector
Primero vector
.
vector
Segundo vector
.
Tipo de valor devuelto
double precision
como distancia entre los dos vectores proporcionados.
inner_product
Calcula el producto interno de dos vectores.
inner_product(vector, vector)
Argumentos
vector
Primero vector
.
vector
Segundo vector
Tipo de valor devuelto
double precision
como producto interno de los dos vectores.
l2_distance
Calcula la distancia euclidiana (también conocida como L2) entre dos vectores.
l2_distance(vector, vector)
Argumentos
vector
Primero vector
.
vector
Segundo vector
Tipo de valor devuelto
double precision
como la distancia euclidiana entre los dos vectores.
l1_distance
Calcula la distancia del taxista (también conocida como L1) entre dos vectores.
l1_distance(vector, vector)
Argumentos
vector
Primero vector
.
vector
Segundo vector
Tipo de valor devuelto
double precision
como la distancia del taxista entre los dos vectores.
vector_dims(vector)
Devuelve las dimensiones de un vector determinado.
Argumentos
vector
Un objeto vector
.
Tipo de valor devuelto
integer
representa el número de dimensiones del vector especificado.
vector_norms(vector)
Calcula la norma euclidiana de un vector determinado.
Argumentos
vector
Un objeto vector
.
Tipo de valor devuelto
double precision
representa la norma euclidiana del vector especificado.
Agregados vectoriales
AVG
Calcula el promedio de los vectores procesados.
Argumentos
vector
Un objeto vector
.
Tipo de valor devuelto
vector
representa el promedio de vectores procesados.
SUM
Argumentos
vector
Un objeto vector
.
Tipo de valor devuelto
vector
representa la suma de vectores procesados.
Pasos siguientes
Obtenga más información sobre el rendimiento, la indexación y las limitaciones con pgvector
.