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.
Descripción general de la búsqueda de vectores
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.
Realiza una búsqueda de K-vecinos más cercanos
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.
Realiza búsquedas de ANN con índices de vectores
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 BYque usa la función de distancia aproximada.Una cláusula
LIMITpara 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_leavesynum_leaves_to_searchsegú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.