Chisme 104 del Lince: el asistente de la casa

Tutorial paso a paso. Usaremos dos pestañas abiertas a la vez: LearningML para entrenar la IA con frases escritas y Scratch de LearningML para que la casa reaccione.

Mediodía de agosto en Sierra Bermeja. Dentro de la cueva hace un calor horrible, y la Gata Montesa está tumbada bajo la única sombra. «Que alguien encienda el ventilador», murmura. El Lince de la Noche aprieta el teclado de su portátil: quiere una casa que entienda lo que le pides. Primero intenta escribir todas las frases posibles. La Gata lo mira y dice: «Eso te llevaría toda la vida. Enséñale a entender lo que quieres decir».

Introducción

Vamos a construir un asistente de casa en Scratch. Le escribes una orden, como «enciende la luz» o «sube la persiana», y la casa la ejecuta: la lámpara, el ventilador o la persiana cambian de estado. Pero la clave no es programar cada frase posible, sino entrenar una IA que reconozca lo que quieres decir.

Por qué este chisme

En los chismes anteriores la IA reconocía imágenes y sonidos. Aquí trabaja con texto, y eso nos obliga a fijarnos en algo distinto: no importan solo las palabras, sino cómo están dichas las frases. Además, es el mismo tipo de órdenes que damos a un asistente de voz o a una app de domótica, pero visto desde dentro.

Cómo funciona

Primero probamos un método de reglas: un bloque por cada frase que queremos entender. Funciona, pero solo con las frases que hemos previsto. Si alguien escribe «hace mucho calor, pon algo de aire», la casa no entiende nada.

Con la IA cambiamos de método: recogemos ejemplos de cada orden (luz encendida, luz apagada, persiana subir, persiana bajar) y un grupo de frases que no son órdenes. La IA aprende los patrones de esos ejemplos y, ante una frase nueva, devuelve la clase más parecida con un nivel de confianza entre 0 y 1. Si la confianza es menor de 0,6, la casa responde «No te he entendido» y no hace nada.

Qué necesitamos

Bloques de Scratch que vamos a usar

Si nunca has usado Scratch, lee esta tabla antes de empezar. Cada bloque es una instrucción que se pega en el programa, como una frase de un guion.

BloqueQué haceEjemplo en este chisme
al hacer clic en bandera verdeEmpieza el programa cuando pulsas la bandera verde de arriba.Todo el programa empieza aquí.
por siempreRepite lo que hay dentro una y otra vez, sin parar.La casa está siempre esperando una orden.
preguntar ... y esperarMuestra una pregunta en el escenario y espera a que el alumno escriba.«¿Qué quieres que haga la casa?»
respuestaGuarda lo último que ha escrito el alumno.Lo copiamos a la variable respuesta.
dar a ... el valor ...Guarda un valor en una variable, como si escribiéramos en una caja con nombre.dar a orden el valor (la clase que devuelve la IA).
Classify item (LearningML)Pide a la IA la clase de un texto, según lo que ha aprendido.Devuelve luzon, luzoff, etc.
Confidence for item (LearningML)Devuelve lo seguro que está la IA de su respuesta, entre 0 y 1.Si vale 0,9, está muy segura; si vale 0,4, está adivinando.
si ... entoncesHace algo solo si se cumple una condición.si orden = luzon entonces cambia el disfraz de la lámpara.
si noHace otra cosa cuando la condición no se cumple.Si la confianza no supera 0,6, dice «No te he entendido».
=, >Compara dos valores: = mira si son iguales; > mira si el primero es mayor.confianzaorden > 0,6.
cambiar disfraz a ...Cambia la imagen del sprite por otra de su lista de disfraces.La lámpara pasa de apagada a encendida.
decir ... durante 2 segundosEl sprite muestra un mensaje en un bocadillo durante 2 segundos.«No te he entendido».

Los nombres de los bloques de LearningML pueden variar un poco según la versión. Si no encuentras uno, busca la palabra clave en el buscador de bloques de Scratch.

Construcción

Paso 1. Reglas primero, ¿cuántas frases caben?

Antes de entrenar, escribe en papel un programa de reglas con cuatro frases: «enciende la luz», «apaga la luz», «sube la persiana» y «baja la persiana». Pruébalo con dos frases que no hayas previsto, por ejemplo «hay demasiada luz» o «quiero que se vea el mar». Anota cuántas falla. Esa lista es la que la IA tendrá que resolver.

Paso 2. Crea el proyecto de texto

En el editor de LearningML, crea un proyecto de texto con cinco clases, escritas exactamente así: luzon, luzoff, persianasubir, persianabajar y nada. La clase nada reúne frases que no son órdenes, como «qué calor hace» o «mañana hay examen».

Paso 3. Escribe ejemplos con variedad

En cada clase, escribe al menos 8 ejemplos distintos. Cambia la forma de pedirlo: directa («enciende la luz»), educada («¿puedes encender la lámpara, por favor?»), con prisa («luz ya»), con una queja («no veo nada») y con un rodeo («hace un poco de oscuridad aquí»). Piensa también en errores de escritura: alguien puede escribir «encende la luz» sin tilde o con una falta.

Cuidado con los ejemplos: si todas las frases de luzon empiezan igual, la IA aprenderá esa forma y no la idea.

Ejemplos listos para copiar

Si tenéis prisa por probar la técnica y no queréis escribir los textos, copiad estos. Son de entrenamiento: una frase por ejemplo.

ClaseEjemplos de entrenamiento
luzonenciende la luz · enciende la lámpara, por favor · ¿puedes encender la luz? · luz ya · hace oscuro aquí, enciende algo · no veo nada, pon la luz · pon la lámpara · da luz, que no veo · ¿me enciendes la luz? · necesito luz en la cueva · la lámpara, encendida · enciende la luz de la cocina · pon luz aquí, por favor · que se encienda la luz · enciéndela, que está oscuro
luzoffapaga la luz · apaga la lámpara, por favor · ¿puedes apagar la luz? · luz fuera ya · hay demasiada luz, apágala · me molesta la lámpara, apágala · quita la luz · apaga todo lo de la luz · ¿me apagas la luz? · la lámpara, apagada · apaga la luz de la cocina · que se apague la luz · apágala, que estoy durmiendo · no quiero luz, apágala · apaga la luz del pasillo, por favor
persianasubirsube la persiana · sube la persiana, por favor · ¿puedes subir la persiana? · quiero ver el mar, sube la persiana · levanta la persiana · abre la persiana · que entre el sol, sube la persiana · sube ya la persiana · ¿me subes la persiana? · sube la persiana del salón · que se levante la persiana · quiero luz de la mañana, sube la persiana · sube la persiana de la cocina · abre la persiana, por favor · levántala, la persiana · sube, sube la persiana
persianabajarbaja la persiana · baja la persiana, por favor · ¿puedes bajar la persiana? · hace mucho sol, baja la persiana · cierra la persiana · baja la persiana ya · echa la persiana · que no entre tanto sol, baja la persiana · ¿me bajas la persiana? · baja la persiana del salón · que se cierre la persiana · quiero dormir, baja la persiana · baja la persiana del dormitorio · cierra la persiana, por favor · bájala, que entra mucho sol · baja, baja la persiana
nadaqué calor hace hoy · mañana hay examen · me gusta el mar · ¿qué hora es? · buenos días · hoy he comido arroz · el lince corre muy rápido · qué bonito día hace · no sé qué hacer · vamos a la playa · ¿de qué color es el mar? · esta tarde llueve · el café está frío · me duele la cabeza · ayer vi un lince · ¡qué buena música! · tengo sueño · cuántos años tiene el castillo

Descargar los ejemplos en archivo (una frase por línea, para cargarlos en LearningML):

Y estas frases son de prueba: no están en los ejemplos de arriba. Escríbelas una a una en la prueba del modelo y anota qué clase devuelve la IA y con qué confianza. Algunas son difíciles a propósito.

FraseClase esperada
por favor, enciende la lámpara del salónluzon
apágame la luzluzoff
sube un poco la persianapersianasubir
baja la persiana que deslumbrapersianabajar
encinde la luzluzon (con falta)
sube la persinapersianasubir (con falta)
me deslumbra el sol, cierra la persianapersianabajar (indirecta)
hay un poco de oscuridad aquíluzon (indirecta)
quiero ver las montañaspersianasubir (muy indirecta)
qué bonita está la luz de la tardenada (trampa: tiene «luz»)
mañana vamos a Esteponanada
la luz de Sierra Bermeja es preciosanada (trampa: tiene «luz»)

Apunta cuántas acierta la IA. Las frases indirectas y las trampas son las que más fallan, y ahí está la discusión para el aula.

Paso 4. Entrena el modelo y prueba frases nuevas

Entrena el modelo y escribe frases que no estén en los ejemplos. ¿Acierta? ¿Qué clase confunde con cuál? Apunta los fallos. Si la IA falla con una frase, añade dos o tres ejemplos parecidos a esa clase y vuelve a entrenar.

Paso 5. Prepara la casa en Scratch

En el Scratch de LearningML, carga el modelo y crea tres sprites: lampara, ventilador y persiana. Cada uno tiene dos disfraces: encendida o apagada, subida o bajada. Crea también estas variables:

Los disfraces son estas imágenes sencillas (descárgalas y ponlas como disfraces de cada sprite). Cada sprite tiene dos: encendido/apagado o subido/bajado.

SpriteDisfraz 1Disfraz 2
lamparaLámpara encendida
encendida
Lámpara apagada
apagada
persianaPersiana subida
subida
Persiana bajada
bajada
ventilador (reto)Ventilador encendido
encendido
Ventilador apagado
apagado

Paso 6. Recoge la orden y clasifícala una sola vez

Dentro de un bucle por siempre, pregunta «¿Qué quieres que haga la casa?» y espera la respuesta. Guárdala en una variable y clasifica esa misma variable. Así la orden y la confianza salen de la misma frase.

por siempre
  preguntar "¿Qué quieres que haga la casa?" y esperar
  dar a respuesta el valor (respuesta)
  dar a orden el valor (Classify item respuesta)
  dar a confianzaorden el valor (Confidence for item respuesta)

Paso 7. Haz que la casa reaccione

Si la confianza es mayor de 0,6, mira la orden con un si para cada clase:

Si la confianza no supera 0,6, el sprite casa dice «No te he entendido» durante 2 segundos.

El programa completo en Scratch

Así queda el sprite casa una vez montado. La parte de arriba recoge la orden y la clasifica; la de abajo reacciona. Si tu versión de LearningML o de Scratch muestra los bloques con otro aspecto, lo importante es que los nombres de las clases y de los mensajes coincidan.

Programa completo del sprite casa: al hacer clic en la bandera, por siempre pregunta qué quiere la casa, guarda la respuesta, la clasifica y guarda la confianza; si la confianza es mayor que 0,6, según la orden enciende la luz, apaga la luz, sube o baja la persiana; si no, dice No lo he entendido.
Captura 1: el programa completo del sprite casa.

Cada orden envía un mensaje a los sprites de la lámpara y de la persiana. Cada sprite recibe su mensaje y cambia de disfraz:

Sprite lámpara: al recibir encenderluz cambia al disfraz encendido; al recibir apagarluz cambia al disfraz apagado.
Captura 2: el sprite de la lámpara reacciona a los mensajes encenderluz y apagarluz.
Sprite persiana: al recibir abrirpersiana cambia al disfraz subida; al recibir cerrarpersiana cambia al disfraz bajada.
Captura 3: el sprite de la persiana reacciona a los mensajes abrirpersiana y cerrarpersiana.

Para el profesorado

Antes de clase, haz tú la prueba completa: escribe los ejemplos, entrena, programa la casa y comprueba que responde a frases nuevas. Los nombres de las clases tienen que coincidir exactamente con los de los bloques (por ejemplo luzon, escrito todo junto y sin espacios). Si algún bloque tiene otro nombre en tu versión de LearningML, ajústalo. Los ejemplos se escriben en el propio editor y no hace falta subir nada a ningún servicio externo.

Cómo probarlo

  1. Escribe diez órdenes distintas, incluidas dos que no estaban en los ejemplos. Anota cuántas acierta la casa.
  2. Escribe la misma orden con tres faltas de ortografía. ¿La entiende igual?
  3. Escribe una frase que no sea una orden, como «qué bonito día». ¿Se mueve algún dispositivo?

Qué estamos midiendo realmente

La IA no entiende el significado de la frase como nosotros. Compara lo que escribes con los ejemplos que ha visto, y sus palabras y estructuras son las pistas que usa. Por eso una frase con otras palabras, o con una falta, puede engañarla. Y con más ejemplos puede acertar más, pero nunca sabe si la frase que escribimos tiene sentido de verdad. Medir no significa necesariamente medir bien.

Para el aula

Retos

  1. Haz que funcione. Consigue que la casa responda a las cuatro órdenes escritas de forma distinta a los ejemplos.
  2. Añade un dispositivo. Por ejemplo, el ventilador: sube, baja o apaga.
  3. Guarda los datos. Registra 30 órdenes escritas por tus compañeros y calcula el porcentaje de aciertos.
  4. Sobreentrena a propósito. Entrena una versión con la misma frase copiada 30 veces en cada clase, y otra con 16 ejemplos variados. Prueba las dos con las frases de prueba. ¿Cuál acierta más con frases nuevas? ¿Por qué la que memoriza falla?
  5. Compara con reglas. Escribe el mismo programa con reglas y con la IA. ¿Cuál entiende más frases?

Qué hemos aprendido

Un asistente de casa puede parecer muy listo, pero por dentro hay ejemplos, clases y un umbral de confianza. Escribir reglas para todo es imposible; entrenar una IA con ejemplos variados es más práctico, pero solo sabe lo que ha visto, y hay que comprobarlo.

Para seguir investigando