Inteligencia Artificial II Propuesta de trabajo Miguel A. Gutiérrez Naranjo Reconocimiento de vocales manuscritas con CLIPS La identificación visual de la palabra escrita es una de las fronteras de la Inteligencia Artificial en nuestros dı́as. De hecho, muchas empresas utilizan la identificación de palabras escritas como CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) para comprobar que el interlocutor es un humano y no una máquina. El objetivo de este trabajo es más modesto. Nos centraremos solamente en letras manuscritas, concretamente en vocales, y consideraremos que cada vocal es una imagen en blanco y negro de un tamaño fijo. El objetivo es desarrollar una herramienta de Aprendizaje Automático que, tras un proceso de entrenamiento, sea capaz de tomar una imagen nueva correspondiente a una vocal e identificar de que vocal se trata. En particular el trabajo consiste en desarrollar los siguientes objetivos. Objetivo general: Implementar en CLIPS el algoritmo de retropropagación en una red neuronal multicapa que permita el reconocimiento de imágenes de vocales manuscritas. Objetivos especı́ficos: El desarrollo de trabajo consiste en llevar a cabo los siguientes objetivos evaluables. (a) Generar un conjunto de entrenamiento. Cada elemento del conjunto de entrenamiento debe ser una imagen en dos colores (blanco y negro) de 30 × 30 pı́xeles en formato PGM (Portable Graymap Format). Un fichero PGM contiene texto plano que puede ser modificado por un procesador de texto, pero que a su vez, puede ser interpretado por un visor de imágenes. Por ejemplo, la figura 1 representa la vocal a escrita a mano en uma imagen de 30 × 30 pı́xeles. El fichero PGM de esa imagen es letra a.pgm, que se proporciona con este enunciado. El alumno debe proporcionar un conjunto de ficheros con extensión pgm y nombre un número de 1 hasta N, esto es, 1.pgm, 2.pgm, 3 .pgm, . . . , N.pgm. Cada uno de estos ejemplos debe contener una vocal escrita a mano. El número de ejemplos queda a elección del alumno, pero debe ser suficiente para realizar un proceso de aprendizaje. Figura 1: Letra a manuscrita en una imagen de 30 × 30 pı́xeles 1 (b) Crear un fichero ejemplos.clp donde guardaremos un conjunto de hechos deffacts ejemplos con la sintaxis de CLIPS de manera que crearemos un hecho por cada uno de los ejemplos. Cada ejemplo tendrá 3 atributos: • El identificador: Los ejemplos estarán numerados y el identificador será el número asociado ese ejemplo. Cada ejemplo debe tener como identificador el nombre del fichero pgm que contiene la imagen. • La clasificación: Será un multislot donde guardaremos la clasificación correspondiente para cada imagen. Esta clasificación sólo puede ser de cinco tipos: ◦ ◦ ◦ ◦ ◦ (1 (0 (0 (0 (0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0) 0) 0) 0) 1) para para para para para representar representar representar representar representar la la la la la vocal vocal vocal vocal vocal a. e. i. o. u. • Los pı́xeles: Será una sucesión de 0 y 1 tomada del correspondiente fichero PGM, donde el valor 255 se ha sustituido por 1. Para unificar la notación, la representación CLIPS seguirá la siguiente plantilla: (deftemplate ejemplo (slot identificador (type NUMBER)) (multislot clasificacion (allowed-numbers 0 1)) (multislot pixeles (allowed-numbers 0 1))) Se proporciona un fichero ejemplos.clp que contiene esta plantilla y un ejemplo de deffacts. En este caso el conjunto de hechos contiene un único ejemplo, que corresponde a la imagen de la figura 1, letra a.pgm. (c) Crear un fichero red.clp donde se implemente en CLIPS el algoritmo de retropropagación para redes neuronames multicapa visto en el Tema 3. La arquitectura de la red queda a la elección del alumno, pero debe tener 900 neuronas en la capa de entrada, para poder recibir como entrada la codificación de una imagen de 30 × 30 pı́xeles. La capa de salida debe tener 5 neuronas. El fichero red.clp debe constar de cuatro partes: 1. En la primera parte debe aparecer como comentario dentro del fichero CLIPS y debe ser una breve descripción de la arquitectura de la red y del sistema de representación utilizado. 2. La segunda parte debe contener un deffacts pesos con los valores de los pesos iniciales. Estos no deben generarse aleatoriamente, sino que deben ser proporcionados en el fichero en un conjunto de hechos pesos y poder ser modificados para estudiar distintos comportamientos del sistema. 3. De manera análoga, la tercera parte debe contener un deffacts factor, donde debe especificarse el valor del factor de aprendizaje. 4. La cuarta parte contiene el desarrollo del programa que implementa el algoritmo. 2 Una vez entrenada la red diremos que esta clasifica una imagen como la vocal “x” si la neurona de la capa de salida que asociamos a la vocal “x” es la que devuelve un valor más alto. Los ficheros ejemplos.clp y red.clp deben cargarse juntos para tener toda la información necesaria para poder realizar el aprendizaje. La ejecución del programa en este punto debe modificar el conjunto de pesos hasta que la red esté entrenada según algún criterio de parada, que debe especificarse. Este criterio queda a la elección del alumno. El sistema debe informar al usuario de que ha terminado el algoritmo y por tanto el entrenmiento de la red El uso en CLIPS debe ser el siguiente: CLIPS> (load "ejemplos.clp") Defining deftemplate: ejemplo Defining deffacts: ejemplos TRUE CLIPS> (load "red.clp") Defining deffacts: pesos Defining deffacts: factor Defining ... CLIPS> (reset) CLIPS> (run) El entrenamiento ha concluido Por último, el alumno debe proporcionar un segundo conjunto de ejemplos t1.pgm, t2.pgm, . . . , tr.pgm, con r ejemplos distintos a los que se han usado en el conjunto de entrenamiento, para medir el rendimiento de la red una vez entrenada. Además de los ficheros pgm el alumno debe proporcionar un fichero ejemplos test.clp. Este fichero tendrá la siguiente sintaxis: (assert ejemplo t1 ejemplo t2 ejemplo t3 . . . ejemplo tr) donde cada ejemplo ti tendrá la misma sintaxis que se ha usado para representar los ejemplos del fichero ejemplos.clp. Una vez entrenada la red, leeremos este nuevo fichero mediante la instrucción CLIPS>(batch ‘‘ejemplos test.clp’’) Una nueva ejecución del programa (run) comprobará si los ejemplos de ejemplos test.clp se clasifican correctamente o no. Una vez finalizada la comprobación de todos los ejemplos de este fichero de prueba, el sistema debe informar al usuario del porcentaje de ejemplos del fichero de prueba que han sido correctamente clasificados. El proceso completo de CLIPS es el siguiente (el porcentaje es orientativo): CLIPS> (load "ejemplos.clp") Defining deftemplate: ejemplo Defining deffacts: ejemplos 3 TRUE CLIPS> (load "red.clp") Defining deffacts: pesos Defining deffacts: factor Defining ... TRUE CLIPS> (reset) CLIPS> (run) El entrenamiento ha concluido CLIPS> (batch "ejemplos_test.clp") TRUE CLIPS> (assert ...) ... CLIPS> (run) El porcentje de ejemplos correctamente clasificados es 87.5 CLIPS> Evaluación El alumno debe entregar un fichero comprimido .zip. Dicho fichero debe contener Una carpeta ejemplos que contenga los ficheros con las imágnenes en formato PGM que se usarán para el entrenamiento de la red. Una carpeta ejemplos test que contenga los ficheros con las imágnenes en formato PGM que se usarán para medir el rendimiento de la red una vez entrenada. Los ficheros ejemplos.clp, red.clp y ejemplos test.clp antes descritos. Para la evaluación se valorará: Corrección y eficiencia de la implementación. Claridad y buen estilo de programación CLIPS. Documentación del trabajo realizado (que debe aparecer como comentario del fichero red.clp). Exposición y defensa del trabajo. 4