E051_Cómo_llevar_la_precisión_de_un_RAG_del_50__al_95_
Ep. 51

E051_Cómo_llevar_la_precisión_de_un_RAG_del_50__al_95_

Episode description

Episodio 51: Mejorando la calidad de la recuperación en sistemas RAG

En el episodio 51 de BIMPRAXIS, exploramos cómo mejorar la calidad de la recuperación en sistemas de Retrieval Augmented Generation (RAG). Se analiza un caso de estudio real donde un equipo logró aumentar la precisión de su sistema de búsqueda de un 50% a más del 95%. El enfoque se centra en la importancia de diagnosticar correctamente el problema y aplicar soluciones directas e intuitivas, en lugar de depender de técnicas complejas o de moda. Se destaca el uso de modelos de lenguaje para estructurar y mejorar la base de conocimiento, y cómo este enfoque puede ser más efectivo que la búsqueda semántica o vectorial para ciertos problemas.

Download transcript (.srt)
0:10

Buenas, esto es BIMPRAXIS, el podcast donde el

0:15

BIM se encuentra con la inteligencia artificial.

0:20

Exploramos la ciencia, la tecnología y el futuro

0:23

desde el enfoque de la arquitectura, ingeniería y

0:26

construcción.

0:28

¡Empezamos!

0:37

Muy buenas.

0:38

Episodio 51.

0:40

Continuamos con la serie dedicada a los RAG,

0:42

Retrieval Augmented Generation.

0:45

Hoy hablaremos de cómo mejorar la calidad de

0:48

la recuperación.

0:49

Bienvenidos al podcast de BIMPRAXIS.

0:53

La idea central de estos sistemas, ya lo

0:54

sabemos, es conectar un modelo de lenguaje a

0:57

una base de conocimiento para que dé respuestas

0:59

más precisas.

1:01

Pero, ¿qué pasa cuando esa conexión falla?

1:05

Pues ese es precisamente el punto crítico.

1:08

Es que la calidad de todo el sistema

1:10

depende casi por completo de la calidad de

1:12

la recuperación.

1:14

De encontrar los documentos correctos.

1:16

Exacto.

1:16

De encontrar los documentos correctos para darle contexto

1:19

al modelo.

1:20

Si los documentos que recuperas son, pues, irrelevantes

1:24

o incorrectos, da igual lo bueno que sea

1:26

tu modelo o el prompt final.

1:28

La respuesta va a ser mala.

1:29

Va a ser mediocre o directamente errónea.

1:32

Y el material que analizamos hoy, que viene

1:34

de un proyecto real documentado por Johannes Jolkonen

1:36

en su canal Functio AI, aborda justo esto.

1:40

Se enfrentaron a un sistema que, bueno, apenas

1:42

acertaba la mitad de las veces.

1:44

Que ya es decir.

1:45

Y lo transformaron en uno con una precisión

1:47

de más del 95%.

1:49

Así que hoy vamos a desgranar cómo lograron

1:52

esa mejora tan espectacular.

1:53

Es un caso de manual, de verdad.

1:55

Sobre cómo un diagnóstico inteligente del problema te

1:58

puede llevar a una solución mucho más eficaz

2:00

que, bueno, que simplemente aplicar la tecnología más

2:03

popular del momento.

2:04

Pues vamos a ello.

2:06

Para entender la genialidad de la solución, creo

2:08

que lo mejor es empezar por el principio.

2:10

¿Cuál era el sistema que tenían montado y

2:12

por qué fallaba de esa forma?

2:14

A ver, el punto de partida era un

2:16

proyecto bastante común.

2:17

Un chatbot interno para una empresa del sector

2:19

del bienestar.

2:20

Spine Wellness.

2:21

El objetivo era que los empleados de atención

2:24

al cliente pudieran consultar rápido información sobre servicios,

2:28

ubicaciones, especialistas.

2:31

Cientos de empleados necesitaban respuestas al instante.

2:35

Una herramienta de productividad, vaya.

2:37

Y por lo que dicen, la arquitectura que

2:39

montaron era la estándar para un sistema a

2:42

RAG.

2:42

Totalmente estándar.

2:43

Siguieron el libro de jugadas al pie de

2:45

la letra.

2:46

Primero, recopilaron datos de sus sistemas, descripciones de

2:50

spas, gimnasios, perfiles de masajistas.

2:53

Luego, limpiaron y trocearon esa información en chunks.

2:57

Tercero, crearon los embeddings, estas representaciones numéricas que

3:02

capturan el significado.

3:04

Y finalmente, lo cargaron todo en una base

3:06

de datos vectorial, en su caso, Azure AI

3:09

Search, para las búsquedas semánticas.

3:12

Y para simplificar, unieron todos los campos de

3:14

texto, como la descripción, la ciudad, las especialidades,

3:18

todo en un único campo gigante llamado content.

3:21

Sí, sobre el que se hacía la búsqueda.

3:23

Suena lógico, pero claro, los problemas aparecieron enseguida.

3:28

Cuando un usuario preguntaba algo tan simple como

3:31

masaje sueco en Helsinki, la tasa de acierto

3:34

era de un 50-60%.

3:36

Para una herramienta profesional, eso es un fracaso.

3:39

Es inaceptable.

3:41

Y aquí es donde la historia se pone

3:42

de verdad interesante, porque su primer instinto fue

3:45

intentar mejorar la búsqueda probando los dos enfoques

3:47

más populares.

3:49

Y ambos fallaron.

3:50

Y ambos fallaron, pero por razones completamente opuestas.

3:53

Empecemos por el primero, la búsqueda vectorial.

3:55

Es como la técnica estrella en el mundo

3:57

RAG, la que usa los embeddings para encontrar

3:59

cosas por similitud.

4:01

¿Por qué no les funcionó?

4:02

La fuente lo describe como un fracaso total

4:04

para este caso de uso concreto.

4:07

Y la razón es...

4:08

es útil pero fundamental.

4:11

La búsqueda vectorial es brillante para la similitud

4:13

semántica, para lo que podríamos llamar coincidencia difusa.

4:18

Vale.

4:17

Si buscas coche deportivo rojo, te puede devolver

4:21

documentos que hablen de un automóvil rápido escarlata,

4:25

porque entiende que son conceptos relacionados.

4:27

O sea que el sistema era demasiado creativo,

4:31

por así decirlo.

4:33

Entendía que Helsinki y Estocolmo eran parecidas por

4:36

ser capitales nórdicas, pero para el usuario que

4:39

busca algo en una ciudad concreta, esa inteligencia

4:43

es un error.

4:44

Exactamente.

4:45

Devolvía otros tipos de masajes porque eran semánticamente

4:48

parecidos, o servicios en otras ciudades porque eran

4:52

semánticamente parecidas a Helsinki.

4:54

El problema es que el usuario no quería

4:56

algo parecido, quería exactamente un masaje sueco en

5:00

Helsinki.

5:00

Necesitaban una coincidencia exacta, no una aproximación.

5:05

Justo.

5:06

Vale, entiendo el problema.

5:08

La búsqueda semántica era demasiado imprecisa, Así que,

5:12

lógicamente, probaron el otro extremo, la búsqueda de

5:15

texto completo de toda la vida con el

5:17

algoritmo BM25, que se basa en palabras clave

5:21

exactas.

5:22

Eso es.

5:23

La fuente dice que fue un poco mejor,

5:26

pero no mucho.

5:27

¿Qué falló esta vez?

5:29

Aquí el problema era casi el contrario.

5:31

El sistema era demasiado literal y se dejaba

5:33

engañar por la frecuencia de las palabras.

5:36

El ejemplo que usan es brillante.

5:38

A ver.

5:39

Imagina que tienes dos ubicaciones.

5:41

La ubicación A, que es irrelevante, no ofrece

5:43

masaje sueco.

5:45

Pero en su descripción la palabra masaje aparece

5:47

seis veces porque ofrecen muchos otros tipos.

5:49

Tailandés, de tejido profundo.

5:52

Eso es.

5:53

Y para colmo, en el menú de su

5:54

cafetería sirven albóndigas suecas.

5:57

No puede ser.

5:58

Ya veo por dónde vas.

5:58

Pues esa ubicación, que no sirve para nada,

6:02

acumula siete coincidencias con las palabras masaje y

6:06

sueco.

6:07

Ahora, compárala con la ubicación B, que es

6:09

el resultado perfecto.

6:11

Un centro en Helsinki que solo ofrece masaje

6:14

sueco.

6:15

Claro.

6:16

Su documento solo tiene tres coincidencias, masaje, sueco

6:19

y Helsinki.

6:21

El algoritmo BM25, como prima la frecuencia, colocaría

6:25

el resultado incorrecto por encima del correcto.

6:28

Es un fallo de diseño del método para

6:30

este tipo de consulta.

6:32

El sistema no entiende el contexto, solo cuenta

6:34

palabras.

6:34

Y por si fuera poco, había un segundo

6:37

problema, muy grave porque el proyecto era en

6:39

finés, pero que afecta a muchísimos idiomas, español

6:42

incluido.

6:43

Las declinaciones y conjugaciones.

6:45

Ah, claro.

6:46

Si el usuario busca en Helsinki, con una

6:49

terminación gramatical, pero en el documento la palabra

6:52

Helsinki aparece de otra forma, BM25 simplemente no

6:56

lo encuentra.

6:57

No es tan listo.

6:58

Vale.

6:59

El panorama es desolador.

7:01

Ni la búsqueda semántica inteligente ni la búsqueda

7:04

literal por palabras clave funcionaban.

7:06

Estaban en un callejón sin salida.

7:08

Exacto.

7:09

Se dieron cuenta de que el problema no

7:11

era qué algoritmo de búsqueda usar, sino la

7:14

naturaleza de sus datos.

7:16

Y la solución que encontraron fue sorprendentemente simple

7:19

y elegante.

7:21

Implicó dos cambios, uno en cómo preparaban los

7:23

datos en el back-end y otro en cómo

7:26

interpretaban la pregunta del usuario en el front-end.

7:29

Empecemos por el back-end.

7:30

¿Cuál fue ese cambio en la indexación?

7:32

El cambio fue conceptualmente muy potente.

7:35

En lugar de tener toda la información en

7:37

un campo de texto desestructurado, decidieron añadir metadatos

7:41

estructurados.

7:43

¿Cómo?

7:43

Pues en concreto, añadieron un nuevo campo llamado

7:46

servicios.

7:47

En la práctica, esto significa que la frase

7:50

masaje sueco, que antes estaba perdida en un

7:52

párrafo, ahora se convertía en una etiqueta dentro

7:55

de una lista.

7:56

Algo como servicios, masaje sueco, reflexología.

8:00

Un momento, eso suena genial, pero ¿de dónde

8:04

sacaron esos datos estructurados?

8:06

Si el problema era que todo estaba en

8:08

texto, parece un círculo vicioso.

8:10

No me digas que tuvieron que etiquetar miles

8:12

de documentos a mano.

8:13

Ahí está la genialidad de la solución.

8:16

Utilizaron un modelo de lenguaje, un LLM, durante

8:19

el propio proceso de indexación.

8:21

¿Cómo?

8:22

Para cada documento que entraba al sistema, pasaban

8:24

el texto descriptivo por un LLM, con una

8:27

instrucción muy directa.

8:28

Extrae de este texto una lista estructurada de

8:31

los servicios que se ofrecen y devuélvemela en

8:33

formato JSON.

8:35

O sea, que usaron la generación de un

8:37

LLM para mejorar la recuperación.

8:40

Invirtieron el acrónimo RAG.

8:42

Justo eso.

8:43

Es una idea que la fuente llama Generation

8:46

Augmented Retrieval.

8:48

En lugar de usar el LLM solo al

8:50

final para responder, lo usaron al principio, para

8:53

enriquecer y estructurar su base de conocimiento.

8:56

Es como tener un ejército de documentalistas súper

8:58

rápidos etiquetando tu archivo.

9:01

Fascinante.

9:02

Y, por cierto, como consecuencia de esto, eliminaron

9:05

por completo los embeddings y la búsqueda vectorial.

9:08

Concluyeron que para este problema no solo no

9:10

ayudaban, sino que metían ruido.

9:12

Pasaron de buscar en un pajar a tener

9:14

un archivador perfectamente etiquetado.

9:16

Ese fue el cambio en el Maken.

9:18

¿Y la segunda pieza del puzzle, la del

9:19

frontend?

9:20

La segunda pieza fue cambiar cómo trataban la

9:23

pregunta del usuario.

9:25

Antes, la frase masaje sueco en Helsinki se

9:28

lanzaba directamente contra el motor de búsqueda.

9:30

Ahora no.

9:31

Ahora esa frase se pasa primero por otro

9:34

LLM.

9:35

¿Con qué objetivo?

9:36

¿Para que la reescriba o la mejore?

9:38

Ah, para algo mucho más preciso.

9:40

La única misión de este segundo LLM es

9:43

actuar como un traductor.

9:45

Convierte la pregunta en lenguaje natural del usuario

9:47

en una consulta estructurada, formal, que la base

9:50

de datos pueda entender sin ninguna ambigüedad.

9:53

Ah, ya veo.

9:55

Coge masaje sueco en Helsinki y lo transforma

9:57

en una consulta de filtro estricta, como por

9:59

ejemplo, ciudad igual a Helsinki, y servicios contiene

10:03

masaje sueco.

10:04

Brillante.

10:06

Es decir, eliminaron por completo la ambigüedad.

10:09

Ya no se busca algo que se parezca

10:11

a esto, sino que se le ordena a

10:13

la base de datos devuélveme solo los documentos

10:16

que cumplan estas dos condiciones exactas.

10:19

Es un cambio de paradigma total.

10:21

Y el impacto fue, como era de esperar,

10:23

inmediato, masivo.

10:25

En la siguiente ronda de pruebas, la tasa

10:27

de acierto se disparó a casi el 100%.

10:30

Increíble.

10:31

El feedback fue unánime.

10:32

Los problemas de relevancia habían desaparecido.

10:35

Los únicos fallos que quedaban eran casos muy

10:37

puntuales, casi siempre por errores en los datos

10:39

de origen, no en el sistema.

10:42

Problema resuelto.

10:43

Un resultado espectacular, desde luego.

10:46

Pero esto suena demasiado bueno para ser verdad.

10:49

Seguro que este enfoque tiene sus inconvenientes.

10:51

¿Qué contrapartidas tuvieron que asumir?

10:54

La fuente es muy transparente en eso e

10:56

identificados trade-offs claros.

10:58

El primero, como te puedes imaginar, es el

11:00

coste.

11:01

Claro.

11:01

Usar un LLM para procesar y estructurar cada

11:04

documento durante la indexación es más caro que

11:07

simplemente generar un embedding.

11:09

Cada documento que añades implica una llamada a

11:11

una API y eso cuesta dinero.

11:13

Un coste inicial y luego recurrente cada vez

11:15

que se actualizan los datos.

11:17

¿Cómo justificaron esa inversión?

11:19

Lo pusieron en perspectiva.

11:20

estaban construyendo una herramienta para ahorrar miles de

11:23

horas a cientos de empleados.

11:26

El coste adicional de las llamadas a la

11:28

API era ínfimo en comparación con el valor

11:31

de negocio que aportaba tener una herramienta que

11:33

funcionaba de verdad.

11:34

El retorno de la inversión era obvio.

11:36

No fue ni un debate.

11:37

Tiene todo el sentido, sí.

11:39

¿Y la segunda contrapartida?

11:41

La segunda es la latencia.

11:43

La latencia en la respuesta al usuario.

11:46

Al añadir ese paso intermedio, en el que

11:48

un LLM traduce la pregunta, introduces un pequeño

11:52

retraso.

11:52

Y en una herramienta de uso intensivo, cada

11:54

milisegundo cuenta.

11:56

¿Cómo lo solucionaron?

11:58

Con pragmatismo.

11:59

Se dieron cuenta de que la tarea de

12:01

traducir la consulta es muy simple y definida.

12:04

Las entradas son cortas y las salidas también.

12:07

No necesitas un modelo gigante y lento para

12:09

eso.

12:10

Optaron por un modelo mucho más pequeño, rápido

12:12

y barato, optimizado para esa tarea.

12:15

El retraso añadido fue mínimo, apenas perceptible, y

12:19

el beneficio en la precisión lo compensaba con

12:21

creces.

12:23

Entonces, si destilamos la experiencia de este proyecto,

12:27

¿qué significa todo esto para alguien que esté

12:29

construyendo un sistema similar?

12:31

¿Cuál es la gran lección?

12:32

La lección más importante, que la propia fuente

12:35

subraya, es que a veces las soluciones más

12:37

directas e intuitivas son las mejores.

12:39

El equipo podría haberse perdido en técnicas mucho

12:42

más complejas, de moda, pero en lugar de

12:44

eso dieron un paso atrás.

12:46

¿Se centraron en diagnosticar el problema real en

12:49

lugar de aplicar la última tecnología sin más?

12:52

Eso es.

12:52

Y esto plantea una pregunta fundamental.

12:55

¿Cuál es la naturaleza de mi problema de

12:57

búsqueda?

12:58

¿Se necesita encontrar cosas relacionadas o se necesita

13:02

encontrar exactamente esto?

13:05

Este equipo se dio cuenta de que su

13:06

problema no era de similitud semántica, sino de

13:09

búsqueda por facetas, de filtrado.

13:12

Y una vez tienes ese diagnóstico, la solución

13:15

se vuelve evidente.

13:16

Exacto.

13:16

Y refuerza esa idea tan potente que mencionabas,

13:20

la de usar la generación para aumentar la

13:23

recuperación.

13:24

Sí, para mí ese es el otro gran

13:26

aprendizaje.

13:27

Nos obliga a pensar en los LLMs no

13:29

sólo como el motor que genera la respuesta

13:31

final, sino como una herramienta súper versátil en

13:35

todo el proceso.

13:36

Son como una navaja suiza para manipular datos.

13:39

Pueden extraer, estructurar, limpiar.

13:42

Podemos usarlos para construir una base de conocimiento

13:45

mucho más sólida y fiable.

13:47

El cimiento de todo el sistema RAG.

13:49

Justo.

13:50

Sin duda, un caso de estudio fantástico.

13:53

Un recordatorio de que la buena ingeniería y

13:55

un diagnóstico preciso a menudo superan a la

13:57

aplicación ciega de la tecnología más novedosa.

14:00

Totalmente.

14:02

Y creo que nos deja con una reflexión

14:03

final muy valiosa.

14:05

En un mundo obsesionado con la búsqueda semántica

14:07

y los vectores, este caso nos obliga a

14:10

preguntarnos si a veces no estamos intentando clavar

14:12

un tornillo con un martillo.

14:14

¡Qué buena imagen!

14:15

Un enfoque estructurado, basado en filtros, que viene

14:18

de los principios de las bases de datos

14:20

de toda la vida, puede ser, para ciertos

14:23

problemas, inmensamente superior.

14:25

La clave está en no dar por sentado

14:27

el método, sino en cuestionar si nuestro problema

14:30

es encontrar cosas parecidas o, como en este

14:33

caso, encontrar exactamente esto.

14:36

Y así hemos llegado al final de nuestro

14:37

episodio de hoy.

14:39

Os recordamos que detrás de las voces sintéticas

14:41

que escuchas en estos episodios y que están

14:43

generadas con Notebook LM, hay un humano que

14:46

no es otro que Julio Pablo Vázquez, el

14:49

que dirige el podcast.

14:50

En caso de error, sin duda será humano.

14:54

Hasta el próximo episodio.

15:07

Y hasta aquí el episodio de hoy.

15:09

Muchas gracias por tu atención.

15:21

Esto es BIMPRAXIS.

15:23

Nos escuchamos en el próximo episodio.

15:46

¡Suscríbete al canal!