Compartir a través de


Relevancia en la búsqueda de vectores

Durante la ejecución de consultas vectoriales, el motor de búsqueda busca vectores similares para encontrar los mejores candidatos para devolver en los resultados de búsqueda. Dependiendo de cómo haya indexado el contenido vectorial, la búsqueda de coincidencias pertinentes es exhaustiva o restringida a vecinos cercanos para un procesamiento más rápido. Una vez encontrados los candidatos, las métricas de similitud se usan para puntuar cada resultado en función de la intensidad de la coincidencia.

En este artículo se explican los algoritmos usados para determinar la relevancia y las métricas de similitud usadas para la puntuación. También ofrece sugerencias para mejorar la relevancia si los resultados de búsqueda no cumplen las expectativas.

Entre los algoritmos de búsqueda vectorial se incluyen:

Solo se usan campos vectoriales marcados como searchable en el índice o searchFields en la consulta para buscar y puntuar.

Acerca de KNN exhaustiva

KNN exhaustivo calcula las distancias entre todos los pares de puntos de datos y busca los k vecinos más próximos exactos para un punto de consulta. Dado que el algoritmo no requiere acceso aleatorio rápido de puntos de datos, KNN no consume la cuota de tamaño del índice vectorial . Sin embargo, proporciona el conjunto global de vecinos más cercanos.

El KNN exhaustivo es de gran uso computacional, por lo que se usa para conjuntos de datos pequeños a medianos o cuando la necesidad de precisión supera la necesidad de rendimiento de las consultas. Otro caso de uso consiste en crear un conjunto de datos para evaluar la recuperación de un algoritmo ANN, ya que knN exhaustivo se puede usar para construir el conjunto de verdad del terreno de los vecinos más cercanos.

Acerca de HNSW

HNSW es un algoritmo ANN optimizado para aplicaciones de alta recuperación y baja latencia con distribución de datos desconocida o volátil. Durante la indexación, HNSW crea estructuras de datos adicionales que organizan puntos de datos en un grafo jerárquico. Durante la ejecución de consultas, HNSW navega por este gráfico para buscar las coincidencias más relevantes, lo que permite búsquedas de vecinos más cercanas eficaces.

HNSW requiere que todos los puntos de datos residan en la memoria para un acceso aleatorio rápido, que consume la cuota de tamaño del índice de vectores . Este diseño equilibra la precisión de la búsqueda con eficacia computacional y hace que HNSW sea adecuado para la mayoría de los escenarios, especialmente al buscar en conjuntos de datos más grandes.

HNSW ofrece varios parámetros de configuración ajustables para optimizar el rendimiento, la latencia y la recuperación de la aplicación de búsqueda. Por ejemplo, los campos que especifican HNSW también admiten KNN exhaustivo mediante el parámetro solicitud de consulta"exhaustive": true. Sin embargo, los campos indexados para exhaustiveKnn no admiten consultas HNSW porque las estructuras de datos adicionales que permiten la búsqueda eficaz no existen.

Acerca de ANN

ANN es una clase de algoritmos para buscar coincidencias en el espacio vectorial. Esta clase de algoritmos usa diferentes estructuras de datos o métodos de creación de particiones de datos para reducir significativamente el espacio de búsqueda y acelerar el procesamiento de consultas.

Los algoritmos ANN sacrifican cierta precisión, pero ofrecen una recuperación escalable y rápida de los vecinos más cercanos aproximados, lo que hace que sean ideales para equilibrar la precisión y la eficacia en las aplicaciones modernas de recuperación de información. Puede ajustar los parámetros del algoritmo para ajustar los requisitos de recuperación, latencia, memoria y superficie de disco de la aplicación de búsqueda.

Búsqueda de Azure AI usa HNSW para su algoritmo ANN.

Cómo funciona la búsqueda de vecinos más próximos

Las consultas vectoriales se ejecutan en un espacio de inserción que consta de vectores generados a partir del mismo modelo de inserción. Por lo general, el valor de entrada dentro de una solicitud de consulta se introduce en el mismo modelo de Machine Learning que generó incrustaciones en el índice de vectores. El resultado es un vector en el mismo espacio de inserción. Dado que los vectores similares se agrupan en clústeres, buscar coincidencias equivale a buscar los vectores más próximos al vector de consulta y devolver los documentos asociados como resultado de búsqueda.

Por ejemplo, si una solicitud de consulta es sobre hoteles, el modelo asigna la consulta a un vector que existe en algún lugar del clúster de vectores que representa documentos sobre hoteles. Identificar qué vectores son los más similares a la consulta, en función de una métrica de similitud, determina qué documentos son los más relevantes.

Cuando los campos vectoriales se indexan para un KNN exhaustivo, la consulta se ejecuta en "todos los vecinos". En el caso de los campos indexados para HNSW, el motor de búsqueda usa un grafo HNSW para buscar en un subconjunto de nodos dentro del índice vectorial.

Creación del grafo HNSW

Durante la indexación, el servicio de búsqueda construye el gráfico HNSW. El objetivo de indexar un nuevo vector en un grafo HNSW es agregarlo a la estructura del grafo de una manera que permita una búsqueda de vecinos más eficaz. El proceso se resume en los pasos siguientes:

  1. Inicialización: comienza con un grafo HNSW vacío o el grafo HNSW existente si no es un nuevo índice.

  2. Punto de entrada: este es el nivel superior del grafo jerárquico y actúa como punto inicial para la indexación.

  3. Agregar al grafo: diferentes niveles jerárquicos representan diferentes granularidades del grafo, donde los niveles más altos son más globales y los niveles más bajos son más granulares. Cada nodo del grafo representa un punto vectorial.

    • Cada nodo está conectado a hasta m vecinos próximos. Este es el parámetro m.

    • El número de puntos de datos que se consideran conexiones candidatas se rige por el parámetro efConstruction. Esta lista dinámica forma el conjunto de puntos más cercanos en el grafo existente para que el algoritmo la tenga en cuenta. Los valores de efConstruction más altos dan lugar a que se consideren más nodos, lo que a menudo conduce a vecindarios locales más densos para cada vector.

    • Estas conexiones usan la similitud configurada metric para determinar la distancia. Algunas conexiones son conexiones de "larga distancia" que se conectan entre distintos niveles jerárquicos, de modo que crean accesos directos en el grafo que mejoran la eficacia de la búsqueda.

  4. Eliminación y optimización de grafos: esto puede ocurrir después de indexar todos los vectores y mejora la navegabilidad y la eficacia del grafo HNSW.

Una consulta vectorial navega por la estructura jerárquica del grafo para buscar coincidencias. A continuación se resumen los pasos del proceso:

  1. Inicialización: el algoritmo inicia la búsqueda en el nivel superior del grafo jerárquico. Este punto de entrada contiene el conjunto de vectores que sirven como puntos de partida para la búsqueda.

  2. Recorrido: a continuación, recorre el nivel de grafo por nivel, navegando desde el nivel superior hasta los niveles inferiores, seleccionando nodos candidatos que están más cerca del vector de consulta en función de la métrica de distancia configurada, como la similitud de coseno.

  3. Eliminación: para mejorar la eficacia, el algoritmo elimina el espacio de búsqueda solo teniendo en cuenta los nodos que probablemente contengan vecinos más próximos. Esto se logra manteniendo una cola de prioridad de posibles candidatos y actualizándola a medida que avanza la búsqueda. El parámetro efSearch configura la longitud de esta cola.

  4. Refinamiento: a medida que el algoritmo se mueve a niveles más bajos y granulares, HNSW considera más vecinos cerca de la consulta, lo que permite refinar el conjunto candidato de vectores y mejorar la precisión.

  5. Finalización: la búsqueda se completa cuando se ha identificado el número deseado de vecinos más próximos o cuando se cumplen otros criterios de detención. Este número deseado de vecinos más próximos se rige por el parámetro en tiempo de consulta k.

Métricas de similitud usadas para medir la proximidad

El algoritmo busca vectores candidatos para evaluar la similitud. Para realizar esta tarea, un cálculo de métricas de similitud compara el vector candidato con el vector de consulta y mide la similitud. El algoritmo realiza un seguimiento del conjunto ordenado de vectores más similares que se encuentran, que forma el conjunto de resultados clasificados cuando el algoritmo ha finalizado.

Métrica Descripción
cosine Esta métrica mide el ángulo entre dos vectores y no se ve afectada por longitudes de vector diferentes. Matemáticamente, calcula el ángulo entre dos vectores. Coseno es la métrica de similitud que usa modelos de inserción de Azure OpenAI, por lo que si usas Azure OpenAI, debes especificarcosine en la configuración de vectores.
dotProduct Esta métrica mide la longitud de cada par de dos vectores y el ángulo entre ellos. Matemáticamente, calcula los productos de las magnitudes de los vectores y el ángulo entre ellos. En el caso de los vectores normalizados, esto es idéntico a la similitud cosine, pero ligeramente más eficaz.
euclidean (también conocida como l2 norm) Esta métrica mide la longitud de la diferencia vectorial entre dos vectores. Matemáticamente, calcula la distancia euclidiana entre dos vectores, que es la norma l2 de la diferencia de los dos vectores.

Nota:

Si ejecuta dos o más consultas vectoriales en paralelo, o si realiza una búsqueda híbrida que combine consultas vectoriales y de texto en la misma solicitud, se usa Fusión de clasificación recíproca (RRF) para puntuar los resultados finales de la búsqueda.

Puntuaciones en los resultados del vector de búsqueda

Las puntuaciones se calculan y asignan a cada coincidencia, con las coincidencias más altas que se devuelven como resultados k. La propiedad @search.score contiene la puntuación. En la tabla siguiente, se muestra el intervalo dentro del cual se producirá una puntuación.

Método de búsqueda Parámetro Métrica de puntuación Intervalo
vector de búsqueda @search.score Coseno 0,333-1,00

En el caso de la métrica cosine, es importante tener en cuenta que el @search.score calculado no es el valor de coseno entre el vector de consulta y los vectores del documento. En su lugar, Azure AI Search aplica transformaciones de forma que la función de puntuación disminuye de forma monotónica, lo que significa que los valores de puntuación siempre disminuirán en el valor a medida que la similitud empeore. Esta transformación garantiza que las puntuaciones de búsqueda se puedan usar con fines de clasificación.

Hay algunos matices con las puntuaciones de similitud:

  • La similitud de coseno se define como el coseno del ángulo entre dos vectores.
  • La distancia de coseno se define como 1 - cosine_similarity.

Para crear una función de reducción monotónica, el @search.score se define como 1 / (1 + cosine_distance).

Los desarrolladores que necesitan un valor coseno en lugar del valor sintético pueden usar una fórmula para volver a convertir la puntuación de búsqueda en la distancia coseno:

double ScoreToSimilarity(double score)
{
    double cosineDistance = (1 - score) / score;
    return  -cosineDistance + 1;
}

Tener el valor de coseno original puede ser útil en soluciones personalizadas que configuran umbrales para recortar los resultados de baja calidad.

Sugerencias para el ajuste de relevancia

Si no obtiene resultados relevantes, experimente con cambios en la configuración de la consulta. No hay características de ajuste específicas, como un perfil de puntuación, un campo o un aumento de términos, para consultas vectoriales:

  • Experimente con el tamaño del fragmento y la superposición. Intente aumentar el tamaño del fragmento y asegurarse de que hay suficiente superposición para conservar el contexto o la continuidad entre los fragmentos.

  • En el caso de HNSW, pruebe diferentes niveles de efConstruction para cambiar la composición interna del gráfico de proximidad. El valor predeterminado es 400. El rango va de 100 a 1000.

  • Aumente los k resultados para alimentar más resultados de la búsqueda en un modelo de chat, si usa uno.

  • Pruebe las consultas híbridas con clasificación semántica. En las pruebas comparativas, esta combinación produjo de forma coherente los resultados más relevantes.

Pasos siguientes