Módulo 5: Keyword vs Semantic Search
2. Keyword Search: Búsqueda Tradicional por Palabras Clave
Descripción
Keyword search (búsqueda por palabras clave) es el método tradicional: buscar documentos que contengan las palabras exactas de la query (o variantes con stemming/lemmatización). Es la tecnología detrás de buscadores clásicos, bases de datos SQL con FULLTEXT, y Elasticsearch básico.
Cómo funciona keyword search
Algoritmo básico:
1. Tokenizar query: "perros domésticos" → ["perros", "domésticos"]
2. Para cada documento:
¿Contiene "perros" o "domésticos"?
3. Retornar documentos que contengan al menos una palabra
4. Ordenar por relevancia (TF-IDF, BM25)
TF-IDF: La métrica clásica
TF-IDF = Term Frequency × Inverse Document Frequency
TF (frecuencia del término):
TF = (veces que aparece palabra en documento) / (total palabras en documento)
IDF (rareza del término):
IDF = log(total documentos / documentos que contienen la palabra)
TF-IDF combinado:
TF-IDF = TF × IDF
Interpretación:
- Palabras frecuentes en el documento → TF alto
- Palabras raras en el corpus → IDF alto
- Palabras comunes ("el", "de") → IDF bajo (menos relevantes)
BM25: Mejora de TF-IDF
BM25 (Best Matching 25) es una versión mejorada de TF-IDF usada en Elasticsearch y sistemas modernos.
Mejoras sobre TF-IDF:
- Saturación de frecuencia: Palabra que aparece 10 veces vs 100 veces no da 10x más score
- Normalización por longitud: Documentos largos no dominan resultados
- Parámetros ajustables: k1, b (controlan saturación y normalización)
Resultado: BM25 es más robusto que TF-IDF puro.
Ejemplo de keyword search
Query: "perros domésticos"
Documentos:
Doc 1: "Los perros son animales domésticos leales"
→ Contiene "perros" ✅ y "domésticos" ✅ → Score alto
Doc 2: "El can es un animal de compañía"
→ NO contiene "perros" ni "domésticos" ❌ → Score 0
Doc 3: "Los gatos son mascotas independientes"
→ NO contiene "perros" ni "domésticos" ❌ → Score 0
Doc 4: "Perros y gatos son las mascotas más comunes"
→ Contiene "perros" ✅ pero NO "domésticos" ❌ → Score medio
Ranking:
- Doc 1 (contiene ambas palabras)
- Doc 4 (contiene una palabra)
- Doc 2 y Doc 3 (no match)
Técnicas de mejora
1. Stemming (raíz de palabras):
"perros" → "perr"
"perro" → "perr"
→ Ambos son match ✅
2. Lemmatización:
"corriendo" → "correr"
"corrió" → "correr"
→ Match con forma base ✅
3. Stop words (filtrar palabras comunes):
Query: "el perro de la casa"
→ Filtrar: ["el", "de", "la"]
→ Query efectiva: "perro casa"
4. Sinónimos manuales:
"auto" → También buscar "carro", "automóvil"
Ventajas de keyword search
1. Precisión para búsquedas exactas:
Query: "artículo 42 de la ley X"
→ Solo quieres documentos con "artículo 42"
→ Keyword es perfecto ✅
2. Rápido y eficiente:
- Índices invertidos (Elasticsearch) son muy rápidos
- Escalable a millones de documentos
3. Explicable:
- Puedes ver exactamente por qué un documento fue retornado (contiene las palabras)
4. Sin necesidad de embeddings:
- No necesitas modelo de ML ni API externa
- Funciona con cualquier texto
Limitaciones de keyword search
Limitación 1: No entiende sinónimos
Query: "perro"
Doc: "El can es leal"
→ NO match ❌ (aunque "can" = "perro")
Limitación 2: No entiende conceptos relacionados
Query: "animales domésticos"
Doc: "Los gatos son mascotas"
→ NO match ❌ (aunque "mascotas" ≈ "animales domésticos")
Limitación 3: Sensible a vocabulario exacto
Query: "cómo optimizar rendimiento"
Doc: "Guía para mejorar performance"
→ Bajo score (palabras diferentes: "optimizar" ≠ "mejorar", "rendimiento" ≠ "performance")
Limitación 4: No captura orden ni contexto
Query: "banco"
Doc 1: "Fui al banco a sacar dinero" (institución)
Doc 2: "Me senté en un banco del parque" (asiento)
→ Ambos tienen mismo score (ambos contienen "banco")
→ No distingue significado según contexto
Resumen
Puntos clave:
- Keyword search: Coincidencias exactas de palabras
- TF-IDF: Frecuencia × rareza (métrica clásica)
- BM25: Versión mejorada (saturación, normalización)
- Técnicas: Stemming, lemmatización, stop words, sinónimos
- Ventajas: Preciso para exactas, rápido, explicable
- Limitaciones: No sinónimos, no conceptos, no contexto
Próxima cápsula: 03-semantic-search.md — Búsqueda vectorial con embeddings.