Jorge Pereira Delgado

Jorge Pereira Delgado

Graduado en Ingeniería de Imagen y Sonido y con un Máster de Machine Learning y Métodos Estadísticos para Procesado Multimedia por la Universidad Carlos III de Madrid. Apasionado de la enseñanza y la ciencia de datos desde la carrera, he trabajado en el departamento de Teoría de la Señal y Comunicaciones en la Universidad Carlos III de Madrid como docente e investigador en diferentes áreas de Machine Learning, como modelado de tópicos y algoritmos de regresión en computación distribuida. Actualmente, trabajo como formador y Data Scientist en Telefónica Tech.
AI & Data
Retrieval Augmented Generation (RAG): enseñando trucos nuevos a modelos viejos
En noviembre de 2022, la empresa OpenAI lanzó su herramienta ChatGPT, provocando una revolución —bueno, otra más en realidad— en el mundo de la inteligencia artificial. ChatGPT es un modelo de una familia de los llamados modelos grandes de lenguaje, o LLM por sus siglas en inglés (Large Language Models). Estos modelos se basan en arquitecturas de Transformers, de las que ya hablamos en este post, y que se entrenan con cantidades ingentes de texto —para hacernos una idea, se estima que GPT4, la última versión de OpenAI, se entrenó utilizando 10.000 GPUs de forma ininterrumpida durante 150 días—, aprendiendo así a generar texto de forma automática. Tal ha sido el éxito de los LLM, que desde la salida de ChatGPT, todas las empresas punteras han ido desarrollando y mejorando sus propios LLM: Llama 3 de Meta, Granite de IBM, o Claude de Anthropic. Aunque estos modelos son muy versátiles, siendo capaces de responder preguntas muy variadas, desde cultura general hasta incluso preguntas matemáticas y de lógica —algo que inicialmente era su talón de Aquiles—, en ocasiones queremos que nuestro modelo tenga un conocimiento sobre un dominio muy específico, incluso que puede ser información propia de una empresa particular. Es aquí donde han surgido varias técnicas para poder utilizar los LLM, pero además, “enseñarles” —ojo a las comillas— nuevos conocimientos. Reentrenando nuestro modelo Si yo le pregunto a cualquier LLM cuál es la capital de España, por ejemplo, este me responderá que es Madrid. El modelo ha sido entrenado con muchísima información pública —podemos pensar en Wikipedia, por ejemplo— entre la cuál se encuentra la respuesta a la pregunta que le hemos hecho. Sin embargo, si le preguntas cómo se llama tu perro, el LLM no va a conocer esa información —salvo que seas Cristiano Ronaldo o Taylor Swift— ya que no ha sido entrenado con ella. Como entrenar un LLM de cero no es una opción para el común de los mortales —no todos nos podemos permitir tener 10.000 GPUs funcionando 150 días seguidos, ¡con lo cara que está la luz!— se han explorado diferentes técnicas para poder incorporar información extra a los LLM ya entrenados, ahorrándonos así tiempo y dinero, sobre todo dinero. Un primer enfoque, muy extendido en el mundo del Deep Learning en general, es utilizar técnicas de Fine Tuning: esto es, tomar un LLM ya entrenado y reentrenarlo con nuestros datos particulares. Así, por ejemplo, tenemos modelos como BloombergGPT, un LLM que, a partir de los modelos de OpenAI, fue reentrenado con una gran cantidad de información financiera, creando así un modelo especialmente diseñado para aquellos que trabajan en el mundo de las finanzas. Sin embargo, ya que los modelos son tan grandes —miles y miles de millones de parámetros que hay que ajustar— esta técnica sigue siendo muy costosa. Además, en ocasiones las cosas no son tan bonitas como suenan, ya que en muchos casos BloombergGPT funciona solo ligeramente mejor que ChatGPT —sin tener este ningún conocimiento extra, sino el modelo de base que podemos utilizar cualquiera de nosotros— y peor que GPT4, la última versión del modelo. Conocer la información vs saber buscar la información Si al lector le preguntasen el cumpleaños de un familiar lejano, posiblemente no lo sabría de memoria —al menos ese es mi caso, lo reconozco. Sin embargo, tener esa información en la memoria es irrelevante, ya que la podemos tener apuntada en un calendario —para los más analógicos— o en el móvil. Con los LLM ocurre lo mismo. Si entrenamos un LLM con un conocimiento específico, el LLM “sabrá” ese conocimiento, igual que nosotros sabemos —espero— el cumpleaños de nuestros padres. Sin embargo, no necesitamos que un LLM sepa algo para poder preguntarle acerca de ello, podemos darle información extra para que elabore su respuesta, de la misma manera que si a nosotros nos preguntan algo que desconocemos podemos buscar la respuesta en libros, apuntes, internet, o llamando a nuestro amigo. Así, si yo le pregunto a ChatGPT por mi cumpleaños, obviamente no sabe darme la respuesta, como podemos ver en la Figura 1. Figura 1: ejemplo de respuesta de ChatGPT a una información desconocida. Sin embargo, si yo le proporciono información adicional sobre mí en el prompt —el texto que le pasamos al LLM— podemos ver como la respuesta sobre la fecha de mi cumpleaños es correcta —e incluso ChatGPT se permite alguna floritura, como podemos ver en la Figura 2. El LLM no conoce la información pero, si se le proporciona un contexto, sí que sabe buscarla y utilizarla para elaborar la respuesta. Figura 2: ejemplo de respuesta de ChatGPT al proporcionarle información adicional. Encontrando la información adecuada: sistemas RAG Llegados a este punto, el lector podría no estar muy satisfecho con el ejemplo anterior. ¿De qué sirve preguntarle a ChatGPT por mi cumpleaños si yo mismo tengo que darle esa información en el prompt? Parece bastante inútil preguntarle algo a un LLM si yo mismo le tengo que dar la respuesta. Sin embargo, podríamos diseñar un sistema que automatizase la búsqueda de ese contexto, esa información adicional que el LLM necesita, para pasárselo al LLM. Y precisamente esto es lo que hacen los sistemas RAG (Retrieval Augmented Generation). Los sistemas RAG constan de un LLM y una base de datos que almacenará los documentos sobre los que nosotros vamos a hacer preguntas al modelo. Así, si por ejemplo trabajamos en una empresa de maquinaría industrial, podríamos tener una base de datos con todos los manuales, tanto de la propia maquinaria como de seguridad, y podríamos hacerle preguntas sobre cualquiera de estos temas, que nos respondería tomando la información de dichos manuales. El funcionamiento de los sistemas RAG —ilustrado en la Figura 3— es el siguiente: El usuario escribe un prompt formulando su pregunta, el cual será convertido a un vector numérico a través de un modelo de embedding. Si este término no te es familiar, no te preocupes, puedes pensar que un embedding no es más que la “traducción” de un texto al idioma de los ordenadores. Tras ello, se toma esta “traducción” del prompt y se compara con todos los documentos que se desee —en este caso los manuales— y se extraen los fragmentos más similares. Aquí, hay que recalcar que todos los documentos han sido previamente “traducidos” con el mismo modelo de embedding. Por último, se le proporciona al LLM tanto el prompt como la información extraída de nuestra base de datos vectorial, proporcionándole de manera automática la información necesaria para responder a nuestra pregunta. Figura 3: Esquema de un sistema de RAG. Así, al igual que nosotros podemos buscar información que nos es desconocida, un LLM puede hacer lo mismo si lo integramos dentro de un RAG. Así, podemos explotar las capacidades de generación de texto de los LLM, a la vez que automatizamos la generación del contexto y la información necesaria para responder a las preguntas que deseemos… siempre que tengamos el documento necesario a mano, ¡claro está! IA & Data Preparando tu estrategia de datos para la era de la IA Generativa 7 de marzo de 2024 Imagen de rawpixel.com / Freepik.
17 de junio de 2024
Conectividad e IoT
Anomalías de IoT: cómo unos pocos datos erróneos pueden costarnos muy caro
Cuando escuchamos el término Internet de las cosas –IoT por sus siglas en inglés– es normal que pensemos en neveras con acceso a internet o los ya famosos smartwatches. Pero, ¿qué quiere decir realmente? El término IoT se refiere a objetos físicos que están dotados de sensores, de procesadores y conectados a otros elementos similares, lo que permite obtener determinada información, procesarla, y recopilarla para su posterior uso. No todo son neveras y relojes digitales más caros de lo normal: tenemos desde sensores que cuentan el número de personas que entran en un establecimiento hasta pantallas con una cámara integrada capaces de detectar si alguien está prestando atención a su contenido y registrar esa información. Otros ejemplos interesantes los podemos encontrar en los primeros artículos de esta serie, donde se hablaba de diversos casos de uso de estas tecnologías o de las ventajas del uso de contadores de agua inteligentes para la optimización del ciclo de vida del agua. Sin embargo, en ocasiones los datos capturados se desvían de los valores normales. Si los datos recibidos de un dispositivo IoT nos dicen que una persona ha estado mirando a una pantalla publicitaria durante horas o que la temperatura dentro de un edificio en un momento determinado es de 60ºC son datos, como mínimo, dudosos. Estos valores anómalos han de ser tenidos en cuenta a la hora de diseñar nuestras redes y dispositivos. Los valores recibidos han de pasar un filtro para ver si son valores normales o no y actuar en consecuencia. Este es un ejemplo muy claro de cómo la Inteligencia Artificial (AI por sus siglas en inglés) y el Internet of Things (IoT por sus siglas en inglés) se benefician el uno del otro. La combinación de ambos es lo que conocemos como Artificial Intelligence of Things (AIoThings por sus siglas en inglés) con lo que conseguimos analizar patrones en los datos dentro de una red de IoT y detectar valores anómalos, es decir, valores que no siguen dichos patrones y que suelen estar asociados a malfuncionamiento, problemáticas diversas o nuevos comportamientos entre otros casos. ¿Qué es un outlier? Lo primero que debemos preguntarnos es qué son valores anómalos, llamados comúnmente outliers en el mundo de la ciencia de datos y la Inteligencia Artificial. Si miramos la definición de anomalía en el diccionario de la RAE, obtendremos dos definiciones que se ajustan sorprendentemente bien al ámbito de los datos: “desviación o discrepancia de una regla o de un uso” y “defecto de forma o de funcionamiento”. La primera definición se refiere a valores que no se comportan como nosotros esperaríamos – esto es, se alejan mucho a los valores que esperaríamos. Si nosotros preguntásemos a personas aleatorias cuáles son sus ingresos anuales, sabríamos poner una horquilla de valores en la que van a estar la gran mayoría de los valores. Sin embargo, podríamos encontrarnos con una persona cuyos ingresos son cientos de millones de euros anuales. Este valor sería un outlier, pues se aleja enormemente de lo esperado o lo “normal”, pero es un valor real. La segunda definición hace alusión al término “defecto”. Esto nos da una pista: se refiere a valores que no son correctos, entendiendo que un dato es correcto cuando su valor refleja la realidad de forma acertada. A veces es obvio que un valor es erróneo. Por ejemplo, una persona no puede tener una edad de 350 años y nadie puede haberse dado de alta en una red social en el año 1970. Son valores incoherentes con la realidad que representan. ¿Qué hacer con los outliers? Lo siguiente pregunta que debemos hacernos es qué hacer con estas anomalías, y la respuesta vuelve a variar en función de su naturaleza. En el caso de datos incoherentes - de los cuales sabemos que los valores no son correctos – podríamos eliminar dichos los valores, sustituirlos por valores más coherentes - por ejemplo, la media del resto de observaciones – o incluso utilizar métodos más avanzados de IA para imputar el valor de esos outliers. El segundo caso es más complicado. Por un lado, tener datos tan extremos podría perjudicar enormemente las capacidades de nuestros modelos, y por otro, ignorar un outlier podría tener consecuencias devastadoras según el escenario en el que nos encontremos. Para ilustrar el caso en el cual mantenemos los outliers y estos nos perjudican, podemos imaginar un escenario en el que queremos predecir una variable objetivo – por ejemplo, los ingresos anuales de una persona – en función de una o más variables predictoras – años de experiencia, municipio en el que trabaja, nivel de estudios, etc. Si usásemos una regresión lineal – simplificando, un método que ajusta una recta a los datos de la mejor manera posible -, podemos observar que un outlier podría perjudicar y mucho la forma en la que esa recta se ajusta a los datos, como se aprecia en la Figura 1. Figura 1: comparación de resultados de una regresión lineal con y sin un valor anómalo. En el caso de que decidamos ignorar estos valores extremos, podemos tener el problema de no ser capaces de predecir las consecuencias de dichos eventos que, aunque improbables, son posibles. Un ejemplo sería el caso del accidente nuclear de Fukushima. En este caso se estimó que un terremoto de magnitud 9.0 era improbable, con lo que la central no estaba diseñada para soportarlo (Silver, N. ”La señal y el ruido.”, 2012). Efectivamente, la probabilidad de un terremoto de semejante magnitud en esa zona era muy pequeña, pero si se hubiesen analizado los efectos y daños producidos, se habría podido actuar de otra manera. Anomalías en sensores y redes IoT En el mundo del IoT ocurre lo mismo: ¿son los datos reales, o se deben a un error de los sensores? En ambos casos, habrá que tomar las medidas correspondientes. Si los datos anómalos se deben a un mal funcionamiento de los sensores en momentos puntuales, lo que trataremos de hacer es localizar esos errores y predecir o estimar el valor real en función al resto de datos capturados por el sensor. Aquí hay diversos algoritmos de IA que se pueden usar: basados en redes neuronales recurrentes, como las LTSM, en series temporales, como los modelos ARIMA, y un largo etcétera. El proceso aquí sería el siguiente: tenemos un sensor dentro de un edificio de oficinas, con el fin de obtener la temperatura a lo largo del tiempo para optimizar el gasto energético del edificio y mejorar el confort de los empleados. Cuando recibimos los datos del sensor, se van a comparar estos con los predichos por un modelo de IA. Si la discrepancia es muy grande en un punto determinado – suponemos que el sensor muestra en un momento una temperatura de 30ºC, mientras que el resto del día y nuestro modelo muestran temperaturas alrededor de los 20-21ºC -, el modelo detectará ese dato como un outlier y lo sustituirá por el valor predicho por nuestro modelo. En el caso de recibir un dato anómalo, pero que no sabemos si es real o no y que podría ser muy perjudicial, deberíamos actuar de manera diferente. No es lo mismo detectar una temperatura en un edificio algo más alta de lo normal durante unos instantes que detectar unos valores muy bajos de azúcar en sangre en pacientes con diabetes – otro ejemplo de caso de uso dentro del campo del IoT. El impacto de los outliers en la calidad de los datos Como dijo Clive Humby - uno de los primeros científicos de datos de la historia -, “los datos son el nuevo petróleo”. El valor que han tomado los datos en nuestra sociedad explica el desarrollo vertiginoso de campos como el IoT durante los últimos años. Sin embargo, y al igual que con el petróleo, si estos datos no tienen la calidad necesaria y no reflejan de forma adecuada la información que necesitamos, no valen de nada. Tener un dato erróneo puede llevarnos a tomar decisiones drásticamente diferentes que nos harán perder tiempo y dinero para subsanar. Por ello, al capturar datos en entornos IoT, conseguir detectar esos outliers y corregirlos es una tarea de primera necesidad. Imagen: master1305 /Freepik * * * Para más contenido sobre IoT e Inteligencia Artificial, no dudes en leer otros artículos de nuestra serie: AI OF THINGS AI of Things(I): Multiplicando el valor de las cosas conectadas 22 de febrero de 2022 IA & Data AI of Things (II): El agua, un mar de datos 16 de marzo de 2022 AI of Things AI of Things (IV): Ya puedes maximizar el impacto de tus campañas en el espacio físico 26 de abril de 2022 AI of Things AI of Things (V): Recomendación y optimización de contenido publicitario en pantallas inteligentes 17 de mayo de 2022 AI OF THINGS AI of Things (VI): Inteligencia Artificial Generativa, creando música a ritmo de perceptrón 7 de junio de 2022
18 de septiembre de 2023