Ejecutar una búsqueda de similitud de vectores

En este documento se explica cómo realizar búsquedas de similitud de vectores en AlloyDB para PostgreSQL mediante la extensión pgvector. La búsqueda de similitud vectorial, también conocida como búsqueda del vecino más cercano, te permite encontrar los puntos de datos de tus datos que son más similares a un vector de consulta determinado.

Puedes consultar tu base de datos de AlloyDB para buscar vectores semánticamente similares después de almacenar e indexar las incrustaciones. Usa las funciones de consulta de pgvector para encontrar los elementos más cercanos a un vector de inserción.

Para obtener más información sobre cómo almacenar las inserciones vectoriales y crear un índice, consulta los artículos Almacenar inserciones vectoriales y Crear índices, respectivamente.

Para realizar una búsqueda de similitud, especifica la tabla, la columna de inserciones, la función de distancia, la inserción de destino y el número de filas que quieres que se devuelvan. También puedes usar la función embedding() para traducir texto a un vector y, a continuación, comparar el vector con los embeddings almacenados mediante operadores pgvector.

Para encontrar los vecinos semánticos más cercanos de un vector de embedding, puedes ejecutar la siguiente consulta de ejemplo, en la que se define la misma función de distancia que se usó durante la creación del índice.

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

Haz los cambios siguientes:

  • TABLE: la tabla que contiene la inserción con la que se va a comparar el texto.

  • EMBEDDING_COLUMN: la columna que contiene las inserciones almacenadas.

  • DISTANCE_FUNCTION_QUERY: la función de distancia que se va a usar con esta consulta. Elige una de las siguientes opciones en función de la función de distancia utilizada al crear el índice:

    • Distancia L2: <->

    • Producto interior: <#>

    • Distancia del coseno: <=>

  • EMBEDDING: el vector de inserción del que quieres encontrar los vecinos semánticos almacenados más cercanos.

  • ROW_COUNT: número de filas que se van a devolver.

    Especifica 1 si solo quieres la mejor coincidencia.

Para obtener más información sobre otros ejemplos de consultas, consulta Consultas.

También puedes usar la función embedding() para traducir el texto a un vector y para encontrar las filas de la base de datos con las incrustaciones más similares semánticamente. La extensión pgvector PostgreSQL de stock se ha personalizado para AlloyDB y se denomina vector. Aplica el vector a uno de los operadores de pgvector vecinos más cercanos, por ejemplo, <=> para la distancia del coseno.

Como embedding() devuelve una matriz real, debes convertir explícitamente la llamada embedding() a vector para usar estos valores con operadores pgvector.

  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Haz los cambios siguientes:

  • MODEL_ID: ID del modelo que se va a consultar.

    Si usas Vertex AI Model Garden, especifica text-embedding-005 como ID de modelo. Estos son los modelos basados en la nube que AlloyDB puede usar para las incrustaciones de texto. Para obtener más información, consulta Inserciones de texto.

  • Opcional: VERSION_TAG es la etiqueta de versión del modelo que se va a consultar. Añade el prefijo @ a la etiqueta.

    Si usas uno de los modelos en inglés de text-embedding-005 con Vertex AI, especifica una de las etiquetas de versión (por ejemplo, text-embedding-005) que se indican en Versiones del modelo.

    Google recomienda que siempre especifiques la etiqueta de versión. Si no especifica la etiqueta de versión, AlloyDB usará la versión más reciente del modelo, lo que podría dar lugar a resultados inesperados.

  • TEXT: el texto que se va a traducir a una incrustación de vector.

Para acelerar la búsqueda de k-NN filtrada, puedes usar el motor en columnas de AlloyDB. Para obtener más información, consulta Acelerar la búsqueda vectorial filtrada (vista previa) y Configurar el motor columnar.

Siguientes pasos