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:

  1. Explicar el problema de búsqueda (búsqueda exhaustiva vs aproximada)
  2. Entender kNN conceptualmente (K vecinos más cercanos)
  3. Comparar índices: Fuerza bruta, HNSW, IVF, LSH
  4. Explicar HNSW (grafos jerárquicos navegables)
  5. Explicar IVF (clustering + búsqueda en clusters)
  6. Decidir qué índice usar (trade-offs: velocidad vs precisión)
  7. 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ápsulaQué verásDuración
01Introducción al móduloEl problema de búsqueda, overview de índices15 min
02kNN conceptualK vecinos más cercanos, búsqueda exhaustiva20 min
03Índices de búsquedaTipos: exactos vs aproximados, trade-offs20 min
04HNSW y grafosGrafo jerárquico navegable (Pinecone, Weaviate)30 min
05IVF y clusteringInverted File Index (búsqueda por clusters)25 min
06Trade-offs y decisionesCuándo usar cada índice20 min
07Ejercicio integradorDiseñar estrategia de búsqueda30 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:

  1. Ganancia de velocidad enorme: 1000x-10000x más rápido

  2. Los resultados "perdidos" suelen ser marginales:

    • Resultado #11 (perdido) vs resultado #10 (encontrado) → Similaridad casi idéntica
    • El usuario no notaría la diferencia
  3. 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:

  1. Tienes vectores ✅
  2. En un espacio estructurado ✅
  3. Con métrica de cercanía ✅
  4. ¿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:

  1. ✅ Explicar el problema de búsqueda en millones de vectores
  2. ✅ Describir cómo funciona HNSW (grafo navegable jerárquico)
  3. ✅ Describir cómo funciona IVF (clustering + búsqueda en clusters)
  4. ✅ Comparar búsqueda exacta vs aproximada (trade-offs)
  5. ✅ Decidir qué índice usar según caso de uso
  6. ✅ Interpretar parámetros (ej: "ef_search" en HNSW, "nprobe" en IVF)
  7. ✅ 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.