FAISS al descubierto: búsqueda por similitud a escala de mil millones

Fuentes: Inside FAISS: Billion-Scale Similarity Search
Imagen generada por IA con el prompt: Abstract editorial illustration of multicolored points clustered in Voronoi cells across a high-dimensional vector space, glowing nodes connected by faint geometric lines, dark blue gradient background
Imagen generada con IA

FAISS, la biblioteca de búsqueda por similitud de Meta, encuentra los vecinos más cercanos en espacios vectoriales de alta dimensión a escala de miles de millones de elementos. Este artículo técnico detalla los mecanismos que hacen posible esa capacidad.

En la inteligencia artificial actual, las imágenes, textos y audios se representan como embeddings, listas de números que capturan su significado semántico. En un espacio geométrico de alta dimensión, los conceptos similares se ubican cerca; la búsqueda del vecino más cercano consiste en localizar el vector más próximo a una consulta. El método de fuerza bruta, que evalúa todas las distancias, resulta inviable a gran escala: mil millones de descriptores SIFT de 128 dimensiones requieren 512 GB de RAM y mil millones de cálculos por búsqueda, un costo inasumible para sistemas en tiempo real.

FAISS recurre a técnicas de búsqueda aproximada que sacrifican una fracción menor de precisión a cambio de aceleraciones de varios órdenes de magnitud. La primera estrategia, IVF (Inverted File), particiona el espacio en celdas de Voronoi mediante clustering K-Means. En lugar de escanear la base de datos completa, el sistema identifica la celda donde cae la consulta y solo compara con los vectores contenidos en ella y sus vecinas. La segunda estrategia, la cuantización por producto (PQ) introducida por Jégou, Douze y Schmid en 2011, comprime cada vector a 8 bytes preservando estimaciones de distancia útiles. Divide el vector en 8 sub-bloques de 16 dimensiones, asigna a cada uno un codebook independiente de 256 centroides y reemplaza el sub-vector por el índice del centroide más cercano, logrando una reducción de memoria de 64 veces. Un codebook plano equivalente exigiría 2^64 centroides y 9,4 zettabytes de almacenamiento; la factorización por sub-bloques lo mantiene compacto, alojable en caché L2.

Los sistemas de producción combinan IVF y PQ: la primera acelera la búsqueda descartando la mayor parte de la base de datos, y la segunda comprime los vectores restantes para abaratar las comparaciones. El artículo incluye demostraciones interactivas para comparar el rendimiento de diferentes índices sobre conjuntos de datos aleatorios.