Módulo 4: Búsqueda por Proximidad
1. Introducción al Módulo: Búsqueda por Proximidad - Encontrar Vecinos Cercanos
Descripción
Este es el módulo donde entiendes cómo buscar vectores cercanos eficientemente. Hasta ahora sabes qué son vectores (Módulo 1), cómo forman espacios (Módulo 2), y cómo medir cercanía (Módulo 3). Ahora verás cómo encontrar los K vecinos más cercanos (kNN) sin revisar TODOS los vectores (ineficiente en millones de documentos).
Este módulo es el puente entre teoría y práctica: verás algoritmos conceptuales (kNN, HNSW, IVF) sin implementar código. Entenderás por qué vector databases (Pinecone, Weaviate) usan índices especializados y qué trade-offs tienen.
Enfoque: 60% teoría algorítmica conceptual, 40% diagramas y comparaciones. NO hay código, pero sí pseudocódigo simple y diagramas de estructuras de datos.
Tiempo estimado: 2-2.5 horas
Objetivos del Módulo
Al completar este módulo, serás capaz de:
- Explicar el problema de búsqueda (búsqueda exhaustiva vs aproximada)
- Entender kNN conceptualmente (K vecinos más cercanos)
- Comparar índices: Fuerza bruta, HNSW, IVF, LSH
- Explicar HNSW (grafos jerárquicos navegables)
- Explicar IVF (clustering + búsqueda en clusters)
- Decidir qué índice usar (trade-offs: velocidad vs precisión)
- Razonar sobre escalabilidad (millones de vectores)
Competencia clave ganada: Entenderás que vector databases no hacen "búsqueda exhaustiva" (lenta), sino que usan índices aproximados (rápidos con ~99% precisión).
Roadmap del módulo: las 7 cápsulas
| # | Cápsula | Qué verás | Duración |
|---|---|---|---|
| 01 | Introducción al módulo | El problema de búsqueda, overview de índices | 15 min |
| 02 | kNN conceptual | K vecinos más cercanos, búsqueda exhaustiva | 20 min |
| 03 | Índices de búsqueda | Tipos: exactos vs aproximados, trade-offs | 20 min |
| 04 | HNSW y grafos | Grafo jerárquico navegable (Pinecone, Weaviate) | 30 min |
| 05 | IVF y clustering | Inverted File Index (búsqueda por clusters) | 25 min |
| 06 | Trade-offs y decisiones | Cuándo usar cada índice | 20 min |
| 07 | Ejercicio integrador | Diseñar estrategia de búsqueda | 30 min |
Total: ~2.5 horas
El problema central
Escenario:
Tienes: 10 millones de documentos (10M vectores de 1536D)
Query: "animal doméstico" → Vector query
Objetivo: Encontrar los 10 documentos más relevantes (top-10)
Problema: ¿Cómo encontrar los 10 más cercanos sin calcular distancia a TODOS los 10M?
Soluciones
1. Búsqueda exhaustiva (fuerza bruta)
Para cada vector en la base de datos:
Calcular similaridad(query, vector)
Ordenar por similaridad
Retornar top-10
Ventaja: ✅ Siempre encuentra los EXACTOS top-10
Desventaja: ❌ Muy lento (10M cálculos por query)
2. Búsqueda aproximada (con índices)
Usar estructura de datos especializada (índice)
Buscar SOLO en región relevante del espacio
Retornar ~top-10 (aproximadamente correctos)
Ventaja: ✅ Muy rápido (1000x-10000x más rápido)
Desventaja: ⚠️ Puede perder algunos resultados (~1-5% error)
Índices principales
HNSW (Hierarchical Navigable Small World)
Qué es: Grafo de múltiples capas donde cada nodo es un vector. Navegas el grafo saltando de nodo cercano en nodo cercano.
Usado por: Pinecone, Weaviate, Qdrant
Trade-off: Muy rápido, ~99% precisión, usa mucha memoria
IVF (Inverted File Index)
Qué es: Clusterizar vectores en grupos (ej: 1000 clusters). Buscar solo en clusters más cercanos a la query.
Usado por: FAISS (Facebook), algunos modos de Weaviate
Trade-off: Rápido, ~95-98% precisión, menos memoria que HNSW
LSH (Locality-Sensitive Hashing)
Qué es: Hashear vectores de modo que vectores similares tengan hashes similares. Buscar solo en mismos buckets.
Usado por: Menos común en producción moderna
Trade-off: Muy rápido, menor precisión que HNSW/IVF
Por qué aproximado es aceptable
Pregunta: ¿Por qué aceptar ~1-5% de error (perder algunos resultados correctos)?
Respuesta:
-
Ganancia de velocidad enorme: 1000x-10000x más rápido
-
Los resultados "perdidos" suelen ser marginales:
- Resultado #11 (perdido) vs resultado #10 (encontrado) → Similaridad casi idéntica
- El usuario no notaría la diferencia
-
En producción, velocidad > perfección:
- Mejor retornar respuesta en 10ms con 99% precisión
- Que retornar en 10s con 100% precisión
Conexión con Módulos anteriores
Módulo 1: Vectores individuales
Módulo 2: Espacios vectoriales
Módulo 3: Medir cercanía (coseno)
Módulo 4: Buscar vectores cercanos eficientemente ← Aquí
Flujo lógico:
- Tienes vectores ✅
- En un espacio estructurado ✅
- Con métrica de cercanía ✅
- ¿Cómo encontrar vecinos cercanos en millones de vectores? ← Ahora
Qué NO verás en este módulo
Para mantener enfoque conceptual:
- ❌ Código de implementación: No implementarás HNSW o IVF
- ❌ Matemáticas formales: No verás demostraciones de complejidad O(log n)
- ❌ Optimizaciones low-level: No verás SIMD, GPU, quantization (eso es avanzado)
Esto es 100% conceptual: Algoritmos, estructuras de datos, trade-offs, decisiones.
Criterios de éxito
Sabrás que completaste el módulo si puedes:
- ✅ Explicar el problema de búsqueda en millones de vectores
- ✅ Describir cómo funciona HNSW (grafo navegable jerárquico)
- ✅ Describir cómo funciona IVF (clustering + búsqueda en clusters)
- ✅ Comparar búsqueda exacta vs aproximada (trade-offs)
- ✅ Decidir qué índice usar según caso de uso
- ✅ Interpretar parámetros (ej: "ef_search" en HNSW, "nprobe" en IVF)
- ✅ Razonar sobre escalabilidad (qué pasa con 1M, 10M, 100M vectores)
Test rápido: Si puedes explicar "¿Por qué Pinecone usa HNSW en lugar de búsqueda exhaustiva?" sin dudar, estás listo para Módulo 5.
Aplicación directa a producción
Todo lo que verás aquí se usa en vector databases reales:
Pinecone: HNSW por defecto (rápido, alta precisión)
Weaviate: HNSW + opciones de IVF
Qdrant: HNSW optimizado
FAISS: IVF + variantes
Milvus: Soporte para múltiples índices
Después de este módulo, entenderás por qué esas herramientas toman las decisiones que toman.
Próxima cápsula: 02-knn-conceptual.md — K vecinos más cercanos, búsqueda exhaustiva.