Hay una forma sencilla de entender por qué algunos sistemas de búsqueda con IA encuentran algo parecido… pero no exactamente lo que necesitas
Imagina que tienes que resumir un libro entero en una sola frase
Eso es, simplificando mucho, es lo que hace un bi-encoder
👉 Convierte cada documento en un único vector, una especie de resumen matemático
Es rápido, barato y permite buscar entre millones de documentos
El problema es que, al comprimir tanto la información, algunos detalles desaparecen como nombres, términos muy específicos, referencias poco frecuentes, etc.
👉 En el otro extremo está el cross-encoder
En lugar de resumir primero, compara tu pregunta con cada documento con muchísimo detalle
Es mucho más preciso.
Pero hacerlo contra millones de documentos sería demasiado lento y caro.
Y aquí aparece una tercera vía muy interesante
👉 Late Interaction que en lugar de representar un documento con un solo vector, conserva múltiples vectores, aproximadamente uno por cada token o fragmento relevante
Cuando llega una pregunta, el sistema busca qué partes concretas del documento encajan mejor con cada parte de la pregunta
Por ejemplo si buscas Apple M5 Pro no basta con que el sistema encuentre documentos relacionados con Apple, Mac o procesadores.
Importa que M5 Pro encuentre una coincidencia fuerte
Late Interaction permite conservar ese tipo de señales que un único embedding puede diluir
¿El resultado?
✅ Mucha más precisión que una búsqueda basada únicamente en embeddings.
✅ Un coste mucho más razonable que comparar exhaustivamente cada pregunta con cada documento.
El resumen sería algo así:
1️⃣ Bi-encoder: rápido, pero comprime mucho.
2️⃣ Cross-encoder: muy preciso, pero caro.
3️⃣ Late Interaction: intenta quedarse con gran parte de lo mejor de ambos.
Y esto tiene una consecuencia práctica importante para los sistemas RAG:
Si tu RAG funciona bien con preguntas generales, pero empieza a fallar cuando aparecen nombres propios, códigos, productos, acrónimos o términos poco frecuentes, quizá el problema no esté en el LLM.
Puede estar mucho antes, en el retrieval.
El embedding único puede estar borrando precisamente la señal que necesitas encontrar.