Ha habido un aumento del interés en la búsqueda de vectores, gracias a una nueva generación de modelos de aprendizaje automático que pueden representar todo tipo de contenido como vectores, incluidos texto, imágenes, eventos y más. A menudo llamados "modelos incrustados", estas poderosas representaciones pueden capturar la similitud entre dos piezas de contenido de una manera que va más allá de sus características de nivel superficial.
Los algoritmos de búsqueda k-vecino más cercano (kNN) encuentran los vectores en un conjunto de datos que son más similares a un vector de consulta. Junto con estas representaciones vectoriales, la búsqueda de kNN abre interesantes posibilidades de recuperación:
La búsqueda de vectores está lista para convertirse en un componente importante de la caja de herramientas de búsqueda, junto con técnicas tradicionales como la puntuación basada en términos.
Actualmente, Elasticsearch admite el almacenamiento de vectores mediante el tipo de campo dense_vector y su uso para calcular puntuaciones de documentos. Esto permite a los usuarios realizar una búsqueda exacta de kNN al escanear todos los documentos. Elasticsearch 8.0 se basa en esta funcionalidad para admitir la búsqueda rápida y aproximada del vecino más cercano (ANN). Esto representa un enfoque mucho más escalable, lo que permite que la búsqueda de vectores se ejecute de manera eficiente en grandes conjuntos de datos.
ANN en Elasticsearch
¿Cuál es la búsqueda aproximada del vecino más cercano?
Existen estructuras de datos bien establecidas para kNN en vectores de baja dimensión, como los árboles KD. De hecho, Elasticsearch incorpora árboles KD para admitir búsquedas en datos geoespaciales y numéricos. Pero los modelos de incrustación modernos para texto e imágenes suelen producir vectores de alta dimensión de 100 a 1000 elementos, o incluso más. Estas representaciones vectoriales presentan un desafío único, ya que es muy difícil encontrar de manera eficiente a los vecinos más cercanos en dimensiones altas.
Ante esta dificultad, los algoritmos del vecino más cercano suelen sacrificar la precisión perfecta para mejorar su velocidad. Es posible que estos algoritmos de vecino más cercano aproximado (ANN) no siempre devuelvan los k vectores más cercanos verdaderos. Pero se ejecutan de manera eficiente, escalando a grandes conjuntos de datos mientras mantienen un buen rendimiento.
Elegir un algoritmo ANN
El diseño de algoritmos ANN es un área activa de investigación académica y hay muchos algoritmos prometedores para elegir. A menudo presentan diferentes ventajas y desventajas en términos de velocidad de búsqueda, complejidad de implementación y costo de indexación. Afortunadamente, hay un gran proyecto de código abierto llamado ann-benchmarks que prueba los principales algoritmos contra varios conjuntos de datos y publica comparaciones.
Elasticsearch 8.0 usa un algoritmo ANN llamado Hierarchical Navigable Small World graphs (HNSW), que organiza los vectores en un gráfico en función de su similitud entre sí. HNSW muestra un sólido rendimiento de búsqueda en una variedad de conjuntos de datos de benchmarks y también obtuvo buenos resultados en nuestras propias pruebas. Otro beneficio de HNSW es que se usa ampliamente en la industria, ya que se implementó en varios sistemas diferentes. Además del artículo académico original , hay muchos recursos útiles para conocer los detalles del algoritmo. Aunque Elasticsearch ANN se basa actualmente en HNSW, la función está diseñada de manera flexible para permitirnos incorporar diferentes enfoques en el futuro.
Más informacion y nota completa desde el Blog de Elastic