Descripción general de la búsqueda de vectores de Spanner Omni

La búsqueda de vectores en Spanner Omni es una función integrada de alto rendimiento que permite la búsqueda semántica y la correlación de similitud en datos de vectores de alta dimensión. Al almacenar y, luego, indexar los embeddings de vectores directamente en tu base de datos transaccional, Spanner Omni elimina las bases de datos de vectores independientes y las canalizaciones complejas de extracción, transformación y carga (ETL).

Los temas de este documento se aplican a Spanner Omni de la misma manera que a Spanner.

La búsqueda de vectores te permite encontrar elementos semánticamente similares representando los datos como vectores numéricos (embeddings). Spanner Omni admite dos métodos de búsqueda principales:

  • K-vecinos más cercanos (KNN): Realiza una búsqueda exacta calculando la distancia entre la búsqueda y cada vector del conjunto de datos. Proporciona la recuperación más alta, pero puede ser costoso en términos de procesamiento para conjuntos de datos grandes.

  • Vecinos más cercanos aproximados (ANN): Usa un índice de vectores para encontrar coincidencias rápidamente en grandes conjuntos de datos. Intercambia una pequeña cantidad de exactitud (recuperación) por ganancias en velocidad y escalabilidad.

La búsqueda de vectores es especialmente potente cuando se combina con otras funciones:

Combinación Beneficio
Búsqueda de vectores con filtrado de SQL Combinar de manera eficiente la búsqueda vectorial con filtros (por ejemplo, "Buscar imágenes similares en las que categoría = "zapatos" y precio < 100").
Búsqueda de vectores y búsqueda en el texto completo Combina la similitud semántica con la precisión de las palabras clave usando la fusión de clasificación recíproca (RRF) para mejorar la relevancia de la búsqueda.
Vector y gráfico Usa la búsqueda de vectores para encontrar puntos de entrada (nodos) relevantes en un gráfico de propiedades y, luego, recorre relaciones complejas.

Para obtener más información, consulta la descripción general de la búsqueda de vectores de Spanner en la documentación de Spanner.

Spanner Omni admite la búsqueda de K-vecinos más cercanos (KNN) con funciones de distancia integradas. Puedes proporcionar una embedding de vector como parámetro de entrada para encontrar los vectores más cercanos en un espacio de N dimensiones.

Están disponibles las siguientes funciones de distancia:

  • COSINE_DISTANCE(): Mide el coseno del ángulo entre dos vectores.

  • EUCLIDEAN_DISTANCE(): Mide la distancia en línea recta más corta entre dos vectores.

  • DOT_PRODUCT(): Calcula el coseno del ángulo multiplicado por el producto de las magnitudes del vector (ideal para datos normalizados).

Para obtener más información, consulta Realiza una búsqueda de similitud de vectores encontrando los K vecinos más cercanos en la documentación de Spanner.

Cómo elegir la mejor función de distancia vectorial

La selección de la función de distancia adecuada depende de tus datos y del modelo que se usa para generar las incorporaciones.

Función Descripción Relación con el aumento de la similitud
Producto punto Calcula el coseno del ángulo multiplicado por el producto de las magnitudes de los vectores correspondientes. Aumentos
Distancia de coseno Mide el coseno del ángulo entre dos vectores (1 menos la similitud de coseno). Disminuye
Distancia euclidiana Mide la distancia en línea recta entre dos vectores. Disminuye

Si tus incorporaciones están normalizadas (magnitud = 1.0), DOT_PRODUCT() suele ser una opción eficiente. En el caso de los datos no normalizados, experimenta con COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() para determinar cuál produce mejores resultados para tu caso de uso.

Para obtener más información, consulta Elige entre las funciones de distancia de vectores en la documentación de Spanner.

Vecinos más cercanos aproximados (ANN)

La búsqueda de ANN está diseñada para conjuntos de datos muy grandes en los que la búsqueda de KNN exacta se vuelve demasiado lenta o costosa. Utiliza un índice vectorial para proporcionar resultados rápidos con una pequeña compensación en la recuperación.

La búsqueda de vecino más cercano aproximado (ANN) en Spanner Omni admite conjuntos de datos de hasta 1 millón de vectores para vectores de hasta 128 dimensiones de longitud. Si tus vectores tienen más dimensiones, la cantidad admitida de vectores disminuye de forma proporcional.

Para realizar una búsqueda de ANN, usa funciones de distancia aproximadas, como APPROX_COSINE_DISTANCE(), APPROX_EUCLIDEAN_DISTANCE() o APPROX_DOT_PRODUCT(). Estas funciones requieren lo siguiente:

  • Un índice vectorial existente en la columna de embedding

  • Cláusula ORDER BY que usa la función de distancia aproximada.

  • Una cláusula LIMIT para especificar la cantidad de resultados

Para obtener más información, consulta Cómo encontrar vecinos más cercanos aproximados (ANN) y consultar incorporaciones de vectores en la documentación de Spanner.

Crea y administra índices vectoriales

Cuando creas un índice de vectores, debes especificar el vector_length de tu columna de incorporación y puedes usar la cláusula STORING para incluir columnas adicionales para un filtrado más rápido.

A continuación, se muestra un ejemplo de cómo crear un índice vectorial:

CREATE VECTOR INDEX INDEX_NAME
  ON TABLE_NAME(EMBEDDING_COLUMN)
  OPTIONS (distance_type = 'DISTANCE_TYPE', tree_depth = 2, num_leaves = 1000);

Para obtener más información, consulta Crea y administra índices vectoriales en la documentación de Spanner.

Prácticas recomendadas para la indexación de vectores

Para mantener un alto rendimiento y recuperación de la búsqueda, haz lo siguiente:

  • Ajusta las opciones de indexación: Ajusta num_leaves y num_leaves_to_search según el tamaño de tus datos y los requisitos de rendimiento.

  • Vuelve a compilar el índice periódicamente: Vuelve a compilar tu índice si la distribución de tus vectores cambia significativamente con el tiempo.

  • Usa los filtros de manera eficaz: Almacena las columnas que se filtran con frecuencia en el índice para mejorar la eficiencia de la búsqueda.

Para obtener más información, consulta Prácticas recomendadas para la indexación de vectores en la documentación de Spanner.