Buscar: significado, palabras y reordenación
Páginas de este taller
En esta página
La búsqueda es la pieza donde más se equivocan los sistemas y donde menos se mira. Esta página explica las dos formas de buscar, cómo se combinan, qué añade un reordenador y qué fallos no resuelve ninguna.
1. Buscar por significado: vectores
Un modelo de embeddings convierte cada fragmento en una lista de números, un vector, y lo mismo hace con la pregunta. Buscar es encontrar los vectores de fragmentos más cercanos al de la pregunta. La cercanía se mide con la similitud del coseno, que va de −1 a 1: cuanto más alta, más parecidos.
Para el ejemplo usamos multilingual-e5-large, un modelo multilingüe con el español entre sus lenguas (Wang et al., 2024). Otro modelo multilingüe muy usado es BGE-M3 (Chen et al., 2024). Un detalle práctico que dice su ficha: hay que anteponer «query: » a las preguntas y «passage: » a los fragmentos, porque así se entrenó. Olvidarlo empeora los resultados sin que nada avise.
Se suele explicar que los vectores juntan lo que significa lo mismo aunque use otras palabras. Es verdad a medias. Mira estas similitudes reales:
Datos reales
¿Qué queda más cerca?
- «baja por maternidad» · «permiso por nacimiento»0,874
- «baja por maternidad» · «baja de la suscripción»0,886
- «devolver un producto» · «reembolso del importe»0,878
- «devolver un producto» · «devolver la llamada»0,895
Barras desde 0,80 para que se vea la diferencia: con este modelo casi cualquier par de frases en español queda por encima.
«Baja por maternidad» queda más cerca de «baja de la suscripción» que de «permiso por nacimiento», y «devolver un producto», más cerca de «devolver la llamada» que de «reembolso del importe». El modelo junta lo que significa lo mismo, pero también lo que comparte palabras o estructura. Para un lingüista es un caso conocido: el modelo trata como próximas las formas iguales, aunque sean homónimas o polisémicas, mientras que la sinonimia sin palabras compartidas le cuesta más.
Hay una segunda lección en esas cifras: todas están entre 0,87 y 0,90. Su ficha lo advierte: con este modelo, las similitudes se concentran entre 0,7 y 1, por cómo se entrenó. La cifra absoluta no dice si un fragmento es pertinente; solo sirve para ordenar. Volveremos a ello al hablar de cuándo no hay respuesta.
2. Buscar por palabras: BM25
La búsqueda clásica no convierte nada en vectores: puntúa cada fragmento según las palabras de la pregunta que contiene. La función más usada se llama BM25 (Robertson y Zaragoza, 2009) y combina tres intuiciones que cualquier usuario de un corpus reconoce:
- Frecuencia: un fragmento que repite la palabra buscada es más pertinente, pero con rendimientos decrecientes (la décima aparición suma poco).
- Rareza: una palabra que sale en todos los fragmentos («devolución», en un reglamento de devoluciones) no ayuda a distinguir; una rara, mucho. Es la misma idea que el TF-IDF de Preprocesar, tokenizar y representar.
- Longitud: un fragmento largo tiene más palabras por pura extensión, así que se le corrige la puntuación.
BM25 no sabe nada de significado: «dinero» e «importe» son para él tan distintos como «dinero» y «cafetera». Pero acierta justo donde los vectores dudan: nombres propios, siglas, códigos de producto, números de artículo.
3. Comparar: cuatro búsquedas, las mismas preguntas
Elige una pregunta y cambia la forma de buscar. El fragmento que la responde aparece recuadrado:
Interactivo
Cuatro formas de buscar la misma respuesta
Similitud del coseno entre vectores. Fíjate en lo juntas que están todas las cifras.
- 10,865Artículo 4. Reembolso (la respuesta correcta)
- 20,841Artículo 1. Plazo de devolución
- 30,823Artículo 5. Gastos de envío
- 40,823Artículo 7. Productos defectuosos
- 50,820Artículo 8. Tarjetas regalo
- 60,818Artículo 2. Excepciones
- 70,802Artículo 3. Estado del producto
- 80,797Artículo 6. Cambios de talla
El fragmento que responde (Artículo 4. Reembolso) queda en el puesto 1.
La idea: Ninguna forma de buscar gana siempre. Por significado encuentra «dinero» aunque el reglamento diga «importe»; por palabras, el «artículo 5»; y ninguna sabe que estrenar unas zapatillas es usarlas.
Lo que enseña cada pregunta:
- «¿Cuándo me devuelven el dinero?» El reglamento dice «importe». Por significado sale primero el artículo del reembolso. Por palabras también, pero por casualidad: BM25 compara formas exactas, así que «devuelven» no casa con «devolveremos», y la única palabra que comparte es «el», que el artículo 4 repite tres veces. Si se quitaran las palabras vacías, ni eso.
- «¿Qué dice el artículo 5?» Por significado acierta con una ventaja de cinco milésimas sobre el segundo: un cambio mínimo en la frase podría alterar el orden. Por palabras, «5» marca la diferencia con claridad.
- «Me ha llegado la cafetera rota» El reglamento dice «dañado» y «defectuoso». Por significado, primer puesto. Por palabras, puntuación cero: no comparte ninguna palabra útil y queda empatado en el último lugar con todos los que tampoco comparten nada. El reordenador, como veremos, lo baja al segundo puesto.
- «¿Puedo devolver unas zapatillas que ya he estrenado?» Ninguna búsqueda lo encuentra en los primeros puestos. La respuesta está en el artículo 3 («debe devolverse sin usar»), y para verlo hay que saber que estrenar algo es usarlo por primera vez. Esa relación entre palabras no está en la superficie del texto.
- «¿Hacéis envíos a Canarias?» No tiene respuesta, y la búsqueda devuelve fragmentos igualmente. Siempre hay uno «más cercano».
4. Combinar: la búsqueda híbrida
Como cada búsqueda acierta donde la otra falla, muchos sistemas hacen las dos y combinan las listas. El problema es que sus puntuaciones no se pueden sumar: una similitud de 0,84 y un BM25 de 2,2 están en escalas distintas. La solución más extendida es olvidar las puntuaciones y fusionar por puestos: la fusión por rango recíproco (RRF, Cormack et al., 2009). Cada fragmento suma 1/(60 + su puesto) en cada lista; el 60 es una constante que suaviza la ventaja de los primeros puestos.
Así queda la pregunta de la cafetera:
Datos reales
Fusionar dos listas: «Me ha llegado la cafetera rota, ¿qué hago?»
| Fragmento | Puesto por significado | Puesto por palabras | Fusión |
|---|---|---|---|
| Artículo 7. Productos defectuosos | 1 | 4 | 1/61 + 1/64 = 0,03202 |
| Artículo 3. Estado del producto | 2 | 4 | 1/62 + 1/64 = 0,03175 |
| Artículo 5. Gastos de envío | 4 | 2 | 1/64 + 1/62 = 0,03175 |
| Artículo 6. Cambios de talla | 6 | 1 | 1/66 + 1/61 = 0,03154 |
| Artículo 4. Reembolso | 3 | 4 | 1/63 + 1/64 = 0,03150 |
| Artículo 1. Plazo de devolución | 5 | 3 | 1/65 + 1/63 = 0,03126 |
| Artículo 2. Excepciones | 7 | 4 | 1/67 + 1/64 = 0,03055 |
| Artículo 8. Tarjetas regalo | 8 | 4 | 1/68 + 1/64 = 0,03033 |
El artículo de productos defectuosos era el primero por significado y compartía el último puesto por palabras. La fusión lo mantiene primero, porque un puesto muy bueno en una lista compensa uno malo en la otra, pero ya casi empatado con el segundo. Lo contrario también ocurre: las zapatillas, sextas por significado y quintas por palabras, bajan al séptimo puesto en la fusión. La búsqueda híbrida protege contra los fallos graves de cada método, a cambio de diluir sus aciertos claros. En la mayoría de colecciones reales compensa; en una concreta puede no hacerlo. Por eso se mide (lo veremos en Evaluar un sistema RAG).
5. Reordenar
La búsqueda devuelve rápido unos veinte o cincuenta candidatos. Un segundo modelo, el reordenador (reranker), los vuelve a puntuar con más cuidado y se queda con los mejores. La diferencia está en cómo compara:
El modelo de embeddings convierte la pregunta en un vector y cada fragmento en otro, sin que uno sepa nada del otro. Los vectores de los fragmentos se calculan una sola vez, al preparar los documentos, y comparar es solo una cuenta. Por eso es rápido y sirve para miles o millones de fragmentos. A cambio, cada vector resume todo el fragmento de antemano, sin saber qué se le va a preguntar.
El reordenador lee la pregunta y el fragmento a la vez, como un único texto, y decide si uno responde a la otra. Puede notar que «no se aplica a los productos personalizados» responde a la camiseta bordada. Pero hay que pasarlo por cada par, en el momento de la pregunta: con veinte candidatos va bien; con un millón de fragmentos sería imposible. Por eso va segundo.
Es la diferencia entre el catálogo de una biblioteca, que te da veinte libros con buena pinta, y la bibliotecaria que los hojea y te deja cinco. La idea de usar un modelo de este tipo para reordenar pasajes viene de Nogueira y Cho (2019).
Para el ejemplo usamos un reordenador multilingüe, mmarco-mMiniLMv2, entrenado con mMARCO: una colección de preguntas y pasajes en inglés traducida automáticamente a trece lenguas, el español entre ellas. No hemos encontrado uno igual de difundido entrenado con textos escritos en español, y conviene saberlo: lo que aprendió de traducciones puede fallar con giros propios del español o de sus variedades.
En el comparador de arriba, la opción «Reordenada» muestra lo que hace con los cinco primeros de la híbrida. A veces separa con mucha claridad lo pertinente: en la camiseta bordada, el artículo de excepciones saca 3,92 y el siguiente, −4,31. Pero en este ejemplo también se equivoca: baja la cafetera rota al segundo puesto (antepone el artículo del reembolso) y hace lo mismo con «La sudadera me queda pequeña» (antepone el de excepciones al de cambios de talla). Y no puede rescatar lo que no le llega: las zapatillas, séptimas en la híbrida, ni las ve. Sus puntuaciones tampoco son una probabilidad: la respuesta correcta de la cafetera saca −6,97.
6. Antes de buscar: reescribir la pregunta
La pregunta de una persona no siempre sirve tal cual para buscar. En una conversación, sobre todo, depende de lo anterior:
Persona: ¿Puedo devolver una camiseta con mi nombre bordado? Asistente: No, los productos personalizados no admiten devolución. Persona: ¿Y si me llega con un agujero?
¿Y si me llega con un agujero?
La pregunta no dice qué llega. Sin «camiseta» ni «personalizada», la búsqueda no tiene de qué tirar.
¿Puedo devolver una camiseta personalizada que llega con un defecto?
Un modelo reescribe la última pregunta para que se entienda sola: resuelve la elipsis y la anáfora antes de buscar. Ahora pueden aparecer el artículo de excepciones y el de productos defectuosos, y decidir cuál pesa más ya es trabajo de la respuesta.
Por eso muchos sistemas reescriben la pregunta antes de buscar. Las variantes más comunes:
- Hacerla autónoma: resolver las elipsis y las anáforas de la conversación («¿y si me llega con un agujero?» → «¿puedo devolver una camiseta personalizada que llega con un defecto?»).
- Varias formulaciones: buscar con tres o cuatro paráfrasis y unir los resultados. Con las zapatillas ayuda, pero no basta: si se pregunta por «zapatillas usadas», el artículo 3 sube del sexto al cuarto puesto por significado.
- Una respuesta hipotética: pedir a un modelo que redacte una respuesta imaginaria y buscar con ella, porque se parece más a un fragmento del documento que la pregunta (HyDE, Gao et al., 2023).
Las tres son trabajo lingüístico automatizado: reformular, parafrasear y cambiar de género textual (de pregunta a texto normativo). Y las tres se pueden equivocar: una reescritura que interpreta mal la anáfora busca otra cosa con total seguridad.