Desarrollo de un chatbot que ofrezca información relativa a ...Chatbots are computer programs that...
Transcript of Desarrollo de un chatbot que ofrezca información relativa a ...Chatbots are computer programs that...
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
Proyecto de Fin de Grado en Ingeniería Informática
Desarrollo de un chatbot que ofrezca información relativa a
la UNED y a los diferentes estudios que ofrece.
Alberto Martínez Montenegro
Dirigido por: Elena Gaudioso Vázquez
Curso: 2019-2020 Convocatoria de Junio
Desarrollo de un chatbot que ofrezca información relativa a
la UNED y a los diferentes estudios que ofrece.
Proyecto de Fin de Grado en Ingeniería Informática
de modalidad específica
Realizado por: Alberto Martínez Montenegro
Dirigido por: Elena Gaudioso Vázquez
Fecha de lectura y defensa: ……………………………………………
A Ana, por su apoyo incondicional
Alberto Martínez Montenegro ETS de Ingeniería Informática
Resumen 7
Resumen – Palabras clave
Resumen.
Los chatbots son programas informáticos con los que es posible mantener una
conversación, ofrecen respuestas automatizadas generadas a partir de los mensajes que
reciben de su interlocutor. Mantener una conversación con un chatbot puede tener
múltiples propósitos: solicitar que se realice una acción, averiguar una determinada
información o incluso mantener una charla similar a la que podríamos mantener con
otra persona.
Para que un usuario pueda mantener una conversación exitosa con un chatbot,
ha de utilizar frases concisas y coherentes. Esto es debido a que los chatbots no
comprenden el contexto de la conversación tal y como hacemos los humanos. En lugar
de esto, procesan las palabras contenidas en los mensajes que reciben de su
interlocutor, para generar una respuesta o bien emitir una contestación preparada de
antemano. De esta forma, el chatbot puede seguir una conversación de una forma
normal, pero esto no implica que llegue a comprender o procesar el intercambio total
de información que se produce.
Un chatbot debe tener un propósito, es decir, la información que facilita debe
estar enmarcada dentro de un determinado contexto. El contexto del chatbot
desarrollado para este Proyecto de Fin de Grado (PFG), es ofrecer información relativa
a la UNED, debido a la gran dispersión de información disponible en la web sobre los
estudios impartidos en esta universidad.
En el sitio web https://infouned.es, que se ha creado específicamente para este
PFG, puede encontrarse, además de otros vínculos de interés, una interfaz de chat
integrada que permite conversar directamente con el chatbot.
Para este PFG, se ha creado un chatbot mediante el desarrollo de una aplicación
en el lenguaje de programación Java. Para poder realizar el despliegue de dicha
aplicación, se ha instalado y configurado un servidor GNU/Linux en una placa
computadora Raspberry Pi 4. Este servidor está conectado a internet de forma
ininterrumpida, de manera que puede atender las peticiones de los usuarios que, a
través de diferentes canales, solicitan entablar una conversación con la aplicación Java
utilizando técnicas de Inteligencia Artificial.
Resumen 8
Palabras clave.
Chatbot, Asistente virtual, Inteligencia artificial, Aprendizaje automático, Procesamiento
del lenguaje natural, Facebook, Messenger, Telegram.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Abstract 9
Title – Abstract - Keywords
Title.
Development of a chatbot that offers information about UNED and the different
studies offered.
Abstract.
Chatbots are computer programs that offer automated responses to questions
from the users simulating a conversation. A conversation with a chatbot may have
multiple purposes: request to carry out an action, find out certain information or even
simulate an actual human conversation.
In order to have a successful conversation with a chatbot, users have to use
concise and coherent phrases. This is due chatbots do not understand the context of the
conversation as humans do. Instead, they process the words contained in the messages
they receive from their interlocutor, to generate a response or to issue a response
prepared in advance. In this way, the chatbot can follow a conversation in a normal way,
but this does not imply that it comes to understand or process the total exchange of
information that occurs.
A chatbot must have a purpose, that is, the information it provides must be
framed within a certain context. The context of the chatbot developed for this project is
to offer information related to UNED, due to the great dispersion of information
available on the Internet about the courses taught at this university.
On the website https://infouned.es, which has been created specifically for this
project, it can be found, in addition to other links of interest, an integrated chat interface
that allows a direct interaction with the chatbot.
For this project, a chatbot has been created by developing an application in the
Java programming language. In order to deploy this application, a GNU/Linux server has
been installed and configured on a Raspberry Pi 4 computer board. This server is
connected to the Internet uninterruptedly, so that it can meet the requests of users
who, through different channels, will ask to start a conversation with the Java
application using Artificial Intelligence techniques.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Abstract 10
Keywords:
Chatbot, Virtual assistant, Artificial intelligence, Machine Learning, Natural language
processing, Facebook, Messenger, Telegram.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Ínidice 11
Índice
1. Introducción ........................................................................................................ 13
1.1. Definición de objetivos............................................................................. 15
1.2. Estructura de la Memoria. ....................................................................... 16
2. Chatbots en la actualidad ..................................................................................... 17
2.1 Tipos de chatbots. ..................................................................................... 17
2.1.1 Chatbots según su medio de interacción. ......................................... 17
2.1.2 Chatbots según el tipo de inteligencia artificial. ............................... 18
2.1.3 Chatbots según su función................................................................. 19
2.2 Clasificación del chatbot InfoUNED. ......................................................... 20
3. Desarrollo del sistema.......................................................................................... 23
3.1 Metodología de desarrollo, fases del trabajo y fechas de realización. .... 24
3.2 Instalación del hardware ........................................................................... 27
3.3 Configuración del servidor. ....................................................................... 28
3.3.1 Sistema operativo instalado. ............................................................. 28
3.3.2 Instalación del software necesario para el funcionamiento de la
aplicación Java del chatbot. .................................................................................... 29
3.3.3 Creación de la base de datos. ............................................................ 31
3.4 Desarrollo de la aplicación Java del chatbot. ............................................ 33
3.4.1 Modelado de clases, responsabilidades y colaboraciones. ............... 33
3.5 Enlace con las plataformas ........................................................................ 41
3.5.1 Enlace de la aplicación con la plataforma Telegram ......................... 41
3.5.2 Enlace de la aplicación con la plataforma Facebook Messenger ...... 44
3.5.3 Enlace de la aplicación con el sitio web. ............................................ 50
4. Estrategias de Inteligencia Artificial ..................................................................... 53
4.1 Aprendizaje automático. ........................................................................... 53
4.1.1 Funcionamiento del clasificador. ....................................................... 53
Alberto Martínez Montenegro ETS de Ingeniería Informática
Índice 12
4.1.2 Construcción del clasificador en Weka. ............................................. 56
4.2 Procesamiento del lenguaje natural ......................................................... 66
5. Casos prácticos .................................................................................................... 73
5.1 Información genérica. ............................................................................... 73
5.2 Estadísticas de titulaciones y asignaturas. ................................................ 76
5.3 Guías de las titulaciones y asignaturas ..................................................... 80
6. Conclusiones, mejoras y trabajos futuros ............................................................. 83
6.1 Principales contribuciones. ....................................................................... 83
6.2 Conclusiones personales. .......................................................................... 84
6.3 Mejoras. .................................................................................................... 85
6.4 Trabajos futuros. ....................................................................................... 85
Bibliografía .............................................................................................................. 87
Referencias ......................................................................................................... 87
Enlaces web ........................................................................................................ 87
Lista de figuras y tablas ............................................................................................ 91
Figuras ................................................................................................................. 91
Tablas .................................................................................................................. 92
Lista de siglas, abreviaturas y acrónimos .................................................................. 93
Anexo A - Estructura de las tablas de la base de datos ............................................. 95
Anexo B - Documentación de las clases .................................................................. 101
Paquete es.infouned.principal .......................................................................... 101
Paquete es.infouned.aprendizajeAutomatico .................................................. 101
Paquete es.infouned.baseDeDatos .................................................................. 102
Paquete es.infouned.conversacion .................................................................. 102
Paquete es.infouned.enlaces ............................................................................ 102
Paquete es.infouned.estructurasDeDatos........................................................ 103
Paquete es.infouned.estudios .......................................................................... 103
Paquete es.infouned.procesamientoLenguajeNatural..................................... 104
Paquete es.infouned.solicitudesInformacionBBDD.......................................... 104
Paquete es.infouned.utilidades ........................................................................ 105
Paquete es.infouned.test.................................................................................. 106
Alberto Martínez Montenegro ETS de Ingeniería Informática
1. Introducción 13
Capítulo 1
- Introducción -
Debido a la creciente popularidad de los chatbots, ha surgido la creencia
generalizada de que son tecnología emergente, aparecida en los últimos años como
resultado de los avances en inteligencia artificial. Sin embargo, el origen de los chatbots
se remonta al año 1966, cuando se creó en el MIT (Instituto de Tecnología de
Massachusetts) el primer chatbot, al que se le llamó “Elizza”.
En las siguientes décadas se crearon chatbots que tuvieron bastante repercusión:
▪ En 1972, la Universidad de Stanford creó el chatbot “Parry”, una versión
mejorada de “Elizza”.
▪ En 1981, el programador británico Rollo Carpenter creó el chatbot
“Jabberwacky”, el primer chatbot que usaba bases de datos estáticas.
▪ En 1992, la empresa Creative Labs lanzó el chatbot “Dr.Sbaitso”, una aplicación
para el sistema operativo MS-DOS. Este chatbot intentaba imitar las respuestas que
podría dar un psicólogo.
▪ En 1995, el programador estadounidense Richard Wallace lanzó la primera
versión funcional del popular chatbot “Alice”. Fue reescrito al lenguaje de
programación Java en 1998 y pasó a ser software de código abierto.
“Success in creating AI would be the biggest
event in human history. Unfortunately, it might
also be the last, unless we learn how to avoid
the risks.”
Stephen Hawking, físico teórico, astrofísico y
cosmólogo.
Alberto Martínez Montenegro ETS de Ingeniería Informática
1. Introducción
14
A pesar de que los chatbots que se han citado eran programas muy avanzados
para su época, la popularidad de los chatbots se disparó cuando en 2011 la empresa
Apple anunció que incluiría un asistente virtual llamado “Siri” en su famosa gama de
teléfonos móviles. La principal función de este asistente era la de ejercer de chatbot
conversacional, podía realizar las operaciones solicitadas por el usuario manteniendo
una conversación personal con él, además la conversación fluía mediante voz en lugar
de texto. La calidad de “Siri” acompañada de la campaña de marketing que Apple le
dedicó, hicieron que, a día de hoy, sea el chatbot más conocido, incluso por personas
que no están relacionadas con el mundo de la tecnología.
Las compañías más importantes del sector tecnológico no tardaron en lanzar sus
propios chatbots con funciones de asistente virtual:
• La empresa Microsoft lanzó el chatbot asistente virtual “Cortana” en 2014, y al
año siguiente lo incluyó en su nuevo sistema operativo Windows 10.
• La empresa de comercio electrónico Amazon lanzó Alexa en 2014, un chatbot
asistente virtual cuya principal novedad es su compatibilidad con el altavoz
inteligente Amazon Echo.
• Por último, la empresa Google Inc. lanzó en 2016 Google Assistant, que al igual
que Alexa era compatible con un altavoz inteligente diseñado por su propia
compañía, Google Home.
En la actualidad, gracias a los avances de la inteligencia artificial, los chatbots se
han convertido en herramientas clave para muchas empresas y entidades tecnológicas.
Diferentes ramas de la inteligencia artificial, como el aprendizaje automático o el
procesamiento del lenguaje natural, permiten el desarrollo de chatbots que van mucho
más allá de responder con una serie de respuestas preestablecidas. Por este motivo, se
ha popularizado el uso de este tipo de aplicaciones para todo tipo de empresas, de forma
que cualquier tipo de negocio (tiendas online, restaurantes, hoteles, etc.) puede
contratar a una empresa de software para el desarrollo de un chatbot que realice las
operaciones necesarias o facilite la información deseada.
Debido a la creciente demanda de chatbots por parte de todo tipo de empresas,
el desarrollo de chatbots personalizados para el negocio se ha convertido en un sector
muy importante dentro del desarrollo de aplicaciones. El objetivo de este proyecto es
adquirir y poner en práctica los conocimientos necesarios para el desarrollo de este tipo
de aplicaciones, que sin duda serán cruciales en los próximos años en el mundo del
desarrollo de software.
Al igual que muchos de los chatbots citados en los párrafos anteriores, el chatbot
creado es un asistente virtual. Dado que está diseñado para ofrecer información sobre
los estudios impartidos en la UNED, se le ha asignado el nombre “InfoUNED”.
Alberto Martínez Montenegro ETS de Ingeniería Informática
1. Introducción
15
1.1. Definición de objetivos.
Para la creación del chatbot, se ha optado por diseñar un sistema completo dentro de
un hardware propio, esto ha permitido tener un control total sobre todos los elementos
para poder configurarlos de forma óptima. Los objetivos principales que se fijaron para
la creación de dicho sistema son los siguientes:
• Instalar y configurar un servidor GNU/Linux en una placa computadora
Raspberry Pi 4 [1], que permita el despliegue de aplicaciones Java que puedan
estar continuamente en ejecución e interactuando con Internet. Se ha elegido
este hardware por varias razones: bajo coste, bajo consumo eléctrico, y
rendimiento. En [2] puede consultarse una comparativa del coste, consumo y
rendimiento entre el primer modelo de Raspberry Pi y otros dispositivos capaces
de ejecutar sistemas operativos complejos.
• Desarrollar una aplicación Java que ejerza de chatbot. Esta aplicación debe
atender las peticiones que se hacen al servidor cuando un usuario intenta
conversar con el chatbot, y debe emitir la respuesta correspondiente. La
aplicación debe reunir los siguientes requisitos:
o Debe permitir que los usuarios envíen peticiones al servidor a través de
estos tres canales:
▪ La aplicación de mensajería Facebook Messenger [3].
▪ La aplicación de mensajería Telegram [4].
▪ Un sitio web convencional.
o Debe contar una capa de abstracción que le permita procesar los
mensajes entrantes de la misma forma sea cual sea el canal que usa el
usuario para enviarlos, evitando así tener que crear subprogramas o
aplicaciones adicionales para interactuar con las diferentes plataformas
que usan los usuarios.
• Crear un sitio web que contenga una interfaz de chat integrada que permita
conversar directamente con el chatbot. Para este objetivo será necesario instalar
Apache [5] en el servidor. Apache es un servidor HTTP que permitirá la ejecución
de código PHP además de otras funcionalidades.
• Crear de una base de datos en la que el chatbot pueda consultar toda la
información que le sea necesaria. El sistema gestor de bases de datos usado será
MariaDB [6]. Se ha elegido este sistema gestor de bases de datos por estar
basado en el popular lenguaje MySQL y además contar con licencia GPL [7].
• Crear un clasificador mediante técnicas de aprendizaje automático que
catalogue los mensajes que envíen los usuarios. Para el desarrollo del clasificador
Alberto Martínez Montenegro ETS de Ingeniería Informática
1. Introducción
16
se ha utilizado el software Weka [8] debido a su amplia aplicación en programas
Java y a la documentación disponible.
1.2. Estructura de la Memoria.
La memoria de este PFG se estructura de la forma expuesta en los siguientes
puntos:
• En el capítulo 2 se realiza un análisis de la situación actual en lo referente al
desarrollo de chatbots. Se citan los tipos de chatbot más frecuentes en la
actualidad y los chatbots más populares de cada tipo. También se resume
brevemente las funcionalidades principales de cada uno de ellos.
• En el capítulo 3 se describe el desarrollo de la aplicación. Se comienza
describiendo la metodología de desarrollo utilizada en el apartado 3.1, en él se
aportan varias tablas con las fechas más relevantes en la realización del proyecto.
A continuación, en los apartados 3.2 y 3.3 se explican las acciones realizadas para
llevar a cabo la creación y configuración del servidor dónde está alojada la
aplicación. Por último, en los apartados 3.4 y 3.5 se describe el desarrollo de la
aplicación creada y la forma en la que se han creado los enlaces con las diferentes
plataformas.
• En el capítulo 4 se describen las estrategias de inteligencia artificial empleadas
en el desarrollo al desarrollar la aplicación. El capítulo está centrado en las dos
ramas de la inteligencia artificial que se han tocado al realizar el proyecto, el
aprendizaje automático y el procesamiento del lenguaje natural.
• En el capítulo 5 se describen una serie de casos prácticos en los que se exponen
las diferentes respuestas que es capaz de ofrecer el chatbot ante diferentes
consultas de los usuarios.
• En el capítulo 6 se extraen las principales conclusiones, también se citan las
posibles mejoras aplicables al proyecto y los trabajos futuros para los que se
podría tomar como base la aplicación creada.
• Por último, se incluyen los anexos A y B. En el anexo A, se muestra la estructura
de todas las tablas que componen la base de datos, mientras que en el anexo B
se explican las funciones de todas las clases y los métodos que implementan.
Alberto Martínez Montenegro ETS de Ingeniería Informática
2. Chatbots en la actualidad 17
Capítulo 2
- Chatbots en la actualidad -
En este capítulo se realizará un análisis sobre el estado actual en lo referente al
desarrollo de chatbots. Para esto, se citarán los tipos de chatbots existentes en la
actualidad y se resumirán las características principales de cada tipo. También se hará
un análisis sobre cómo estaría clasificado el chatbot creado según los dichos tipos.
2.1 Tipos de chatbots.
Debido a la gran variedad de chatbots existentes, y las diferentes estrategias de
programación utilizadas para su desarrollo, no existe una clasificación estándar
reconocida por la comunidad tecnológica. En [9] puede consultarse un artículo de una
empresa a la vanguardia del desarrollo de chatbots. En él se hace referencia a la
inexistencia de una “guía de tipos de chatbot” y se hace una clasificación utilizando
criterios similares a los de este capítulo. La clasificación realizada está centrada en
clasificar los chatbots desde los tres puntos de vista que resultan más lógicos e intuitivos:
según su medio de interacción, según el tipo de inteligencia artificial empleada y según
su función.
2.1.1 Chatbots según su medio de interacción.
Catalogar a los chatbots según el método que utiliza el usuario para comunicarse con
ellos produce la clasificación más sencilla, podríamos catalogarlos en tres grupos:
• Chatbots basados en texto plano: Tal y como se explica en el capítulo 4 de [KD18],
los mensajes en texto plano son el elemento más común en la comunicación de
los chatbots. El grupo de chatbots basados en texto plano se distingue por poder
interaccionar con el usuario utilizando únicamente este tipo de mensajes. No se
dispone de imágenes, sonidos ni la posibilidad de respuestas seleccionables.
Debido la facilidad de incluir elementos audiovisuales en las plataformas de
mensajería actuales, este tipo de chatbots es cada vez es menos frecuente. En
[10] puede conversarse con el chatbot “Anna”, un chatbot orientado a la
Alberto Martínez Montenegro ETS de Ingeniería Informática
2. Chatbots en la actualidad
18
investigación cuyo objetivo es mantener una conversación emulando a un
interlocutor humano. Dado que el chatbot no tiene fines comerciales y el interés
sólo radica en las frases de la conversación, es adecuado que se base en texto
plano.
• Chatbots que combinan el texto con botones y/o elementos audiovisuales:
Aunque el texto sigue siendo el elemento base de la comunicación de este tipo
de chatbots, se sirven de herramientas como botones de respuesta o emoticonos
para dar fluidez a la conversación. Algunos también pueden procesar, en mayor
o menor profundidad, audio e imágenes. En [11] se puede consultar un artículo
que trata el tema de los chatbots en el contexto de las redes sociales y el apoyo
a los estudiantes. En este contexto es importante que sea fácil y rápido
interactuar con el chatbot, por lo que se hace adecuado el uso de botones y
elementos audiovisuales.
• Chatbots basados en mensajes de voz: Estos chatbots basan sus conversaciones
en mensajes de voz. La ventaja de esto es que la interacción por voz es mucho
más cómoda para el usuario, ya que no tiene que teclear e incluso puede
conversar mientras realiza otras actividades. Por otro lado, la audición artificial
es propensa a fallos si el emisor no vocaliza bien o si hay ruido de fondo en el
ambiente, por lo que el riesgo de recibir un mensaje erróneo suele ser mayor
que utilizando la interacción por texto. En [12] se analiza el funcionamiento de
un chatbot basado en voz. En él se mide la eficiencia y el rendimiento del chatbot,
así como la precisión y consistencia de sus respuestas.
2.1.2 Chatbots según el tipo de inteligencia artificial.
Las estrategias de inteligencia artificial que se utilizan en el desarrollo de un
chatbot influyen de forma directa en sus capacidades y en el tipo que de conversación
que se tendrá con él. Si catalogamos a los chatbots según las estrategias de inteligencia
artificial que implemente, podemos distinguir entre estos tres grupos:
• Chatbots cognitivos: Estos chatbots son capaces de adaptarse a la conversación
de tal forma que parecen interpretar la intención del usuario, llegando incluso a
ofrecer una conversación muy similar a la que ofrecería un agente humano que
atendiese las consultas del usuario. Están basados en el aprendizaje automático
y en el procesamiento del lenguaje natural. Este tipo de chatbots deben tener
cierta capacidad de aprendizaje, lo normal es que se consiga mediante técnicas
de aprendizaje automático. Para llevar a cabo dicho aprendizaje automático, se
parte de un fichero de entrenamiento con datos fiables de los que se pueda
extraer información relevante para el chatbot. Usando técnicas como árboles de
decisión, máquinas de vectores de soporte o redes bayesianas se construye y se
entrena el modelo de aprendizaje automático, que no es más que un archivo que
Alberto Martínez Montenegro ETS de Ingeniería Informática
2. Chatbots en la actualidad
19
el chatbot usará para tomar las decisiones correspondientes. Una técnica muy
utilizada en los últimos años es el Deep Learning (o aprendizaje profundo), una
rama del aprendizaje automático que usa redes neuronales para el
procesamiento de información. El chatbot irá aprendiendo a base de los errores
que cometa según vaya interactuando con los usuarios. En [13] se propone la
implementación de un chatbot con tecnologías cognitivas para mejorar los
servicios de soporte académico dentro de las universidades, capaz de percibir,
razonar y actuar basándose en sus percepciones. Esta propuesta define un
chatbot diseñado para simular una conversación con una persona, entender lo
que escribe y ser capaz de responder de forma acertada.
• Chatbots de ITR (Respuesta de Interacción de Texto): Estos chatbots también son
conocidos como “dumb chatbots” o “chatbots tontos”. No requieren de técnicas
de inteligencia artificial si no que siguen una lógica secuencial, haciendo uso de
botones o enlaces predefinidos. Tienen la ventaja de ser más fáciles de
programar y tener siempre controlado el rumbo de la interacción. Su
inconveniente consiste en que el usuario tiene unas posibilidades limitadas a la
hora de comunicarse con ellos, pudiendo únicamente seleccionar las opciones
disponibles. En [14] se encuentra el enlace web a un ejemplo de chatbot ITR de
la empresa Buoy Health, Inc. Mediante una conversación guiada, este chatbot
permite la identificación de enfermedades a partir de síntomas sin necesidad de
que el usuario tenga que redactar frases.
• Chatbots de “Word-spotting”: Se basan en el reconocimiento de palabras clave
para ofrecer una determinada respuesta preconfigurada en función de ellas. Su
inconveniente es que se centran en dichas palabras claves ignorando el contexto,
la intención del usuario y otras palabras de interés que pudiese haber en el
mensaje. En el artículo académico enlazado en [15] se detalla el desarrollo de un
chatbot “Word-spotting” para la gestión de desastres relacionados con el agua.
El chatbot utiliza un algoritmo de búsqueda difusa para analizar el texto que
ingresa el usuario y una tabla de palabras clave para hacer coincidir las palabras
ingresadas con la información almacenada en la base de datos.
2.1.3 Chatbots según su función
Dado que los chatbots pretenden simular la conversación que tendríamos con
un agente humano, podrían introducirse en prácticamente cualquier sector de la
industria, desarrollando funciones de todo tipo. A continuación, se enumeran algunas
de las principales funciones para las que son utilizados los chatbots en la actualidad, y
que nos permiten catalogarlos.
• Chatbots informativos: Son chatbots que tienen acceso a una gran cantidad de
información sobre un determinado tema, y son capaces de responder a las
Alberto Martínez Montenegro ETS de Ingeniería Informática
2. Chatbots en la actualidad
20
preguntas o solicitudes del usuario haciendo uso de ella. En la referencia [16] se
puede consultar una publicación que explica el desarrollo de un chatbot de este
tipo, que ofrece información sobre el calendario académico escolar a los
estudiantes.
• Comercio online: Estos chatbots pueden guiar al usuario en un proceso de
compra o transacción electrónica. Pueden incluso llegar incluso a ofrecer la
posibilidad de realizar pedidos o transacciones directamente en la conversación
sin que el usuario tenga que realizar ese trámite por el método clásico. En el
artículo [17] se analiza un chatbot orientado al comercio electrónico. El chatbot
del artículo tiene como objetivo vender productos físicos, digitales y también
servicios. Opera a través de la plataforma de mensajería Telegram y sistema de
gestión de contenidos WordPress.
• Captación de clientes: Este tipo de chatbots, ofertan a los clientes el producto de
la empresa a la que pertenecen, pudiendo incluso ocuparse de parte o de la
totalidad de los trámites administrativos derivados de una venta exitosa. Como
ejemplo de este tipo de chatbots, se enlaza en [18] una versión de demostración
de un chatbot de captación de posibles clientes para invertir en el mercado de
valores, de la empresa Tars Technologies Inc.
• Servicio de atención al cliente. Se encargan de mantener una conversación con
el cliente en relación a la posventa de un determinado artículo o servicio. Suelen
ser capaces de identificar el número de pedido o transacción que el cliente les
facilite para poder ofrecer ayuda de una forma más precisa. El artículo [19]
describe el desarrollo de un chatbot entrenado mediante Deep Learning que
ofrece un servicio de posventa a los usuarios a través de redes sociales.
• Soporte técnico: Estos chatbots cuentan con la información técnica necesaria de
un determinado producto o proceso. Usan esa información para ayudar al
usuario con algún problema que ha tenido al usar el producto o servicio o para
resolver dudas que le puedan surgir. En [20] se enlaza un proyecto publicado en
la plataforma GitHub bajo licencia Apache 2.0 [21]. El proyecto consiste en un
chatbot que puede ser entrenado para ofrecer distintos tipos de soporte, como
averías en productos electrónicos o incidencias técnicas en aplicaciones para
dispositivos inteligentes.
2.2 Clasificación del chatbot InfoUNED.
A continuación, se clasificará la aplicación creada según los diferentes tipos que
se han detallado en los apartados anteriores.
Según el medio de interacción, el chatbot creado se encuadraría dentro de los
chatbots que combinan el texto con botones. La aplicación creada hace uso de los
Alberto Martínez Montenegro ETS de Ingeniería Informática
2. Chatbots en la actualidad
21
botones en ciertas situaciones, por ejemplo, si se requiere una respuesta del usuario de
la cual son conocidas las posibles opciones que hay. El objetivo de esto es que el usuario
no tenga que escribir la respuesta en texto y pueda hacerlo con una simple selección. En
la figura 2.1 puede observarse la implementación de los botones en la interfaz móvil de
la plataforma Telegram.
Figura 2.1 Uso de los botones en la plataforma Telegram
Además del uso de botones, el chatbot creado también utiliza elementos que no son
texto plano, por ejemplo, hipervínculos que enlazan con páginas web o ficheros pdf.
El chatbot creado usa un modelo de aprendizaje automático para catalogar los mensajes
de entrada que recibe del usuario. Este modelo se entrena mediante ficheros de texto
que contienen posibles mensajes de entrada que podría emitir el usuario y la
clasificación correcta que tendrían. Dado que el chatbot está capacitado para
“aprender”, y la calidad de la conversación que ofrece será mayor cuanto más se entrene
el modelo de aprendizaje automático, podemos encuadrarlo en la categoría de chatbots
cognitivos.
En cuanto a la clasificación según su función, el chatbot creado estaría claramente
encuadrado en la categoría de chatbots informativos, ya que su función es simplemente
responder con información o enlaces a las preguntas del usuario, sin guiarlo por ningún
proceso.
Alberto Martínez Montenegro ETS de Ingeniería Informática
2. Chatbots en la actualidad
22
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
23
Capítulo 3
- Desarrollo del sistema -
Este capítulo está centrado en las actividades que se han realizado durante el
desarrollo del sistema. En la figura 3.1 se muestra un esquema que pretende ofrecer
una visión general del sistema creado.
Figura 3.1 Esquema del sistema creado
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
24
El objetivo de este capítulo es definir las acciones llevadas a cabo para la creación
del sistema de la figura 3.1.
En el apartado 3.1 se describe la metodología de desarrollo utilizada y se aportan
varias tablas con las fechas más relevantes en la realización del proyecto. Los apartados
3.2 y 3.3 se centran en la creación y configuración del servidor dónde está alojada la
aplicación. Por último, en los apartados 3.4 y 3.5 se describe el desarrollo de la aplicación
creada y la forma en la que se han creado los enlaces con las diferentes plataformas.
3.1 Metodología de desarrollo, fases del trabajo y
fechas de realización.
A la hora de diseñar las aplicaciones más comunes en el marco de desarrollo de
software (gestión de negocios e instituciones, aplicaciones web, etc.) se hace sencillo
distinguir, en mayor o menor medida, los objetivos que deben cumplir, cómo será la
interacción con el usuario final y qué clases principales deben ser creadas. Sin embargo,
en el desarrollo de un chatbot estos elementos no son tan evidentes como en el
desarrollo de otras aplicaciones.
Debido a las causas descritas en el párrafo anterior, la metodología empleada en
el desarrollo de este proyecto es la Metodología de Prototipo. Al utilizar esta
metodología, se crea un prototipo de chatbot operativo rápidamente. A partir de ahí, en
base a la evaluación y la comunicación con la directora del proyecto, se van añadiendo
las funcionalidades necesarias y corrigiendo los errores.
En la figura 3.2 pueden observarse las diferentes etapas que componen esta
metodología:
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
25
Figura 3.2 Etapas del Modelo de Prototipos
La metodología se basa en la creación rápida de prototipos funcionales (aunque
incompletos), centrándose en aquellos aspectos del software que serán visibles para el
cliente o el usuario final. A partir de ahí, se irán identificando las diferentes necesidades
de la aplicación, que será la base para la creación del siguiente prototipo.
Teniendo en cuenta las características del proyecto, y la metodología de
desarrollo escogida para el mismo, se ha dividido el desarrollo en las siguientes fases:
• Fase de investigación preliminar: En esta fase se recopila información para
conocer la situación actual en lo referente al desarrollo de chatbots y estimar el
alcance del proyecto.
• Fase de diseño y desarrollo de la aplicación: Esta es la fase en la que se
desarrollan y se van evaluando los prototipos. En esta fase también se debe ir
redactando la información de los avances que se vayan haciendo. Esta fase
consta de la creación de tres prototipos:
o Prototipo de chatbot 1: Creación de un chatbot operativo, al que se le
pueden enviar mensajes y que debe responder a los mismos con una
respuesta preestablecida que no varía, aunque se reciban mensajes
diferentes. Debe estar operativo para todos los canales de acceso que se
ha decidido implementar.
o Prototipo de chatbot 2: Este prototipo consiste en un chatbot que
responde a los mensajes en función de la consulta contenida en ellos.
Faltarán funcionalidades por implementar y puede que proporcione
respuestas que no son correctas.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
26
o Prototipo de chatbot 3: Es el prototipo final, un chatbot al que se le han
añadido todas las funcionalidades y que proporciona las respuestas
correctas a las solicitudes de información del usuario.
• Fase de preparación de documentación: Fase en la que se reúne toda la
documentación redactada para componer la memoria final del proyecto.
En las tablas 3.1, 3.2, 3.3, 3.4 y 3.5 pueden observarse las diferentes actividades
realizadas en cada una de las fases, así como las fechas en las que se realizaron. Las
tablas recogen los avances desde septiembre de 2019, que fue cuando comenzó la
investigación sobre el proyecto.
FASE INICIAL
Actividades Fecha de
inicio Fecha de fin
Recabar toda la información necesaria sobre el desarrollo de chatbots. 02/09/2019 22/09/2019
Analizar las API que ofrecen diferentes compañías como WhatsApp, Facebook o Telegram para facilitar la integración de chatbots con sus servicios. Para descartarlas o confirmarlas para su integración.
23/09/2019 29/09/2019
Contactar con la Oficina del Tratamiento de la Información de la UNED para solicitar ficheros que contengan información sobre los estudios impartidos.
30/09/2019 01/10/2019
En base a todo lo anterior, decidir el alcance del proyecto, y las funcionalidades mínimas que ofrecerá.
02/10/2019 06/03/2020
Tabla 3.1 Actividades de la fase inicial del desarrollo
FASE DE DESARROLLO DEL PROTOTIPO 1
Actividades Fecha de inicio Fecha de fin
Análisis, diseño, implementación y validación. 07/10/2019 14/12/2019
Pruebas de integración. 15/12/2019 21/12/2019
Pruebas de validación. 22/12/2019 25/12/2019
Entrega del prototipo a la directora. 26/12/2019 26/12/2019
Tabla 3.2 Actividades de la fase de desarrollo del prototipo 1
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
27
FASE DE DESARROLLO DEL PROTOTIPO 2
Actividades Fecha de inicio Fecha de fin
Análisis, diseño, implementación y validación. 27/12/2019 26/03/2020
Pruebas de integración. 27/03/2020 04/04/2020
Pruebas de validación. 05/04/2020 07/04/2020
Entrega del prototipo a la directora. 08/04/2020 08/04/2020
Tabla 3.3 Actividades de la fase de desarrollo del prototipo 2
FASE DE DESARROLLO DEL PROTOTIPO 3
Actividades Fecha de inicio Fecha de fin
Análisis, diseño, implementación y validación. 09/04/2020 18/05/2020
Pruebas de integración. 19/05/2020 21/05/2020
Pruebas de validación. 22/05/2020 24/05/2020
Entrega del prototipo a la directora. 25/05/2020 25/05/2020
Tabla 3.4 Actividades de la fase de desarrollo del prototipo 3
FASE DE PREPARACIÓN DE DOCUMENTACIÓN
Actividades Fecha de
inicio Fecha de
fin
Composición de la memoria a partir de la documentación redactada. 26/05/2020 31/05/2020
Tabla 3.5 Actividades de la fase de preparación de documentación
3.2 Instalación del hardware
Tal y como se comentó en la sección de objetivos, el hardware utilizado consiste
en una placa computadora Raspberry Pi 4 [1]. En la tabla 3.6 se indican las
especificaciones técnicas de la misma.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
28
Raspberry Pi 4 modelo B
Procesador Broadcom BCM2711B0, quad-core Cortex-A72
Frecuencia de reloj 1,5 GHz
GPU VideoCore VI 500 MHz
Memoria principal 4GB LPDDR4-3200
Conectividad inalámbrica Wi-Fi 2,4GHz / 5GHz IEEE 802.11.b/g/n/ac
Bluetooth 5.0, BLE
Conectividad de red Gigabit Ethernet
Tabla 3.6 Especificaciones técnicas Raspberry Pi 4 modelo B
El hardware estará en todo momento conectado mediante cable ethernet a un
router doméstico. Dados los objetivos establecidos para este proyecto, que se han
citado en los apartados anteriores, este hardware se ha considerado suficiente para la
creación del servidor GNU/Linux sobre el que se hace el despliegue de software. Otras
opciones como utilizar un equipo más potente o alquilar un servidor cloud fueron
descartadas por ofrecer un rendimiento innecesario para este proyecto.
3.3 Configuración del servidor.
En los siguientes puntos se detalla el software instalado en el servidor que
permitirá que la aplicación java creada para el chatbot pueda ejecutarse de forma
correcta en el sistema.
3.3.1 Sistema operativo instalado.
El sistema operativo escogido para instalar en la Raspberry Pi 4 ha sido Raspbian
[22], concretamente la versión “Lite”, que no cuenta con interfaz gráfica, ya que está
pensada para usar la Raspberry Pi como servidor. Raspbian es una distribución del
sistema operativo GNU/Linux basado en Debian, es el sistema operativo más popular
para Raspberry Pi 4 y por lo tanto el que mayor soporte tiene por parte de la comunidad
de usuarios de esta placa computadora.
Al no contar con interfaz gráfica, todas las operaciones realizadas para la
configuración del servidor se han realizado por línea de comandos utilizando la
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
29
aplicación PuTTY [23]. En el momento de escribir este documento, la versión del sistema
operativo es Raspbian 10 (Buster), tal y como se puede observar en la figura 3.3.
Figura 3.3 Identificación de la versión del S.O. mediante línea de comandos.
3.3.2 Instalación del software necesario para el funcionamiento de
la aplicación Java del chatbot.
La aplicación Java creada para el chatbot se ha desarrollado en un equipo de
escritorio con el IDE Eclipse [24]. Para cada prototipo generado, se ha exportado el
proyecto entero con todas sus dependencias a un archivo .jar y se ha transferido a la
Raspberry Pi para su ejecución. Para que la aplicación pueda ejecutarse correctamente,
han tenido que realizarse las siguientes de operaciones previas en el servidor:
• Crear un directorio para la instalación del .jar y los archivos necesarios que la
aplicación necesite leer o escribir, se deberán asignar los permisos necesarios en
cada directorio para evitar conflictos de lectura/escritura. Para este tipo de
operaciones que requieren navegar por los directorios del servidor, se ha usado
el programa WinSCP [25]. En la figura 3.4, se muestra una captura del fichero .jar
localizado en su directorio de ejecución junto con los demás archivos necesarios
para la correcta ejecución de la aplicación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
30
Figura 3.4 Directorio de instalación de la aplicación Java del chatbot
• Hacer que la aplicación Java del chatbot se ejecute al inicio del sistema: Es
importante que la aplicación se ejecute siempre al inicio del sistema, para evitar
que la aplicación deje de funcionar si se produce un reinicio inesperado, o hay
un corte de alimentación eléctrica. Para lograr esto se ha añadido una línea al
fichero /etc/rc.local del servidor Linux, que hace que se ejecute el comando
necesario para iniciar la aplicación cuando finaliza el arranque del servidor.
• Instalar el JRE (Java Runtime Enviroment): El JRE es el conjunto de aplicaciones y
librerías necesarias para poder usar una aplicación Java. Dado que la aplicación
creada se importará en un archivo .jar desde el equipo de desarrollo, es
necesario que el servidor pueda ejecutar aplicaciones Java desde este tipo de
archivos.
• Instalar MariaDB: Tal y como se comentó en la sección de objetivos, MariaDB [6],
es el sistema gestor de bases de datos escogido para la aplicación, por estar
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
31
basado en el lenguaje MySQL [26] y contar con licencia GPL [7]. Es necesario
instalarlo y configurarlo en el servidor Linux para poder crear una base de datos.
• Instalar Apache: Apache [5] es un servidor HTTP que permite la ejecución de
código PHP además de otras funcionalidades. Además de permitir que el sitio
web https://infouned.es funcione correctamente, es necesario para la ejecución
de código PHP.
• Instalar phpMyAdmin: phpMyAdmin [27] es una herramienta escrita en PHP que
permite administrar sistemas gestores de bases de datos basados en MySQL a
través de páginas web. La creación de la base de datos y sus distintas tablas se
ha realizado mediante la interfaz de esta aplicación.
3.3.3 Creación de la base de datos.
Para la creación de la base de datos, se han utilizado registros de los últimos años
con estadísticas sobre los diferentes estudios de la UNED. Para obtenerlos, se contactó
con la Oficina del Tratamiento de la Información [28] haciendo una petición a través de
su página web. La petición fue atendida rápidamente facilitando varias hojas de cálculo
que contenían grandes cantidades de información.
El primer paso para la creación de la base de datos ha sido crear la propia base
de datos y sus diferentes tablas desde phpMyAdmin. Desde esta aplicación pueden
definirse cómodamente los campos que tendrá cada tabla, las relaciones entre los
mismos y la configuración de las claves primarias. Toda esta información puede
consultarse en cualquier momento desde https://infouned.es/phpmyadmin, con el
usuario de solo lectura “equipo” cuya contraseña es “docente”.
En la figura 3.5 puede observarse la interfaz de la aplicación web phpMyAdmin,
a la izquierda puede verse que el nombre que se le ha dado a la base de datos y los
nombres de las diferentes tablas que la componen. A la derecha figuran los datos
técnicos y los números de versión del servidor de base de datos y del servidor web.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
32
Figura 3.5 Interfaz principal de la aplicación web phpMyAdmin
A continuación, se enumeran las diferentes tablas de la base de datos y su
funcionalidad. En el Anexo A de esta memoria se analiza en profundidad cada tabla,
indicando los tipos, claves, descripciones y otros datos de interés sobre cada campo de
las mismas.
• La tabla INFORMACION_GENERICA contiene cadenas largas de texto enlazadas a
un identificador. Estas cadenas son usadas por el chatbot en algunas situaciones
en las que decide que puede dar una respuesta estándar preestablecida.
• Las tablas MATRICULADOS_ASIGNATURAS y MATRICULADOS_TITULACIONES
contienen registros anuales del número de alumnos matriculados en cada
estudio.
• La tabla PRECIOS_TITULACIONES contiene los precios por crédito ECTS de cada
una de las titulaciones.
• Tanto la tabla RENDIMIENTO_ACADEMICO_ASIGNATURAS como la tabla
RENDIMIENTO_ACADEMICO_TITULACIONES contienen registros anuales sobre
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
33
estadísticas como la nota media o la tasa de aprobados, de una asignatura o
titulación en un determinado año.
• Las tablas TOTAL_ASIGNATURAS y TOTAL _TITULACIONES contienen los
identificadores y nombres de todas las asignaturas y titulaciones.
3.4 Desarrollo de la aplicación Java del chatbot.
En esta sección se describirán los aspectos más relevantes sobre el desarrollo de
la aplicación Java que se ejecuta en el servidor y es la encargada de gestionar la actividad
del chatbot.
3.4.1 Modelado de clases, responsabilidades y colaboraciones.
Es importante señalar que, dada la naturaleza de la aplicación, únicamente
existirá un caso de uso, conversar. Aunque existen tres actores diferentes, su rol sólo se
diferencia en la plataforma de acceso que utilizan para conversar con el chatbot. En la
figura 3.6 puede observarse el diagrama de casos de uso de la aplicación.
Figura 3.6 Casos de uso de la aplicación
Esto ha provocado que haya sido especialmente difícil construir un modelo de
clases, no sólo por la existencia de un único caso de uso, sino porque las entidades que
forman el conjunto de clases que componen el código fuente de la aplicación, no están
claras desde un principio.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
34
En primer lugar, se muestra a continuación el modelo de dominio de la aplicación
en la figura 3.7. Se han omitido los campos y métodos de las clases, ya que son muy
numerosos y dificultarían la lectura del modelo. Si el lector desease consultar dichos
campos y métodos puede hacerlo en el Anexo B de esta memoria.
Figura 3.7 Modelo de dominio de la aplicación
El modelo de dominio de la figura 3.7 fue tomado como punto de partida en el
desarrollo de la aplicación. Su función es intentar definir clases que serán necesarias en
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
35
el sistema y las relaciones entre las mismas. Todas las clases que aparecen en el modelo
de dominio de la figura 3.7 fueron finalmente creadas a la hora de programar la
aplicación y las relaciones finales también se corresponden con las de la figura. Aunque
el código final de la aplicación está compuesto por muchas más clases y relaciones, su
estructura principal la forman las que aparecen en el modelo, por lo que serán
consideradas como las más importantes.
En el Anexo B de esta memoria se hace un análisis descriptivo de las más de 50
clases de la aplicación, sin embargo, los siguientes párrafos estarán centrados sólo en
las clases más importantes. En los siguientes párrafos se explicará a grandes rasgos el
funcionamiento de la aplicación, usando tarjetas CRC de dichas clases.
La clase principal de la aplicación del chatbot es la clase Main, su función es
inicializar todos los componentes que hacen que el chatbot funcione. Cuando se inicia
la aplicación, se ejecuta el método principal de la clase, que creará la clase Configuracion
e iniciará los enlaces con todas las plataformas de acceso. En la tabla 3.7 se muestra su
tarjeta CRC.
Main
Responsabilidades Colaboradores
Crear Configuracion Configuracion
Iniciar el enlace con la plataforma Facebook EnlaceFacebook
Iniciar el enlace con la plataforma Telegram EnlaceTelegram
Iniciar el enlace con la plataforma web. EnlaceWeb
Tabla 3.7 Tarjeta CRC de la clase Main
Los enlaces con la plataforma iniciados se encargarán de establecer
comunicación con las diferentes plataformas, usando la clase Conversacion para obtener
las respuestas que deben facilitar. Estos enlaces podrán obtener una conversación
existente o bien crear una nueva instancia de Conversacion. En la tabla 3.8 se muestra
la tarjeta CRC de las clases de enlace.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
36
EnlaceFacebook, EnlaceTelegram y EnlaceWeb
Responsabilidades Colaboradores
Obtener conversación previa Conversacion
Crear nueva conversación
Recibir mensajes desde la plataforma (Facebook, Telegram o web)
Incorporar mensajes a la conversación
Obtener respuesta de la conversación
Enviar respuesta a la plataforma (Facebook, Telegram o web)
Tabla 3.8 Tarjetas CRC de la clases de enlace.
La clase Configuracion, que es creada por el método principal de la clase Main,
se encarga de crear, contener y facilitar todas las herramientas necesarias para que
funcione el chatbot. Estas herramientas no son más que instancias de las demás clases
principales del sistema. En la tabla 3.9 se muestra su tarjeta CRC.
Configuracion
Responsabilidades Colaboradores
Crear, contener y facilitar una colección de conversaciones Conversacion
Crear, contener y facilitar una conexión a la base datos ConexionBaseDeDatos
Crear, contener y facilitar un clasificador Clasificador
Crear, contener y facilitar un procesador del lenguaje natural ProcesadorLenguajeNatural
Tabla 3.9 Tarjeta CRC de la clase Configuracion
Las clases ConexionBaseDeDatos, Clasificador y ProcesadorLenguajeNatural son
las clases instanciadas por la clase Configuracion. El objetivo es que Configuracion
proporcione instancias de estas clases cuando sean requeridas por otros componentes
de la aplicación para llevar a cabo su cometido.
La clase ConexionBaseDeDatos facilita un enlace con la base datos y permite
ejecutar consultas SQL. En la tabla 3.10 se muestra su tarjeta CRC.
ConexionBaseDeDatos
Responsabilidades Colaboradores
Proporcionar un enlace con la base de datos. SolicitudInformacion
Permitir la ejecución de consultas SQL.
Tabla 3.10 Tarjeta CRC de la clase ConexionBaseDeDatos
La clase Clasificador se encarga de clasificar frases en texto plano, usando un
modelo de aprendizaje automático pre-entrenado. Dispone de un método llamado
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
37
clasificarInstancia() que recibe como parámetro de entrada una cadena de texto y
devuelve el nombre del grupo en el que se ha catalogado a esa cadena. En el capítulo 4
se hace un análisis en profundidad sobre esta estrategia de clasificación. En la tabla 3.11
se muestra la tarjeta CRC de la clase Clasificador.
Clasificador
Responsabilidades Colaboradores
Clasificar cadenas de texto usando un modelo de aprendizaje automático pre-entrenado.
Frase
Tabla 3.11 Tarjeta CRC de la clase Clasificador
La clase ProdesadorLenguajeNatural se encarga de utilizar la librería Java
CoreNLP [29] de la Universidad de Stanford. Esta librería permite extraer diversa
información de las cadenas de texto utilizando técnicas de procesamiento de lenguaje
natural, como detección de frases, etiquetado gramatical o reconocimiento de
entidades nombradas. En la tabla 3.12 se muestra su tarjeta CRC.
ProcesadorLenguajeNatural
Responsabilidades Colaboradores
Detectar y separar frases. Frase
Reconocer entidades nombradas.
Realizar el etiquetado gramatical
Tabla 3.12 Tarjeta CRC de la clase ProcesadorLenguajeNatural
La clase Conversacion se encarga de proporcionar una respuesta en forma de
cadena de texto cuando se le solicita. Para obtener dicha respuesta, utiliza los mensajes
almacenados, los estudios aludidos y otras clases relacionadas. Es importante el dato de
que cada conversación tiene un identificador único, que le permite al usuario en todo
momento recuperar el flujo de la conversación. Este identificador ha de ser facilitado
por la clase de enlace correspondiente. En la tabla 3.13 se muestra la tarjeta CRC de la
clase Conversacion.
Conversacion
Responsabilidades Colaboradores
Crear, contener y facilitar una colección de mensajes Mensaje
Crear, contener y controlar el CallBack Estudio
Ofrecer una respuesta acorde al estado actual de la conversación. CallBack
DecisionUnitaria
Tabla 3.13 Tarjeta CRC de la clase Conversacion
La clase Mensaje simboliza un mensaje entrante que un determinado usuario
envía al chatbot. Se encarga de aplicar las operaciones necesarias para transformar el
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
38
texto entrante procedente del usuario en una colección de clases Frase. En la tabla 3.14
se muestra su tarjeta CRC.
Mensaje
Responsabilidades Colaboradores
Transformar mensajes del usuario en instancias de la clase Frase Frase
Crear, contener y facilitar una colección de frases.
Tabla 3.14 Tarjeta CRC de la clase Mensaje
La clase Frase simboliza una frase individual perteneciente a un mensaje. Alberga
varios elementos además del texto de la frase, como las entidades que se aluden en ella,
las etiquetas gramaticales, su clasificación, etc. En la tabla 3.15 se muestra su tarjeta
CRC.
Frase
Responsabilidades Colaboradores
Contener y facilitar elementos relativos a una frase de un mensaje, tales como su texto, o su clasificación.
Tabla 3.15 Tarjeta CRC de la clase Frase
La clase Estudio, simboliza una un determinado estudio ofrecido por la UNED.
Los estudios son aludidos en algunos mensajes de una conversación, de esta forma la
clase SolicitudInformacion, que será descrita en los próximos párrafos, puede utilizarlos
para componer respuestas o consultas SQL. En la tabla 3.16 se muestra la tarjeta CRC de
la clase Estudio.
Estudio
Responsabilidades Colaboradores
Contener y facilitar diversos datos relativos al estudio que simboliza, como su nombre o su identificador en la base de datos.
SolicitudInformacion
Tabla 3.16 Tarjeta CRC de la clase Estudio
Es importante añadir que la clase Estudio es una clase abstracta que no puede
ser instanciada, sus subclases Titulacion, Asignatura y AsignaturaBorrosa serán las que
manejen las instancias de tipo Estudio. En la figura 3.8 puede observarse el esquema de
herencia de dichas clases.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
39
Figura 3.8 Subclases de la clase abstracta Estudio
Las clases Asignatura y Titulacion simbolizan los estudios a cuyo nombre hace
referencia. La clase AsignaturaBorrosa se usa en los casos en los que el sistema ha
detectado un nombre de asignatura ambiguo, por ejemplo “Estadística” o “Mecánica”,
que podrían referirse a varias asignaturas de distintas titulaciones. El sistema puede
transformar una instancia de esta clase a una instancia de la clase Asignatura si
mediante las respuestas del usuario consigue averiguar a qué titulación pertenece.
Cuando se necesita una información muy concreta por parte del usuario, o la
información que ha facilitado es ambigua, se usa la clase CallBack. La clase CallBack
permite dejar una conversación a la espera de una respuesta concreta del usuario,
cuando el usuario emite dicha respuesta, la clase CallBack lo detectará y realizará las
operaciones que sean necesarias para generar una respuesta. En la tabla 3.17 se
muestra su tarjeta CRC.
CallBack
Responsabilidades Colaboradores
Permitir dejar una conversación a la espera de una respuesta concreta. SolicitudInformacion
Detectar la respuesta esperada y realizar las acciones correspondientes.
Tabla 3.17 Tarjeta CRC de la clase CallBack
Tal y como se ha comentado, la clase Conversacion tiene todos los elementos
necesarios (mensajes, frases, estudios aludidos, etc.) para generar una respuesta. Para
tomar la decisión de qué tipo de respuesta generar, se usa la clase DecisionUnitaria. Esta
clase, usará todos los datos acumulados en Conversacion para decidir qué tipo de
respuesta ofrecer. En la tabla 3.18 se muestra su tarjeta CRC.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
40
DecisionUnitaria
Responsabilidades Colaboradores
Tomar los datos de la conversación actual para decidir el tipo de respuesta a ofrecer.
SolicitudInformacion
Tabla 3.18 Tarjeta CRC de la clase DecisionUnitaria
La clase SolicitudInformacion es la que se encarga de generar las cadenas de
texto finales que componen las respuestas del chatbot. Usa la conexión a la base de
datos para obtener de ella la información que sea precisa para generar la respuesta. En
la tabla 3.19 se muestra su tarjeta CRC.
SolicitudInformacion
Responsabilidades Colaboradores
Generar las cadenas de texto finales que componen las respuestas del chatbot. ConexionBaseDeDatos
Tabla 3.19 Tarjeta CRC de la clase SolicitudInformacion
Es importante añadir que la clase SolicitudInformacion es una clase abstracta que
no puede ser instanciada. Las subclases que manejan las instancias de tipo
SolicitudInformacion pueden observarse en la figura 3.9.
Figura 3.9 Subclases de la clase abstracta SolicitudInformacion
Todas estas subclases deben implementar el método abstracto
generarCadenaRespuesta(), cada una tiene una implementación diferente para el
mismo. Esto permite personalizar las operaciones realizadas y las cadenas de texto de
respuesta dependiendo del tipo de información que se solicite.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
41
3.5 Enlace con las plataformas
La aplicación Java creada está preparada para interactuar con tantas plataformas
como sean implementadas. Lo único que debe hacerse, es crear una clase de enlace que
haga uso del resto de clases del sistema, tal y como se ha explicado en el apartado
anterior para las clases EnlaceTelegram, EnlaceFacebook y EnlaceWeb.
La dificultad de esto reside en que cada una de estas clases de enlace deberá
usar sus propias estrategias de comunicación para poder llegar a interactuar con la
plataforma objetivo. En los siguientes puntos se describen las acciones que han sido
necesarias para enlazar la aplicación creada con cada una de las tres plataformas con las
que interactúa el chatbot.
3.5.1 Enlace de la aplicación con la plataforma Telegram
La plataforma Telegram pone a disposición de los programadores una API [30]
que permite una fácil comunicación con los chatbots creados en su plataforma. Esta API
es una interfaz basada en HTTP, por lo que hay que crear las funciones necesarias en el
lenguaje de programación que se esté utilizando para que se comunique con la
plataforma Telegram a través de este protocolo. Por suerte, en la propia página web de
la API, se enlazan librerías para los diferentes lenguajes de programación con el objetivo
de crear una capa de abstracción para la comunicación.
El primer paso para crear un chatbot en la plataforma Telegram es registrar un
bot en la plataforma. Dicho bot consiste en una cuenta especial que no requiere un
número de teléfono adicional para ser configurada, al contrario de lo que requeriría una
cuenta estándar de Telegram. Esta cuenta especial sirve como una interfaz para el
código que se ejecuta en la aplicación Java creada. Para crearla, es necesario entablar
una conversación con un bot de la propia plataforma Telegram, llamado BotFather [31],
al cual se le debe solicitar la creación de nuestro bot mediante una serie de comandos.
En la figura 3.10, se muestra la conversación completa que se debe tener para
que BotFather cree la cuenta especial de bot.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
42
Figura 3.10 Conversación necesaria para la creación de una cuenta bot en Telegram
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
43
Tal y como puede observarse en la figura, BotFather nos facilita un token que se
utilizara como herramienta de autentificación. Este token ha de ser utilizado por la
aplicación que controla la cuenta bot creada, con él demostrará que está autorizada a
gestionar el bot. La función de esto es que ninguna aplicación pueda tener acceso a los
mensajes ni al control del chatbot a no ser que conozca dicho token. Por seguridad, el
token que se muestra en la figura ha sido cambiado.
Una vez se dispone del token de autentificación, se debe crear un enlace entre
el lenguaje de programación que usa (en este caso Java), y la interfaz HTTP de la API de
Telegram. Esto podría crearse desde cero a partir de la documentación que ofrece la
API, pero en la propia página enlazan una librería para Java con muy buena reputación,
la librería Telegram Bot Java Library [32] que cuenta con licencia MIT [33], por lo que se
ha decidido utilizarla.
Con la librería integrada en nuestro sistema, sólo tenemos que crear una
subclase para la clase abstracta TelegramLongPollingBot e implementar sus métodos
abstractos. Hay dos métodos abstractos que se encargan de la autentificación del bot
mediante su nombre de usuario y el token obtenido de BotFather y otro que se encarga
de controlar el flujo de mensajes. Esta subclase no es otra que la clase EnlaceTelegram
que se describió en apartados anteriores. En la figura 3.11 puede observarse lo sencillo
que resulta implementar dichos métodos.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
44
Figura 3.11 Implementación de los métodos abstractos de TelegramLongPollingBot
La librería también permite obtener fácilmente un identificador único para cada
conversación, ya que invocando al método correspondiente se puede obtener el
identificador de la conversación de Telegram de una forma totalmente segura. Este
identificador de Telegram es único para cada conversación en la plataforma, con lo cual,
es perfectamente válido para usarlo como identificador de conversación en la aplicación
Java del chatbot.
Una vez realizadas estas operaciones, el proyecto estará directamente integrado
con Telegram mediante la clase de enlace.
3.5.2 Enlace de la aplicación con la plataforma Facebook
Messenger
El procedimiento a seguir para realizar un enlace con la plataforma Facebook
Messenger es similar a lo hecho con Telegram: es necesario registrar una “cuenta
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
45
especial” en su plataforma para obtener un token de autentificación y después usar ese
token en el código fuente de la aplicación Java creada. Sin embargo, conseguir esos
objetivos no es tan sencillo como ocurría con la plataforma Telegram.
El primer paso para construir el enlace deseado es crear una página de Facebook,
ya que cualquier bot que utilice Messenger ha de estar enlazado a una de estas páginas.
Lo siguiente es crear una aplicación de Facebook. La plataforma Facebook for
Developers [34] ofrece una serie de herramientas para desarrolladores que permiten la
creación de aplicaciones que interactúen con sus plataformas (Facebook, Messenger,
Instagram, etc.). Una vez creada la aplicación en Facebook for Developers, podemos
comenzar la configuración a través de su interfaz web. Esta interfaz se muestra en la
figura 3.12.
Figura 3.12 Interfaz web de Facebook for Developers
Para realizar la configuración de Messenger para la aplicación es necesario realizar dos
acciones:
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
46
• Enlazar la página de Facebook y la aplicación creadas: Al realizar este enlace se
habilita la posibilidad de generar un token de autentificación para la mensajería
de la página.
• Crear un Webhook: Los Webhooks son herramientas que permiten recibir
notificaciones HTTP en tiempo real sobre los cambios que se produzcan en
determinados objetos de la plataforma Facebook. Debe crearse un Webhook
que pueda redirigir los mensajes que entren a través de Messenger a un
determinado recurso web.
En la figura 3.13, puede verse la configuración hecha sobre la aplicación InfoUNED.
Figura 3.13 Configuración de la aplicación Facebook InfoUNED
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
47
En el caso de Telegram, bastaba con enlazar los tokens obtenidos al crear la
aplicación a la librería que se ejecuta en el código fuente de la aplicación Java. La
plataforma Facebook es algo más exigente, obliga a que el usuario tenga operativo un
servidor HTTP que esté preparado para interactuar con Messenger. En la figura 3.13
puede observarse que el recurso web introducido en la URL de devolución de llamada
es https://tunnel.infouned.es. Facebook impone como requisito que se use el protocolo
HTTPS.
Tal y como se indicó en la introducción de esta memoria, se ha creado el sitio
web https://infouned.es para poder interactuar con el chatbot vía web. Se ha
aprovechado dicho sitio web para crear el subdominio https://tunnel.infouned.es y
alojar en ahí el servidor HTTP que Facebook requiere.
Facebook no enlaza de forma oficial librerías para los diferentes lenguajes de
programación que proporcionen una capa de abstracción para la comunicación con sus
plataformas. Aún así, tras la correspondiente investigación, se decidió utilizar la librería
Racter, del sitio web dedicado al desarrollo de aplicaciones Clivern [35], que cuenta con
licencia Apache 2.0 [21].
Esta librería utiliza el servidor HTTP Jetty Server de Java [36] para crear un
servidor en http://localhost que se encargue de manejar la comunicación con el bot de
Facebook Messenger que se haya referenciado en el código fuente. El problema
principal que ha presentado esta configuración consiste en que el servidor HTTP local
que crea la librería, funciona a través del protocolo HTTP mientras que Facebook obliga
a que el flujo de información hacia el Webhook sea mediante HTTTPS. Para solucionar
este problema, se ha configurado un host virtual en Apache que actúa de túnel inverso
permitiendo la conversión de información entre ambos protocolos. En la figura 3.14 se
muestra la configuración del host virtual de Apache que permite realizar este proceso.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
48
Figura 3.14 Configuración del host virtual de Apache
El esquema del flujo de la información final para la comunicación con la
plataforma Facebook es de la figura 3.15.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
49
Figura 3.15 Esquema del flujo de la información con la plataforma Facebook
El último paso es crear una clase de enlace para interactuar con la librería Racter.
En esta ocasión, no es necesario implementar ningún método abstracto, simplemente
se debe crear un objeto de clase BotPlatform aportando en su constructor el token de
autentificación y el identificador de la aplicación. Una vez creado, ya es posible invocar
las funciones de la librería que son necesarias para la comunicación.
La clase BotPlatform permite invocar un método que devuelve el identificador
de la conversación de Messenger de forma segura. Este identificador de Messenger es
único para cada conversación en la plataforma, con lo cual, es perfectamente válido para
usarlo como identificador de conversación en la aplicación Java del chatbot.
Tras realizar las configuraciones comentadas, se tendrá operativo el enlace de la
plataforma Facebook Messenger con la aplicación Java creada.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
50
3.5.3 Enlace de la aplicación con el sitio web.
Tal y como se ha comentado en los apartados anteriores, para el proyecto se ha
creado el sitio web https://infouned.es, cuya función principal es ofrecer una interfaz
que permita conversar con el chatbot desde el propio sitio.
El diseño de esta interfaz de conversación es muy sencillo, la comunicación con
la aplicación Java se produce de la siguiente forma:
1. Cuando el usuario abre la página web, se comprueba si ya existen coockies con
su identificador de sesión, si no existen, se genera una cadena alfanumérica
aleatoria y se crean con ella las coockies de sesión. El identificador de sesión tiene
la finalidad de actuar como identificador único de conversación en la aplicación
Java.
2. Cuando se pulsa el botón de envío de mensaje, se invoca a la función Javascript
enviarMensaje(). Se pasan como parámetros el texto del mensaje y el
identificador único del usuario.
3. La función enviarMensaje() se comunica con un sencillo script PHP, que a su vez
se comunica con la aplicación Java creada mediante el uso de sockets. En la figura
3.16 se puede observar que el script PHP es bastante simple.
Figura 3.16 Script PHP para la comunicación entre la web y la aplicación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
51
4. Mediante el uso de la técnica AJAX, la función enviarMensaje() puede actualizar
el historial de chat con la respuesta del chatbot sin necesidad de recargar la
página.
La clase EnlaceWeb implementada en la aplicación Java, está escuchando de
forma ininterrumpida en el puerto 4568 a la espera de peticiones de comunicación a
través de socket. En la figura 3.17 se muestra su implementación.
Figura 3.17 Implementación de la clase EnlaceWeb
Como puede observarse, cada vez que la aplicación detecta un mensaje entrante
a través del socket, la ejecución continúa en un nuevo hilo de ejecución. Esto se ha
realizado de esta forma para evitar la concurrencia, de forma que cuando llega un
mensaje, se delega su gestión en un nuevo hilo de ejecución y el proceso original puede
continuar atendiendo otros mensajes de inmediato. En los demás enlaces no fue
necesario realizar esta operación porque ya estaba implementada en las propias
librerías.
Alberto Martínez Montenegro ETS de Ingeniería Informática
3. Desarrollo del sistema
52
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
53
Capítulo 4
-Estrategias de Inteligencia Artificial-
En este capítulo se explican las estrategias de inteligencia artificial utilizadas al
desarrollar la aplicación. El capítulo está centrado en las dos ramas de la inteligencia
artificial que se han tocado al realizar el proyecto, el aprendizaje automático y el
procesamiento del lenguaje natural.
En el caso del aprendizaje automático, se ha realizado un clasificador mediante
el entrenamiento de un modelo. Este clasificador se usa para catalogar las frases que se
reciben del usuario y poder generar una respuesta apropiada.
En el caso del procesamiento de lenguaje natural, se hace uso de la librería
CoreNLP [29] de la Universidad de Stanford. Es importante aclarar que la librería se
utiliza para unos objetivos muy concretos, que son la detección de entidades
nombradas, la detección y separación de frases y el etiquetado gramatical. Por lo tanto,
en este proyecto sólo se usa la componente léxica del procesamiento del lenguaje
natural, quedando excluidas la sintáctica, la semántica y la pragmática.
4.1 Aprendizaje automático.
Tal y como se ha indicado en la introducción de este capítulo, los modelos
creados mediante aprendizaje automático tienen un único objetivo: construir un
clasificador que pueda catalogar los mensajes del usuario en ciertos grupos.
4.1.1 Funcionamiento del clasificador.
En este apartado se explicará el funcionamiento del clasificador a la hora de
catalogar los mensajes. En la tabla 4.1 se muestran los distintos grupos en los que se
puede catalogar un mensaje.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
54
Grupo Descripción Ejemplos
Saludo Mensaje de un usuario hace notar su presencia mediante un saludo o expresión.
"Hola", "Buenas tardes".
Despedida Mensaje de un usuario en el que manifiesta su intención de finalizar la conversación.
"Adiós", "Hasta otra".
Solicitud de información de contacto
Mensaje en el que el usuario solicita información sobre cómo contactar con la UNED.
"¿Cómo me pongo en contacto con vosotros?", "¿Cuál es vuestra dirección de correo electrónico?"
Solicitud de información de matrícula
Mensaje en el que el usuario solicita información sobre el proceso de matriculación.
"¿Cuál es el link de la matrícula online?", "¿Cómo me matriculo?"
Solicitud de estadísticas de rendimiento
Mensaje en el que el usuario solicita estadísticas concretas sobre alguna titulación o asignatura.
"¿Cuál es el porcentaje de sobresalientes en Psicología?", ¿Cuál es la asignatura más difícil de primer curso del Grado en Criminología?
Solicitud de número de matriculados
Mensaje en el que el usuario solicita el número de matriculados de una titulación o asignatura.
"¿Cuánta gente se matricula de Psicología?", "¿Hay mucha gente matriculada este año en la asignatura Programación Orientada a Objetos?".
Solicitud de precios Mensaje en el que el usuario solicita los precios de una titulación.
"¿Qué precio tiene el máster en ingeniería informática?", "¿Es muy caro estudiar derecho?"
Solicitud de guía de estudio
Mensaje en el que el usuario solicita información general de una titulación o asignatura, o la guía de estudio de la misma.
"¿De qué trata la carrera de Historia del Arte?", "Quiero la guía de la asignatura Psicología del pensamiento".
Solicitud información del CUID
Mensaje en el que el usuario solicita información sobre el CUID.
"¿Qué idiomas se pueden estudiar en la UNED?", "¿Cuánto cuesta estudiar en el CUID?"
Tabla 4.1 Grupos de clasificación para los mensajes entrantes.
A los mensajes que no puedan ser catalogados en ninguno de estos grupos, se
les responderá con un texto preestablecido que indica cómo deben expresarse las
consultas de forma correcta.
Existen varios tipos de algoritmos en los que basar un clasificador para la
catalogación de texto. En los últimos años, los algoritmos basados en Naive Bayes[37],
máquinas de soporte vectorial [38] y regresión logística [39] se han convertido en los
más utilizados por la comunidad tecnológica para la clasificación de texto. El motivo de
esto es que su implementación es sencilla y ofrecen buenos resultados de clasificación
incluso cuando los datos de entrenamiento non demasiado grandes. En [40] se puede
consultar un artículo con una comparativa en la que figuran entre otros estos tres
algoritmos. Tras examinar este artículo y otros similares, se ha decidido utilizar el
algoritmo Naive Bayes como base del clasificador, ya que es el que mejores estadísticas
de clasificación correcta ofrece para datos de entrenamiento con pocas instancias. El
motivo de que haya pocas instancias de entrenamiento es que, en el caso concreto del
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
55
clasificador del chabot, se clasifican frases cortas, mientras que lo habitual es obtener
las instancias de entrenamiento de artículos completos formados por miles palabras.
Tal y como se ha explicado en el párrafo anterior, el creado es un clasificador
bayesiano ingenuo (Naive Bayes). Para crear un clasificador de estas características, se
ha tomado como base la exposición del capítulo 6.4 de [GIB06], aunque, como se
explicará a continuación, ha sido necesario realizar algunas modificaciones. El concepto
probabilístico del que se parte es el famoso teorema de Bayes, cuya fórmula es la
siguiente:
𝑃(𝐴|𝐵) =𝑃(𝐵|𝐴)𝑃(𝐴)
𝑃(𝐵)
• 𝑃(𝐴) es la probabilidad a priori de que ocurra A (de forma independiente).
• 𝑃(𝐵) es la probabilidad a priori de que ocurra B (de forma independiente).
• 𝑃(𝐴|𝐵) es la probabilidad a posteriori de que ocurra A dado B.
• 𝑃(𝐵|𝐴) es la probabilidad a posteriori de que ocurra B dado A.
Para comprender cómo funciona el clasificador, haremos una pequeña
adaptación de la fórmula a nuestro caso concreto, explicando las variables que
intervienen:
𝑃(𝑥|𝑦1, … , 𝑦𝑛) =𝑃(𝑦1, … , 𝑦𝑛|𝑥)𝑃(𝑥)
𝑃(𝑦1, … , 𝑦𝑛)
Donde:
• 𝑥 es el nombre del grupo al que pertenece el mensaje (Saludo, Despedida, etc.)
• 𝑦1, … , 𝑦𝑛 es un vector de palabras, cada una de sus componentes contiene una
palabra en concreto. Por ejemplo, con el mensaje “Hola a todos” tendríamos 𝑦 =
{′Hola', ′a', ′todos'}.
• Dado que es un clasificador ingenuo, se asume que las componentes del vector
𝑦, son independientes entre ellas.
Imaginemos que el chatbot recibe el mensaje “Hola a todos”. Dado ese suceso,
el clasificador quiere calcular la probabilidad a posteriori de que el grupo al que
pertenece el mensaje sea Saludo. Tendríamos lo siguiente:
𝑃(𝑆𝑎𝑙𝑢𝑑𝑜|{′Hola', ′a', ′todos'}) =𝑃({′Hola', ′a', ′todos'}|𝑆𝑎𝑙𝑢𝑑𝑜)𝑃(𝑆𝑎𝑙𝑢𝑑𝑜)
𝑃({′Hola', ′a', ′todos'})
Para realizar el cálculo, el clasificador, debe obtener los valores de las probabilidades:
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
56
• 𝑃(𝑆𝑎𝑙𝑢𝑑𝑜): Esta probabilidad se obtiene en base al número de grupos que hay
y a las palabras que forman parte de los mismos. Cuantas más palabras formen
parte de las instancias de un grupo, mayor probabilidad a priori tendrá ese grupo.
• 𝑃({′Hola', ′a', ′todos'}): Esta probabilidad se obtiene en base al total de palabras
que forman parte de las instancias del total de grupos y las veces que estas se
repitan.
• 𝑃({′Hola', ′a', ′todos'}|𝑆𝑎𝑙𝑢𝑑𝑜): Esta probabilidad se obtiene en base a las
palabras de las instancias del grupo Saludo. Si las palabras ′Hola', ′a' y ′todos' se
repiten mucho en las instancias de Saludo esta probabilidad será alta.
El clasificador calculará también las probabilidades 𝑃(𝐷𝑒𝑠𝑝𝑒𝑑𝑖𝑑𝑎|{′Hola', ′a', ′todos'}),
𝑃(𝑆𝑜𝑙𝑖𝑐𝑖𝑡𝑢𝑑 𝑑𝑒 𝑖𝑛𝑓𝑜𝑟𝑚𝑎𝑐𝑖ó𝑛 𝑑𝑒 𝑐𝑜𝑛𝑡𝑎𝑐𝑡𝑜|{′Hola', ′a', ′todos'}) y así sucesivamente
hasta haber calculado la probabilidad a posteriori para cada grupo. El mensaje será
clasificado en el grupo que maximice la probabilidad siempre y cuando supere cierto
umbral.
4.1.2 Construcción del clasificador en Weka.
A continuación, se explicarán los pasos a seguir para construir en Weka el
clasificador descrito en el apartado anterior. En primer lugar, se muestra en la figura 4.1
la estructura del fichero de entrenamiento.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
57
Figura 4.1 Fragmento del fichero de entrenamiento
En la figura 4.1 puede observarse un fragmento del fichero de entrenamiento, el
fichero completo está compuesto por muchas más instancias. En él se definen dos
atributos, el primero es la cadena de texto de la instancia de entrenamiento y el segundo
el grupo en el que estaría clasificada.
Para crear el clasificador, se debe abrir el software Weka y cargar el fichero de
entrenamiento desde la interfaz, tal y como se muestra en la figura 4.2.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
58
Figura 4.2 Carga del fichero de entrenamiento en Weka
A continuación, en la pestaña Classify, se debe establecer un clasificador de tipo
FilteredClassifier. Hay dos elementos importantes a la hora de realizar la configuración:
• El tipo de clasificador es NaiveBayes: Tal y como se describió en el apartado de
funcionamiento, el concepto probabilístico detrás del clasificador está basado en
el teorema de Bayes.
• El tipo de filtro es StringToWordVector: Las cadenas de texto de entrenamiento
han de ser transformadas a un formato que pueda ser fácilmente interpretado
por Weka para construir el clasificador. El filtro StringToWordVector transforma
las cadenas de texto a vectores de palabras. Cada componente del vector
corresponde a una posible palabra dentro del vocabulario total del fichero de
entrenamiento, el valor de la componente será el número de repeticiones de la
misma.
En la figura 4.3 puede apreciarse como se establecen los elementos comentados en
los párrafos anteriores.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
59
Figura 4.3 Configuración del clasificador en Weka
Una vez establecido el clasificador y el filtro, ya se puede comenzar el
entrenamiento. En primer lugar, se muestra en la figura 4.4 la evaluación del clasificador
obtenida usando como fichero de evaluación el propio fichero de entrenamiento.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
60
Figura 4.4 Evaluación del clasificador usando el fichero de entrenamiento como evaluación
En la parte superior puede observase un resumen de las instancias
correctamente clasificadas y los porcentajes de error, en la parte media encontramos la
exactitud en la clasificación de cada grupo y en la parte inferior la matriz de confusión.
A continuación, podemos ver esa información organizada en tablas. En la tabla 4.2
pueden verse las estadísticas de clasificación de instancia y en la tabla 4.3 la matriz de
confusión.
Fichero de evaluación independiente
Número de instancias de entranamiento 931
Número de instancias de evaluación 931
Instancias correctamente clasificadas 899 / 96,5628%
Instancias clasificadas incorrectamente 32/ 3,4372%
Error medio absoluto 0,0374
Tabla 4.2 Evaluación del modelo usando el fichero de entrenamiento como evaluación
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
61
Matriz de confusión usando
el fichero de entrenamiento
como evaluación
Clasificadas como
saludo despedida Informa
cion Contacto
Informa cion
Matricula
Solicitud Estadistica Rendimient
o
solicitud Matricu
lados
Solicitud Precios
Titulacion
Solicitud Guia
Solicitud CUID
saludo 107 0 0 0 4 0 0 0 0
despedida 2 57 0 0 1 1 1 0 0
informacion Contacto
0 0 77 0 3 0 0 1 0
informacion Matricula
0 0 1 92 2 0 0 1 0
solicitudEstadistica Rendimiento
0 0 0 2 242 0 0 0 0
solicitud Matriculados
0 0 0 0 5 56 0 0 0
solicitudPrecios Titulacion
0 0 0 0 6 0 90 0 0
solicitudGuia 0 0 0 0 1 0 0 90 1
solicitudCUID 0 0 0 0 0 0 0 0 88
Tabla 4.3 Matriz de confusión usando el fichero de entrenamiento como evaluación
Como puede observarse, el porcentaje de acierto es muy alto, pero esto es
debido a que se está evaluando el modelo con las mismas instancias usadas para el
entrenamiento, con lo cual las estadísticas pueden resultar demasiado optimistas. La
información que aportan estos datos es que el modelo predice bien al menos instancias
similares a las de entrenamiento.
En la figura 4.5 se muestran los mismos resultados utilizando como método de
evaluación la validación cruzada con 10 pliegues. Esto significa que se dividen las
instancias en 10 grupos, en cada uno de ellos se hace una división de las instancias en
dos grupos: uno reducido para la evaluación y uno amplio para el entrenamiento. Se
ejecuta el algoritmo una vez por cada pliegue para generar el modelo. Por último, se
hace una ejecución final para evaluar el modelo generado a partir de los pliegues con
todas las instancias.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
62
Figura 4.5 Evaluación del clasificador usando validación cruzada con 10 pliegues
De nuevo, puede observarse la exactitud en la clasificación de cada grupo y la
matriz de confusión. A continuación, podemos ver esa información organizada en tablas.
En la tabla 4.4 pueden verse las estadísticas de clasificación de instancia y en la tabla 4.5
la matriz de confusión.
Evaluación cruzada con 10 pliegues
Número de instancias de entrenamiento 931
Número de instancias de evaluación 931
Instancias correctamente clasificadas 811 / 87,1106%
Instancias clasificadas incorrectamente 120/ 12,8894%
Error medio absoluto 0,0547
Tabla 4.4 Evaluación del modelo usando validación cruzada con 10 pliegues
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
63
Matriz de confusión usando validación cruzada
con 10 pliegues
Clasificadas como
saludo despedida Informa
cion Contacto
Informa cion
Matricula
Solicitud Estadistica Rendimient
o
solicitud Matricu
lados
Solicitud Precios
Titulacion
Solicitud Guia
Solicitud CUID
saludo 88 0 1 4 15 0 2 1 0
despedida 4 33 0 2 21 0 1 1 0
informacion Contacto
0 0 70 1 7 0 0 2 1
informacion Matricula
0 0 2 87 4 0 0 3 0
solicitudEstadistica Rendimiento
0 0 0 2 241 0 1 0 0
solicitud Matriculados
0 0 0 1 9 51 0 0 0
solicitudPrecios Titulacion
0 0 0 0 17 0 79 0 0
solicitudGuia 0 0 0 0 10 0 0 80 2
solicitudCUID 0 0 0 3 1 1 0 1 82
Tabla 4.5 Matriz de confusión utilizando validación cruzada con 10 pliegues
La reducción en el porcentaje de acierto es significativa, esto es debido a que
existen ciertos grupos de instancias que tienden a ser cruciales, y si no son forman parte
de las instancias de entrenamiento, el modelo no podrá predecir correctamente
instancias similares. Este problema se vería mitigado si se contase con un fichero de
entrenamiento que constase con más instancias, de forma que fuesen cuales fuesen los
grupos generados, las instancias de entrenamiento siempre serían suficientes para
generar un modelo robusto.
Por último, en la figura 4.6 se muestran los resultados utilizando como fichero
de test un archivo independiente que contiene instancias con preguntas habituales que
se le harían al chatbot, pero que no forman parte del fichero de entrenamiento. Dicho
fichero puede ser consultado en [41].
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
64
Figura 4.6 Evaluación del clasificador usando como test un fichero independiente
A continuación, podemos ver esa información organizada en tablas. En la tabla
4.6 pueden verse las estadísticas de clasificación de instancia y en la tabla 4.7 la matriz
de confusión.
Fichero de evaluación independiente
Número de instancias de entrenamiento 931
Número de instancias de evaluación 58
Instancias correctamente clasificadas 58 / 100%
Instancias clasificadas incorrectamente 0/ 0%
Error medio absoluto 0,0226
Tabla 4.6 Evaluación del modelo usando un fichero de evaluación independiente
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
65
Matriz de confusión usando
un fichero de evaluación
independiente
Clasificadas como
saludo despedida Informa
cion Contacto
Informa cion
Matricula
Solicitud Estadistica Rendimient
o
solicitud Matricu
lados
Solicitud Precios
Titulacion
Solicitud Guia
Solicitud CUID
saludo 3 0 0 0 0 0 0 0 0
despedida 0 1 0 0 0 0 0 0 0
informacion Contacto
0 0 7 0 0 0 0 0 0
informacion Matricula
0 0 0 2 0 0 0 0 0
solicitudEstadistica Rendimiento
0 0 0 0 25 0 0 0 0
solicitud Matriculados
0 0 0 0 0 8 0 0 0
solicitudPrecios Titulacion
0 0 0 0 0 0 4 0 0
solicitudGuia 0 0 0 0 0 0 0 4 0
solicitudCUID 0 0 0 0 0 0 0 0 4
Tabla 4.7 Matriz de confusión usando el fichero de evaluación independiente
Dado que las 58 instancias del fichero de evaluación independiente consisten en
consultas habituales que se le harían al chatbot, es normal que la predicción sea del
100%, ya que el modelo está entrenado a partir de instancias similares a dichas
consultas.
Lo único que se debe hacer a continuación, es exportar el modelo como un
archivo “.model” que será cargado por la aplicación Java cuando el sistema se inicie. Con
esto, el clasificador implementado en la clase ClasificadorNaiveBayes estará listo para
funcionar.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
66
4.2 Procesamiento del lenguaje natural
El procesamiento del lenguaje natural (más conocido por sus siglas en inglés NLP)
[42], es una rama de la inteligencia artificial que investiga la forma de comunicar a las
personas con las máquinas mediante el análisis del lenguaje humano. Para ello se
utilizan técnicas en las que se programan algoritmos que procesan y analizan el texto (o
cualquier otra forma de expresar el lenguaje), para intentar obtener una compresión
computacional de lo que contiene. En [49] se puede consultar un artículo académico en
el que se realiza un análisis del significado, los niveles y las componentes del
procesamiento del lenguaje natural. Existen cuatro componentes en el procesamiento
del lenguaje natural:
• Análisis léxico: Consiste en analizar las palabras que componen la oración
examinada. De este análisis se obtienen etiquetas gramaticales y unidades
léxicas compuestas que pueden ser procesadas individualmente según los
objetivos del usuario.
• Análisis sintáctico: Consiste en analizar la estructura de las oraciones, teniendo
en cuenta la gramática del lenguaje empleado.
• Análisis semántico: Consiste en analizar el significado de las oraciones para lograr
interpretar el mensaje que quieren transmitir.
• Análisis pragmático: Consiste en analizar el contexto de las oraciones para poder
interpretar las emociones del lector, e incluso lenguaje figurado como ironías o
metáforas.
El procesamiento del lenguaje natural en este proyecto tiene tres objetivos concretos:
la detección y separación de frases, el etiquetado gramatical, y la detección de entidades
nombradas. Para cumplir estos objetivos únicamente será necesario el uso de la
componente léxica.
Para aplicar un análisis léxico a los mensajes que recibe el chatbot, se hace uso
de la librería Stanford Core NLP de la Universidad de Stanford [29]. En el sitio web de la
librería, hay varios modelos pre-entrenados en diferentes idiomas, dependiendo del
modelo descargado tendremos diferentes funcionalidades disponibles.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
67
Figura 4.7 Funcionalidades disponibles según el idioma del modelo utilizado
Como puede observarse en la figura 4.7, la librería nos permite hacer uso
de las siguientes funcionalidades:
• Tokenización: Consiste en el aislamiento de cada palabra o símbolo ortográfico
(token) de un mensaje, atribuyéndole un índice que indica su posición.
• División de oraciones: Consiste en detectar y aislar cada una de las oraciones
contenidas en un mensaje.
• Etiquetado gramatical (conocido también por su nombre en inglés, part-of-
speech tagging, POS tagging o POST): Consiste en etiquetar cada token con su
categoría gramatical (artículo, preposición, verbo, etc.)
• Reconocimiento de entidades nombradas (NER por sus siglas en inglés): Esta
técnica permite extraer las entidades de interés para la aplicación que están
contenidas en el mensaje, como titulaciones, asignaturas, parámetros
estadísticos, etc. Aunque pueda parecer que es una operación sencilla, no lo es,
ya que el sistema requiere detectar miles de posibles entidades, algunas
parcialmente coincidentes, por lo que es necesario establecer un método de
orden de prioridades.
A continuación, se muestran dos capturas de la ejecución de una de las clases de
la aplicación que son utilizadas para las pruebas unitarias, en ella se comprueba el
correcto funcionamiento de las funcionalidades de procesamiento del lenguaje natural.
Se usará una frase simple de ejemplo para poder apreciar el resultado obtenido de usar
la librería CoreNLP. En primer lugar, en la figura 4.8, se muestra el código ejecutado.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
68
Figura 4.8 Test para comprobar el correcto funcionamiento de CoreNLP
Figura 4.9 Resultado del test de funcionamiento de CoreNLP
Como puede observarse en la figura 4.9, el reconocimiento de entidades
nombradas, además de detectar nombres de personas o lugares, también es usado para
detectar los diferentes estudios que se imparten en la UNED. Además de la detección,
también aporta datos de utilidad como el tipo de estudio (asignatura o titulación) y el
identificador para su localización en la base de datos.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
69
La librería CoreNLP incluye por defecto un fichero de detección de entidades
nombradas (fichero NER) para el idioma español. En [43] puede consultarse el archivo
completo. En este archivo se encuentran 51000 instancias que etiquetan las entidades
a detectar, según lo que representen (lugares, personas, cargos, etc.). En la figura 4.4 se
puede comprobar cómo se hace uso de esto, etiquetando la palabra “Galicia” como
CITY/COUNTRY o la palabra “UNED” como ORGANIZATION. La estructura del archivo
consiste en separar cada instancia en una línea diferente, en cada línea se separan con
una tabulación los cuatro elementos que forman la instancia. Estos elementos son los
siguientes:
• Término a detectar: Es un grupo formado por una o más palabras que hay que
localizar dentro de la cadena de texto analizado. La coincidencia debe ser exacta.
• Etiqueta: En este campo se almacena el texto con el que será etiquetado el
término en caso de ser localizado (ciudad, individuo, profesión, etc.).
• Grupo al que pertenece la etiqueta: Grupo al que pertenece el término
localizado. (lugares, cargos etc.).
• Prioridad: Nivel de prioridad del término. Puede darse el caso de que en alguna
instancia el término a detectar esté contenido dentro del término a detectar de
otra, o incluso de que el término a detectar sea el mismo en ambas. Para
solucionar este inconveniente, el término detectado será el que mayor prioridad
tenga. Por defecto, el nivel de prioridad es igual al número de palabras del
término.
Para que la detección de estudios sea posible, se ha generado un fichero NER a partir de
los estudios que almacena la base de datos del chatbot. El fichero tiene la misma
estructura que el fichero NER de CoreNLP comentado en el párrafo anterior. En [44] se
puede consultar el fichero completo, compuesto por 5090 instancias.
En la tabla 4.8 puede observarse la forma en la que se han generado las líneas
del fichero NER de estudios a través de tres ejemplos. A cada estudio se le asignan varias
nomenclaturas. Estas nomenclaturas son las formas a través de las cuales se podrá hacer
referencia al estudio al conversar con el chatbot. Cada una de estas nomenclaturas
genera una instancia distinta para el fichero NER. Con esto se consigue que a la hora de
conversar con el chatbot se pueda aludir un estudio utilizando diferentes combinaciones
de palabras.
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
70
Estudio Tipo
Nomenclatura (Palabras necesarias
para aludir al estudio en una conversación)
Prioridad Línea generada
en el fichero
MÁSTER UNIVERSITARIO
EN FÍSICA MÉDICA Titulación
master universitario
en fisica medica 8
master universitario en fisica medica INFOUNED_TITULACION_2153 INFOUNED_ENTITY 8
master en fisica medica
8 master en fisica medica INFOUNED_TITULACION_2153 INFOUNED_ENTITY 8
master de fisica medica
8 master de fisica medica INFOUNED_TITULACION_2153 INFOUNED_ENTITY 8
FUNDAMENTOS FÍSICOS DE LA
INFORMÁTICA
Asignatura
fundamentos fisicos
de la informatica 7
fundamentos fisicos de la informatica INFOUNED_ASIGNATURA_1531056 INFOUNED_ENTITY 7
fundamentos fisicos
7 fundamentos fisicos INFOUNED_ASIGNATURA_1531056 INFOUNED_ENTITY 7
fisica 5 fisica INFOUNED_ASIGNATURA_1531056 INFOUNED_ENTITY 5
GRADO EN PSICOLOGÍA
Titulación
grado en psicologia
8 grado en psicologia INFOUNED_TITULACION_6201 INFOUNED_ENTITY 8
psicologia 6 psicologia INFOUNED_TITULACION_6201 INFOUNED_ENTITY 6
Tabla 4.8 Construcción de las instancias del fichero NER de estudios
Otra característica que puede observarse en la tabla 4.8, es la ausencia de
acentos, letras mayúsculas y caracteres especiales en las nomenclaturas y en las líneas
generadas. Esto es debido a que el chatbot realiza diversas operaciones sobre los
mensajes entrantes antes de aplicar el procesamiento del lenguaje natural, entre estas
operaciones se encuentran la conversión a letras minúsculas de todo el texto y la
eliminación de acentos y caracteres especiales.
Las prioridades se asignan de la bajo las siguientes reglas:
• El valor de las prioridades de las instancias de estudio está comprendido entre 5
y 8, para otorgar cierta ventaja a estas instancias sobre las instancias comunes
del fichero NER original
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
71
• Las titulaciones cuya nomenclatura conste de una sola palabra tienen una
prioridad de 6, el resto tienen una prioridad de 8.
• Las asignaturas cuya nomenclatura conste de una sola palabra tienen una
prioridad de 5, el resto tienen una prioridad de 7.
Con estas prioridades se consiguen ciertos objetivos a la hora de detectar términos, por
ejemplo, que el término “Psicología” por sí solo haga referencia a la titulación de Grado
en Psicología y no a ciertas asignaturas que también tengan esa nomenclatura, o que el
término “Psicología del Pensamiento” haga referencia a la asignatura con ese nombre y
no a la titulación de Grado en Psicología.
Una vez generado el fichero NER de estudios, se combina con el fichero NER
original de la librería CoreNLP, no se requiere ninguna operación adicional ya que como
se ha comentado, tienen la misma estructura. En [45] puede consultarse el fichero NER
combinado, que consta de 56090 instancias.
Durante la creación de dicho archivo, también se han tenido que solventar
problemas de ambigüedad, ya que existen asignaturas que, pese a ser diferentes, tienen
el mismo nombre. Para resolver esa ambigüedad se creado la clase AsignaturaBorrosa,
que fue brevemente comentada en el apartado 3.4.1. En la figura 4.10 puede verse un
fragmento del fichero NER combinado del que se habló en el párrafo anterior.
Figura 4.10 Fragmento del fichero NER combinado
Las asignaturas comunes, sólo tienen un identificador en su etiqueta
INFOUNED_ASIGNATURA_XXXXXX, mientras que las que tienen un nombre que puede
hacer referencia a varias asignaturas diferentes, tienen varios identificadores separados
por guiones bajos. Por ejemplo, la asignatura “Mecánica Analítica” situada en la línea
54052 es una asignatura común, mientras que “Mecánica Cuántica” de la línea 54053,
podría hacer referencia a la asignatura con identificador 61044075 o la con identificador
1073016. Cuando el chatbot detecta una asignatura ambigua, le solicita al usuario que
indique la titulación a la que pertenece, para así averiguar cuál es finalmente el
identificador correcto.
Al iniciar la aplicación Java, la librería CoreNLP lee el fichero NER combinado y
almacena en la memoria RAM las estructuras de datos necesarias para efectuar las
búsquedas deseadas. La información relativa a las frases detectadas, entidades aludidas,
Alberto Martínez Montenegro ETS de Ingeniería Informática
4. Estrategias de Inteligencia Artificial
72
y etiquetas gramaticales, es almacenada en instancias de la clase Frase, de forma que
sus clases colaboradoras puedan hacer uso de esa información cuando lo necesiten.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos 73
Capítulo 5
-Casos prácticos-
En este capítulo se analiza la información que puede ofrecer el chatbot a las
diferentes cuestiones que los usuarios de envíen. Aunque las figuras que se muestran
están tomadas desde la plataforma Telegram, las respuestas que da el chatbot serán las
mismas independientemente de la plataforma de comunicación usada, tal y cómo se ha
explicado en los capítulos anteriores.
5.1 Información genérica.
Las respuestas de tipo información genérica, son respuestas preestablecidas que
están guardadas en la base de datos. Como no están referidas a estudios concretos, no
es necesario componer consultas SQL complejas ni generar un texto de respuesta
personalizado, simplemente el chatbot responde con el texto que está guardado en la
base de datos.
Hay varias respuestas de tipo información genérica que el chatbot puede ofrecer:
• Saludo: El saludo del chatbot sirve como presentación e intenta que el usuario
comprenda el tipo de información que es posible facilitar. En la figura 5.1 puede
observarse un ejemplo de este tipo de respuesta.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
74
Figura 5.1 Respuesta a un mensaje de saludo.
• Despedida: Cuando el chatbot detecta que el usuario quiere finalizar la
conversación, responde con un mensaje de despedida. En la figura 5.2 puede
observarse un ejemplo de este tipo de respuesta.
Figura 5.2 Respuesta a un mensaje de despedida
• Información de contacto: Si el usuario pregunta algo relativo a las formas de
contactar con la UNED, se le facilitará el enlace correspondiente tras preguntarle
el tipo de información concreta que quiere. En la figura 5.3 puede observarse un
ejemplo de este tipo de respuesta.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
75
Figura 5.3 Respuesta a un mensaje de información de contacto
• Información sobre cómo realizar la matrícula: Si se detecta que el usuario está
preguntando algo relacionado con el proceso de matrícula, se le facilitará el
enlace de la matriculación online. En la figura 5.4 puede observarse un ejemplo
de este tipo de respuesta.
Figura 5.4 Respuesta a un mensaje de información de matrícula
• Información sobre el Centro Universitario de Idiomas (CUID): Si se detecta que el
usuario está preguntando algo relacionado con el CUID, se le facilitará el enlace
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
76
correspondiente tras preguntarle el tipo de información concreta que quiere. En
la figura 5.5 puede observarse un ejemplo de este tipo de respuesta.
Figura 5.5 Respuesta a un mensaje de información sobre el CUID
5.2 Estadísticas de titulaciones y asignaturas.
Tal y como se explicó en el capítulo 4, el chatbot puede detectar titulaciones,
asignaturas y parámetros estadísticos nombrados en el mensaje. Según la clasificación
del mensaje del usuario y los parámetros estadísticos detectados en él, el chatbot puede
ofrecer diversa información sobre estadísticas.
• Solicitud de precios: El chatbot puede facilitar los precios por crédito ECTS de
una titulación, la cual, obviamente, debe ser aludida en el mensaje. En la figura
5.6 puede observarse un ejemplo de este tipo de respuesta.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
77
Figura 5.6 Respuesta a un mensaje de información sobre precios
• Solicitud de estadísticas de rendimiento: El usuario puede preguntar por ciertas
estadísticas de rendimiento de las titulaciones y asignaturas. La aplicación
buscará en la base de datos los registros de los últimos años sobre dichas
estadísticas. Las estadísticas sobre las que se pueden preguntar son:
o Para las titulaciones: Nota media, valoración estudiantil, tasa de éxito,
duración media, número de nuevos estudiantes, créditos matriculados
por los estudiantes, créditos matriculados, créditos superados, créditos
reconocidos, número de estudiantes egresados, tasa de abandono,
porcentaje de éxito en las diferentes convocatorias (Febrero, Junio,
Septiembre y Diciembre), número de exámenes por estudiante, edad
media global, edad media de hombres, edad media de mujeres,
porcentaje de hombres, porcentaje de mujeres, porcentaje de alumnos
extranjeros y las tasas de suspensos, aprobados, notables, sobresalientes
y matrículas de honor.
o Para las asignaturas: Nota media, valoración estudiantil, tasa de éxito, y
las tasas de suspensos, aprobados, notables, sobresalientes y matrículas
de honor. En las figuras 5.7 y 5.8 pueden observarse dos ejemplos de este
tipo de respuesta, en la primera, la pregunta hace referencia a una
asignatura mientras que en la segunda hace referencia a una titulación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
78
Figura 5.7 Respuesta a un mensaje sobre estadísticas de una asignatura
Figura 5.8 Respuesta a un mensaje sobre estadísticas de una titulación
• Solicitud de estadísticas de rendimiento por ranking: El usuario puede preguntar
cuáles son los estudios que tienen mayores o menores tasas de un determinado
parámetro estadístico. En la figura 5.9 puede observarse un ejemplo de este tipo
de respuesta.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
79
Figura 5.9 Respuesta a un mensaje sobre estadísticas por ranking
• Solicitud de estadísticas de rendimiento por ranking con filtros: Igual que la
anterior solicitud, pero especificando un filtro, por ejemplo, pertenecer a un
determinado curso o cuatrimestre. En la figura 5.10 puede observarse un
ejemplo de este tipo de respuesta.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
80
Figura 5.10 Respuesta a un mensaje sobre estadísticas por ranking con filtros
5.3 Guías de las titulaciones y asignaturas
Este tipo de respuestas facilitan un enlace a la guía de estudio de la titulación o
asignatura que se haya aludido. El enlace conduce directamente a la guía de estudio
generada en formato pdf, no la versión web.
Para generar el enlace no es necesario ni siquiera acceder a la base datos, un
algoritmo lo compondrá a partir del identificador y el nivel de estudios de la titulación o
asignatura aludida. En la figura 5.11 puede observarse un ejemplo de este tipo de
respuesta.
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
81
Figura 5.11 Respuesta a mensaje de petición de guía de estudio
Alberto Martínez Montenegro ETS de Ingeniería Informática
5. Casos prácticos
82
Alberto Martínez Montenegro ETS de Ingeniería Informática
6. Conclusiones 83
Capítulo 6
-Conclusiones, mejoras y trabajos futuros-
En este último capítulo se expondrán las principales contribuciones de este
proyecto y las conclusiones personales. También se comentará las posibles mejoras
aplicables y las posibilidades que ofrece la reutilización del código de la aplicación creada
para desarrollar otros tipos de chatbots en trabajos futuros.
6.1 Principales contribuciones.
Las principales aportaciones de este proyecto al área del desarrollo de chatbots
son las siguientes:
• Creación de un servidor GNU/Linux en una placa computadora Raspberry Pi 4
que permite el despliegue de la aplicación Java que controla el chatbot. Aunque
no es habitual utilizar dicho hardware para este tipo de proyectos, existen varios
trabajos, como por ejemplo [46], que también lo hacen.
• Desarrollo de un chatbot asistente virtual que facilita información relativa a los
estudios impartidos en la UNED. El chatbot creado puede ofrecer información
general sobre la UNED o información concreta sobre estadísticas de las
titulaciones y asignaturas impartidas. En el capítulo 2 se han referenciado
trabajos similares que tratan el tema de los chatbots en la educación, sin
embargo, no se ha encontrado ningún trabajo en el que se desarrolle un chatbot
que facilite una información sobre los estudios impartidos en una institución de
una forma similar a lo que hace el chatbot de este proyecto.
• Diseño de una aplicación capaz de interactuar con múltiples plataformas de
acceso. Tal y como se ha explicado en el capítulo 3, la aplicación Java que
controla el chatbot está diseñada para interactuar con varias plataformas y
pensada para que sea sencillo añadir plataformas nuevas en un futuro. Este
modelo de gestión no es el habitual, los trabajos que se han referenciado en el
Alberto Martínez Montenegro ETS de Ingeniería Informática
6. Conclusiones
84
capítulo 2 sólo ofrecen comunicación con una plataforma, o bien requieren la
creación de aplicaciones adicionales para dar servicio a nuevas plataformas.
• Creación de una base de datos que contiene estadísticas de los últimos años
sobre los estudios impartidos en la UNED. Tal y como se ha comentado en los
párrafos anteriores, no se han encontrado trabajos que traten el desarrollo de
chatbots en los que se construya una base de datos que permita ofrecer
estadísticas sobre estudios.
• Aplicación de modelos de aprendizaje automático y procesamiento de lenguaje
natural. Se emplea el aprendizaje automático para la clasificación de mensajes y
el procesamiento del lenguaje natural para la separación de frases, etiquetados
gramaticales y reconocimiento de entidades normales. La combinación de estas
dos ramas de la inteligencia artificial en el desarrollo de chatbots es algo
frecuente, y se ha podido comprobar en las referencias hechas en el capítulo 2.
6.2 Conclusiones personales.
La realización de este proyecto me ha servido para investigar en profundidad el
mundo de los chatbots. Durante la investigación he descubierto lo importantes que son
los chatbots en la actualidad, y viendo su creciente popularidad en los últimos años y
cómo la comunidad de investigadores se está volcando en proyectos que los involucra,
seguro que en los próximos años esta popularidad continuará al alza.
Para lograr finalizar el desarrollo de este proyecto he tenido que trabajar en
áreas muy diversas, desde la instalación y configuración de un servidor GNU/Linux hasta
el uso del aprendizaje automático. Con todo lo que he aprendido trabajando en esas
diversas áreas, he acabado por darme cuenta de que la elección que tomé al escoger
este tema para el proyecto no pudo ser más acertada.
He podido comprobar que los chatbots son aplicaciones ideales para el uso de
estrategias de inteligencia artificial. Yo nunca había utilizado el aprendizaje automático
directamente en ninguna de las aplicaciones que había programado en el pasado, y
realizando este proyecto he aprendido a implementar un clasificador con Weka. Sin
duda eso es lo que más valoro de este proyecto de cara al futuro: el hecho de construir
un fichero de entrenamiento, entrenar un modelo en Weka y después usarlo en la
aplicación, me parece algo tremendamente útil que sin duda volveré a utilizar en futuros
proyectos, ya sean personales, profesionales o académicos.
Alberto Martínez Montenegro ETS de Ingeniería Informática
6. Conclusiones
85
6.3 Mejoras.
Las principales mejoras que incluiría en el proyecto estarían relacionadas con los
ficheros de entrenamiento del clasificador. Con los ficheros de entrenamiento actuales
el chatbot ofrece unas respuestas correctas en la mayoría de los casos, pero en
ocasiones falla si el usuario redacta su pregunta de una forma poco habitual. Si se
contase con unos ficheros de entrenamiento que tuviesen, por ejemplo, millones de
frases y no contuviesen errores de clasificación, la corrección de las respuestas ofrecidas
por el chatbot se acercaría al 100%, y serían poco frecuentes las situaciones en las que
el usuario no obtendría la respuesta deseada.
En la misma línea, también mejoraría la detección de entidades nombradas del
procesamiento del lenguaje natural. Para mejorarlas habría que aportar nuevos posibles
nombres para las titulaciones, asignaturas y parámetros estadísticos, de forma que
fuesen detectados incluso si el usuario hace referencia a ellos mediante un nombre poco
habitual, o los escribe de forma incorrecta.
También es destacable lo sencillo que sería que el chatbot trabajase en un idioma
diferente. Sólo habría que traducir algunos de los textos alojados en la base de datos,
los ficheros de entrenamiento del modelo de aprendizaje automático y el fichero de
detección de entidades nombradas. Las modificaciones en el código fuente serían
mínimas.
Otra mejora que se hace evidente es la inclusión de más plataformas que
permitan interactuar con el chatbot. Dado que el código fuente de la aplicación está
preparado para una fácil inclusión de nuevas clases de enlace con otras plataformas,
sólo habría que obtener o crear una librería que enlace con la API de la plataforma
objetivo. Seguramente la aplicación de mensajería WhatsApp [47] y la plataforma de
chat Kik [48] serían las siguientes en ser incluidas.
6.4 Trabajos futuros.
La aplicación creada para este proyecto ha sido programada siguiendo la filosofía
de código limpio descrita en el famoso libro [MA09]. Gracias a esto, el código es
altamente reutilizable y modificable, lo que facilita su adaptación a otros proyectos para
desarrollar diferentes tipos de chatbots.
Los cambios requeridos para adaptar el código y transformar la aplicación en un
chatbot con una finalidad diferente, como un asistente de compras para el comercio
electrónico, o un chatbot de captación de clientes, no requerirían grandes cambios en
el código fuente. La mayor parte de los cambios estarían relacionados con la sustitución
Alberto Martínez Montenegro ETS de Ingeniería Informática
6. Conclusiones
86
de la base de datos por una acorde a la finalidad, y el uso de unos ficheros de
entrenamiento diferentes en el modelo de aprendizaje automático.
A continuación, se enumeran algunas de las posibles líneas de trabajo futuro:
• Ofrecer la posibilidad de que el usuario o administrador modifique el
comportamiento del chatbot en tiempo de ejecución, pudiendo alterar
parámetros como forma de expresarse del chatbot, su funcionalidad, o las
emociones que transmite.
• Integrar la interacción con archivos, de forma que el chatbot pueda enviar y
recibir fotografías, vídeos o ficheros de cualquier tipo para procesarlos según
corresponda.
• Usar el aprendizaje automático para entrenar al chatbot con grandes ficheros de
texto como libros o sitios web, y ver qué tipo de acciones se pueden llevar a cabo
con los modelos creados a partir de ellos.
• Crear un chatbot que pueda realizar acciones complejas, como registrarte en una
página web, o realizar la compra de un artículo simplemente interactuando con
el usuario.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Bibliografía 87
Bibliografía
Referencias
[KD18] Rashid Khan, Anik Das. Build Better Chatbots. Ed. Apress. India 2018.
[GIB06] Jesús González Boticario, Pedro Isasi Viñuela, Daniel Borrajo Millán. Aprendizaje
automático. Ed. Sanz y Torres. Madrid 2006.
[BB96] Gilles Brassard, Paul Bratley. Fundamentals of Algorithmics. Ed. Prentice-Hall.
Estados Unidos 1996.
[MA09] Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. Ed.
Prentice-Hall. Estados Unidos 2009.
Enlaces web
[1] Raspberry Pi: https://www.raspberrypi.org/
[2] Energy Efficient Computing: A Comparison of Raspberry PI with Modern Devices:
https://www.researchgate.net/publication/298790432_Energy_Efficient_Computing_
A_Comparison_of_Raspberry_PI_with_Modern_Devices
[3] Facebook Messenger: https://www.messenger.com/
[4] Telegram: https://telegram.com.es/
[5] Apache: https://www.apache.org/
[6] MariaDB: https://mariadb.org/
[7] GLP: https://www.gnu.org/licenses/gpl-3.0.html
[8] Weka: https://www.cs.waikato.ac.nz/ml/weka/
[9] Discovering The Types of Chat Bots: https://blog.ubisend.com/discover-
chatbots/types-of-chat-bots (Último acceso: 17/06/2020)
Alberto Martínez Montenegro ETS de Ingeniería Informática
Bibliografía
88
[10] ANNA, an AIML Chatbot:
https://pandorabots.com/pandora/talk?botid=fd5c287f1e357db6 (Último acceso:
17/06/2020)
[11] Chatbots en redes sociales para el apoyo oportuno de estudiantes universitarios
con síntomas de trastorno por déficit de la atención con hiperactividad:
http://www.scielo.org.ar/scielo.php?script=sci_arttext&pid=S1850-
99592018000200007&lang=es
[12] Towards an efficient voice-based chatbot:
https://ieeexplore.ieee.org/abstract/document/7428450
[13] Asistente virtual académico utilizando tecnologías cognitivas de procesamiento de
lenguaje natural: https://revistas.elpoli.edu.co/index.php/pol/article/view/1701/1414
[14] Buoy Health, Inc. Symptom cheker chatbot:
https://www.buoyhealth.com/symptom-checker/ (Último acceso: 17/06/2020)
[15] Ask Diana: A Keyword-Based Chatbot System for Water-Related Disaster
Management: https://www.mdpi.com/2073-4441/11/2/234/htm
[16] Development of a chatbot for informing students of the schedule:
https://www.researchgate.net/publication/340685740_Development_of_a_chatbot_f
or_informing_students_of_the_schedule
[17] Design and Implementation of a chatbot for e-commerce:
https://www.researchgate.net/publication/324731232_Design_and_Implementation_
of_a_chatbot_for_e-commerce
[18] Popular Chatbot Templates in the Finance & Banking Industry or for Lead
Generation Use-case: https://hellotars.com/chatbot-templates/lead-
generation/r1ic9I/stock-brokers-chatbot (Último acceso: 17/06/2020)
[19] A New Chatbot for Customer Service on Social Media:
https://www.researchgate.net/publication/313204805_A_New_Chatbot_for_Custome
r_Service_on_Social_Media
[20] Ldulcic chatbot: https://github.com/ldulcic/chatbot (Último acceso: 17/06/2020)
[21] Licencia Apache 2.0: https://www.apache.org/licenses/LICENSE-2.0
[22] Raspbian: https://www.raspbian.org/
[23] PuTTY: https://www.putty.org/
[24] Eclipse: https://www.eclipse.org/
Alberto Martínez Montenegro ETS de Ingeniería Informática
Bibliografía
89
[25] WinSCP: https://winscp.net/eng/docs/lang:es
[26] MySQL: https://www.mysql.com/
[27] phpMyAdmin: https://www.phpmyadmin.net/
[28] Oficina del Tratamiento de la Información:
https://app.uned.es/evacal/rendac.aspx
[29] Stanford CoreNLP: https://stanfordnlp.github.io/CoreNLP/
[30] Telegram Bot API: https://core.telegram.org/bots/api
[31] Telegram BotFather: https://telegram.me/BotFather
[32] Telegram Bot Java Library: https://github.com/rubenlagus/TelegramBots
[33] Licencia MIT: https://www.mit.edu/~amini/LICENSE.md
[34] Facebook for developers: https://developers.facebook.com/
[35] Clivern Racter: https://github.com/Clivern/Racter (Último acceso 17/06/2020)
[36] Java Jetty server: https://www.eclipse.org/jetty/
[37] Clasificador bayesiano ingenuo:
https://es.wikipedia.org/wiki/Clasificador_bayesiano_ingenuo
[38] Máquinas de vectores de soporte:
https://es.wikipedia.org/wiki/M%C3%A1quinas_de_vectores_de_soporte
[39] Regresión logística:
https://es.wikipedia.org/wiki/Regresi%C3%B3n_log%C3%ADstica
[40] Multi-Class Text Classification Model Comparison and Selection:
https://towardsdatascience.com/multi-class-text-classification-model-comparison-
and-selection-5eb066197568 (Último acceso 17/06/2020)
[41] Fichero de evaluación independiente: https://infouned.es/fichero-evaluacion-
independiente.txt
[42] Procesamiento natural del lenguaje - Natural language processing:
https://es.qwe.wiki/wiki/Natural_language_processing
[43] Fichero de NER original: https://infouned.es/fichero-ner-original.txt
[44] Fichero de NER estudios: https://infouned.es/fichero-ner-estudios.txt
[45] Fichero de NER combinado: https://infouned.es/fichero-ner-combinado.txt
Alberto Martínez Montenegro ETS de Ingeniería Informática
Bibliografía
90
[46] A Smart Home Automation Via Facebook Chatbot and Raspberry Pi:
https://ieeexplore.ieee.org/abstract/document/8448761
[47] WhatsApp: https://www.whatsapp.com/?lang=es
[48] Kik: https://www.kik.com/
[49] Natural Language Processing: State of The Art, Current Trends and Challenges:
https://www.researchgate.net/publication/319164243_Natural_Language_Processing
_State_of_The_Art_Current_Trends_and_Challenges
Alberto Martínez Montenegro ETS de Ingeniería Informática
Lista de figuras y tablas 91
Lista de figuras y tablas
Figuras
Figura 2.1 Uso de los botones en la plataforma Telegram ........................................... 21
Figura 3.1 Esquema del sistema creado ........................................................................ 23
Figura 3.2 Etapas del Modelo de Prototipos ................................................................. 25
Figura 3.3 Identificación de la versión del S.O. mediante línea de comandos. ............ 29
Figura 3.4 Directorio de instalación de la aplicación Java del chatbot ......................... 30
Figura 3.5 Interfaz principal de la aplicación web phpMyAdmin .................................. 32
Figura 3.6 Casos de uso de la aplicación ....................................................................... 33
Figura 3.7 Modelo de dominio de la aplicación ............................................................ 34
Figura 3.8 Subclases de la clase abstracta Estudio ........................................................ 39
Figura 3.9 Subclases de la clase abstracta SolicitudInformacion .................................. 40
Figura 3.10 Conversación necesaria para la creación de una cuenta bot en Telegram 42
Figura 3.11 Implementación de los métodos abstractos de TelegramLongPollingBot 44
Figura 3.12 Interfaz web de Facebook for Developers ................................................. 45
Figura 3.13 Configuración de la aplicación Facebook InfoUNED .................................. 46
Figura 3.14 Configuración del host virtual de Apache .................................................. 48
Figura 3.15 Esquema del flujo de la información con la plataforma Facebook ............ 49
Figura 3.16 Script PHP para la comunicación entre la web y la aplicación. .................. 50
Figura 3.17 Implementación de la clase EnlaceWeb ..................................................... 51
Figura 4.1 Fragmento del fichero de entrenamiento .................................................... 57
Figura 4.2 Carga del fichero de entrenamiento en Weka ............................................. 58
Figura 4.3 Configuración del clasificador en Weka ....................................................... 59
Figura 4.4 Evaluación usando el fichero de entrenamiento como evaluación ............. 60
Figura 4.5 Evaluación del clasificador usando validación cruzada con 10 pliegues ...... 62
Figura 4.6 Evaluación del clasificador usando como test un fichero independiente ... 64
Figura 4.7 Funcionalidades disponibles según el idioma del modelo utilizado ............ 67
Figura 4.8 Test para comprobar el correcto funcionamiento de CoreNLP ................... 68
Figura 4.9 Resultado del test de funcionamiento de CoreNLP ..................................... 68
Figura 4.10 Fragmento del fichero NER combinado ..................................................... 71
Figura 5.1 Respuesta a un mensaje de saludo. ............................................................. 74
Figura 5.2 Respuesta a un mensaje de despedida ........................................................ 74
Alberto Martínez Montenegro ETS de Ingeniería Informática
Lista de figuras y tablas
92
Figura 5.3 Respuesta a un mensaje de información de contacto ................................. 75
Figura 5.4 Respuesta a un mensaje de información de matrícula ................................ 75
Figura 5.5 Respuesta a un mensaje de información sobre el CUID .............................. 76
Figura 5.6 Respuesta a un mensaje de información sobre precios .............................. 77
Figura 5.7 Respuesta a un mensaje sobre estadísticas de una asignatura ................... 78
Figura 5.8 Respuesta a un mensaje sobre estadísticas de una titulación ..................... 78
Figura 5.9 Respuesta a un mensaje sobre estadísticas por ranking ............................. 79
Figura 5.10 Respuesta a un mensaje sobre estadísticas por ranking con filtros .......... 80
Figura 5.11 Respuesta a mensaje de petición de guía de estudio ................................ 81
Tablas
Tabla 3.1 Actividades de la fase inicial del desarrollo ................................................... 26
Tabla 3.2 Actividades de la fase de desarrollo del prototipo 1 ..................................... 26
Tabla 3.3 Actividades de la fase de desarrollo del prototipo 2 ..................................... 27
Tabla 3.4 Actividades de la fase de desarrollo del prototipo 3 ..................................... 27
Tabla 3.5 Actividades de la fase de preparación de documentación............................ 27
Tabla 3.6 Especificaciones técnicas Raspberry Pi 4 modelo B ...................................... 28
Tabla 3.7 Tarjeta CRC de la clase Main.......................................................................... 35
Tabla 3.8 Tarjetas CRC de la clases de enlace. .............................................................. 36
Tabla 3.9 Tarjeta CRC de la clase Configuracion ........................................................... 36
Tabla 3.10 Tarjeta CRC de la clase ConexionBaseDeDatos ........................................... 36
Tabla 3.11 Tarjeta CRC de la clase Clasificador ............................................................. 37
Tabla 3.12 Tarjeta CRC de la clase ProcesadorLenguajeNatural ................................... 37
Tabla 3.13 Tarjeta CRC de la clase Conversacion .......................................................... 37
Tabla 3.14 Tarjeta CRC de la clase Mensaje .................................................................. 38
Tabla 3.15 Tarjeta CRC de la clase Frase ....................................................................... 38
Tabla 3.16 Tarjeta CRC de la clase Estudio .................................................................... 38
Tabla 3.17 Tarjeta CRC de la clase CallBack .................................................................. 39
Tabla 3.18 Tarjeta CRC de la clase DecisionUnitaria ..................................................... 40
Tabla 3.19 Tarjeta CRC de la clase SolicitudInformacion .............................................. 40
Tabla 4.1 Grupos de clasificación para los mensajes entrantes. .................................. 54
Tabla 4.2 Evaluación del modelo usando fichero de entrenamiento como test .......... 60
Tabla 4.3 Matriz de confusión usando el fichero de entrenamiento como evaluación 61
Tabla 4.4 Evaluación del modelo usando validación cruzada con 10 pliegues ............. 62
Tabla 4.5 Matriz de confusión utilizando validación cruzada con 10 pliegues ............. 63
Tabla 4.6 Evaluación del modelo usando un fichero de evaluación independiente .... 64
Tabla 4.7 Matriz de confusión usando el fichero de evaluación independiente .......... 65
Tabla 4.8 Construcción de las instancias del fichero NER de estudios ......................... 70
Alberto Martínez Montenegro ETS de Ingeniería Informática
Lista de siglas, abreviaturas y acrónimos 93
Lista de siglas, abreviaturas y acrónimos
WEKA
Waikato Environment for Knowledge Analysis
CRC
Class-Responsibility-Collaborator (Clase-Responsabilidad-Colaboración)
UML
Unified Modeling Language (Lenguaje de Modelado Unificado)
GPL
General Public License (Licencia Pública General)
MIT
Massachusetts Institute of Technology (Instituto Tecnológico de Massachusets)
Alberto Martínez Montenegro ETS de Ingeniería Informática
Lista de siglas, abreviaturas y acrónimos
94
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo A. Estructura de las tablas de la base de datos 95
Anexo A
-Estructura de las tablas de la base de datos-
En este anexo, figuran las tablas que muestran la estructura de todas las tablas
que componen la base de datos de la aplicación.
Nombre de la tabla: INFORMACION_GENERICA
# Nombre de columna Tipo Cotejamiento Nulo Clave Comentarios
1 ID_INFORMACION_GENERICA varchar(100) utf8mb4_general_ci No PRIMARIA Identificador único de registro.
2 TEXTO_INFORMACION_GENERICA longtext utf8mb4_general_ci No - Texto que el chatbot usará como respuesta.
Nombre de la tabla: MATRICULADOS_ASIGNATURAS
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 CURSO_ACADEMICO varchar(11) utf8mb4_general_ci No PRIMARIA Año del curso académico al que el registro pertenece.
2 NOMBRE_NIVEL_ESTUDIOS varchar(50) utf8mb4_general_ci No - Nombre del nivel de estudios.
3 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación.
4 ID_ASIGNATURA varchar(11) utf8mb4_general_ci No PRIMARIA Identificador único de la asignatura.
5 NUMERO_MATRICULADOS int(11) No - Número de alumnos matriculados.
Nombre de la tabla: MATRICULADOS_TITULACIONES
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 CURSO_ACADEMICO varchar(11) utf8mb4_general_ci No PRIMARIA Año del curso académico al que el registro pertenece.
2 NOMBRE_NIVEL_ESTUDIOS varchar(50) utf8mb4_general_ci No - Nombre del nivel de estudios.
3 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación.
4 NUMERO_MATRICULADOS int(11) No - Número de alumnos matriculados.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo A. Estructura de las tablas de la base de datos
96
Nombre de la tabla: PRECIOS_TITULACIONES
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación.
2 NOMBRE_TITULACION varchar(112) utf8mb4_general_ci No - Nombre de la titulación
3 EUROSPORCREDITO_MATRICULA1 decimal(5,2) No - Precio en euros por cada crédito ECTS la primera vez que el alumno se matricula de una asignatura.
4 EUROSPORCREDITO_MATRICULA2 decimal(5,2) No - Precio en euros por cada crédito ECTS la segunda vez que el alumno se matricula de una asignatura.
5 EUROSPORCREDITO_MATRICULA3 decimal(5,2) No - Precio en euros por cada crédito ECTS la tercera vez que el alumno se matricula de una asignatura.
6 EUROSPORCREDITO_MATRICULA4 decimal(5,2) No - Precio en euros por cada crédito ECTS la cuarta y posteriores veces que el alumno se matricula de una asignatura.
Nombre de la tabla: RENDIMIENTOS_ACADEMICO_ASIGNATURAS
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 CURSO_ACADEMICO varchar(9) utf8mb4_general_ci No PRIMARIA Año del curso académico al que el registro pertenece.
2 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación.
3 NOMBRE_ASIGNATURA varchar(188) utf8mb4_general_ci Sí - Nombre de la asignatura.
4 ID_ASIGNATURA varchar(11) utf8mb4_general_ci No PRIMARIA Identificador único de la asignatura.
5 CREDITOS_ASIGNATURA decimal(5,1) Sí - Número de créditos ECTS que de la asignatura.
6 CUATRIMESTRE varchar(7) utf8mb4_general_ci Sí - Cuatrimestre en el que se imparte la asignatura.
7 CURSO varchar(15) utf8mb4_general_ci No PRIMARIA Curso en el que se imparte la asignatura.
8 CREDITOS_MATRICULADOS decimal(6,1) Sí - Suma de los créditos ECTS totales de todos los alumnos que se han matriculado de la asignatura.
9 CREDITOS_EVALUADOS decimal(6,1) Sí - Suma de los créditos ECTS totales de todos los alumnos que se han presentado a las pruebas finales de la asignatura.
10 CREDITOS_SUPERADOS decimal(6,1) Sí - Suma de los créditos ECTS totales de todos los alumnos que han superado la asignatura.
11 PORCENTAJE_TASA_EVALUACION decimal(5,2) Sí - Porcentaje de alumnos alumnos que se han presentado a las pruebas finales de la asignatura.
12 PORCENTAJE_TASA_EXITO decimal(5,2) Sí - Porcentaje de alumnos que han superado la asignatura.
13 NOTA_MEDIA decimal(4,2) Sí - Nota media de los alumnos que han superado la asignatura.
14 PORCENTAJE_TASA_SUSPENSOS decimal(5,2) Sí - Porcentaje de alumnos que han suspendido la asignatura.
15 PORCENTAJE_TASA_APROBADOS decimal(5,2) Sí - Porcentaje de alumnos que han superado la asignatura con una calificación de aprobado.
16 PORCENTAJE_TASA_NOTABLES decimal(5,2) Sí - Porcentaje de alumnos que han superado la asignatura con una calificación de notable.
17 PORCENTAJE_TASA_SOBRESALIENTES decimal(5,2) Sí - Porcentaje de alumnos que han superado la asignatura con una calificación de sobresaliente.
18 PORCENTAJE_TASA_MATRICULAS_
DE_HONOR decimal(5,2) Sí -
Porcentaje de alumnos que han superado la asignatura con una calificación de matrícula de honor.
19 PORCENTAJE_TASA_EXITO_EXAMENES_
REALIZADOS decimal(5,2) Sí -
Porcentaje de exámenes aptos respecto al total de exámenes realizados.
20 VALORACION_ESTUDIANTIL decimal(5,2) Sí - Valoración media recibida por la asignatura en las encuestas de satisfacción de los estudiantes.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo A. Estructura de las tablas de la base de datos
97
Nombre de la tabla: RENDIMIENTOS_ACADEMICO_TITULACIONES
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 CURSO_ACADEMICO varchar(11) utf8mb4_general_ci No PRIMARIA Año del curso académico al que el resitro pertenece.
2 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación.
3 NOMBRE_NIVEL_ESTUDIOS varchar(50) utf8mb4_general_ci Sí - Nombre del nivel de estudios.
4 RAMA varchar(60) utf8mb4_general_ci Sí - Nombre de la rama a la que pertenecen los estudios.
5 NUMERO_MATRICULADOS int(11) Sí - Número de alumnos matriculados e.n la titulación
6 MATRICULA_EQUIVALENTE_TC_45_CREDITOS int(11) Sí - Número de alumnos maticulados en más de 45 créditos ECTS de la titulación.
7 NUMERO_ESTUDIANTES_NUEVOS int(11) Sí - Numero de estudiantes nuevos en la titulación.
8 CREDITOS_MATRICULA_ESTUDIANTES
_NUEVOS int(11) Sí -
Número de créditos ECTS en los que se han matriculado los estudiantes nuevos.
9 CREDITOS_MATRICULA_PRIMERA_VEZ int(11) Sí - Número de créditos ECTS empleados en primeras matrículas.
10 CREDITOS_MATRICULA_SEGUNDA_VEZ int(11) Sí - Número de créditos ECTS empleados en segundas matrículas.
11 CREDITOS_MATRICULA_TERCERA_VEZ int(11) Sí - Número de créditos ECTS empleados en terceras matrículas.
12 CREDITOS_MATRICULADOS int(11) Sí - Número de créditos ECTS en los que se han matriculado el total de estudiantes.
13 CREDITOS_EVALUADOS int(11) Sí - Número de créditos ECTS que han sido evaludos.
14 CREDITOS_SUPERADOS int(11) Sí - Número de créditos ECTS que han sido superados.
15 TASA_RENDIMIENTO decimal(5,2) Sí - Tasa de rendimiento de la titulación.
16 TASA_EXITOS decimal(5,2) Sí - Porcentaje de estudiantes que han superado la asignatura.
17 TASA_EVALUACION decimal(5,2) Sí -
Porcentaje de estudiantes que se han presentado a las pruebas finales de la asignatura.
18 TASA_DE_RENOVACION_DEL_TITULO decimal(5,2) Sí - Tasa de renovación del título de la titulación.
19 CREDITOS_RECONOCIDOS int(11) Sí - Número de créditos ECTS superados mediante reconocimiento.
20 MEDIA_CREDITO_RECONOCIDO_
POR_ESTUDIO decimal(5,2) Sí -
Media de créditos ECTS reconocidos respecto al total de créditos ECTS matriculados.
21 NOTA_MEDIA decimal(5,2) Sí - Nota media de la titulación.
22 PORCENTAJE_SUSPENSOS decimal(5,2) Sí - Porcentaje de suspensos respecto al total de calificaciones de la titulación.
23 PORCENTAJE_APROBADOS decimal(5,2) Sí - Porcentaje de aprobados respecto al total de calificaciones de la titulación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo A. Estructura de las tablas de la base de datos
98
24 PORCENTAJE_NOTABLES decimal(5,2) Sí - Porcentaje de notables respecto al total de calificaciones de la titulación.
25 PORCENTAJE_SOBRESALIENTES decimal(5,2) Sí - Porcentaje de sobresalientes respecto al total de calificaciones de la titulación.
26 PORCENTAJE_MATRICULAS_DE_HONOR decimal(5,2) Sí - Porcentaje de matrículas de honor respecto al total de calificaciones de la titulación.
27 NUMERO_TOTAL_ESTUDIANTES_
EGRESADOS int(11) Sí -
Número total de estudiantes egresados.
28 NUMERO_HOMBRES_EGRESADOS int(11) Sí - Número total de hombres egresados.
29 NUMERO_MUJERES_EGRESADAS int(11) Sí - Número total de mujeres egresadas.
30 NOTA_MEDIA_GLOBAL_EGRESADOS decimal(5,2) Sí - Nota media global de los estudiantes egresados.
31 NOTA_MEDIA_EGRESADOS_HOMBRES decimal(5,2) Sí - Nota media global de los hombres egresados.
32 NOTA_MEDIA_EGRESADOS_MUJERES decimal(5,2) Sí - Nota media global de los mujeres egresados.
33 DURACION_MEDIA decimal(5,2) Sí - Duración media de la titulación expresada en años.
34 PORCENTAJE_APROBADOS_EGRESADOS decimal(5,2) Sí - Porcentaje de calificaciones de aprobado de los alumnos egresados.
35 PORCENTAJE_NOTABLES_EGRESADOS decimal(5,2) Sí - Porcentaje de calificaciones de notables de los alumnos egresados.
36 PORCENTAJE_SOBRESALIENTES_EGRESADOS decimal(5,2) Sí - Porcentaje de calificaciones de sobresalientes de los alumnos egresados.
37 PORCENTAJE_MATRICULAS_DE_
HONOR_EGRESADOS decimal(5,2) Sí -
Porcentaje de calificaciones de matrículas de honor de los alumnos egresados.
38 TASA_RECONOCIMIENTO decimal(5,2) Sí - Porcentaje de créditos EXTS reconocidos.
39 TASA_EXITO_EXAMENES_REALIZADOS decimal(5,2) Sí - Porcentaje de exámenes superados respecto al total.
40 TASA_ABANDONO decimal(5,2) Sí - Tasa de abandono de la titulación.
41 TASA_EGRESO decimal(5,2) Sí - Tasa de egreso de la titulación.
42 TASA_EFICIENCIA_EGRESADOS decimal(5,2) Sí - Tasa de eficiencia de los alumnos egresados.
43 NUMERO_EXAMENES_REALIZADOS int(11) Sí - Número de exámenes realizado en la titulación.
44 NUMERO_EXAMENES_APTOS int(11) Sí - Número de exámenes realizados calificados como aptos.
45 PORCENTAJE_ESTUDIANTES_
0_EXAMENES decimal(5,2) Sí -
Porcentaje de estudiantes que no han realizado ningún examen.
46 PORCENTAJE_ESTUDIANTES_
1_EXAMENES decimal(5,2) Sí -
Porcentaje de estudiantes que han realizado un examen.
47 PORCENTAJE_ESTUDIANTES_
2_EXAMENES decimal(5,2) Sí -
Porcentaje de estudiantes que han realizado dos exámenes.
48 PORCENTAJE_ESTUDIANTES_
3_EXAMENES decimal(5,2) Sí -
Porcentaje de estudiantes que han realizado tres exámenes.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo A. Estructura de las tablas de la base de datos
99
49 PORCENTAJE_ESTUDIANTES_
4_EXAMENES decimal(5,2) Sí -
Porcentaje de estudiantes que han realizado cuatro exámenes.
50 PORCENTAJE_ESTUDIANTES_
5_EXAMENES decimal(5,2) Sí -
Porcentaje de estudiantes que han realizado cinco exámenes.
51 NUMERO_EXAMENES_REALIZADOS_
PRUEBAS_FEBRERO int(11) Sí -
Número de exámenes realizados en las pruebas de Febrero.
52 NUMERO_EXAMENES_APTOS_
PRUEBAS_FEBRERO int(11) Sí -
Número de exámenes realizados calificados como aptos en las pruebas de Febrero.
53 NUMERO_EXAMENES_REALIZADOS_
PRUEBAS_JUNIO int(11) Sí -
Número de exámenes realizados en las pruebas de Junio.
54 NUMERO_EXAMENES_APTOS_
PRUEBAS_JUNIO int(11) Sí -
Número de exámenes realizados calificados como aptos en las pruebas de Junio.
55 NUMERO_EXAMENES_REALIZADOS_
PRUEBAS_SEPTIEMBRE int(11) Sí -
Número de exámenes realizados en las pruebas de Septiembre.
56 NUMERO_EXAMENES_APTOS_
PRUEBAS_SEPTIEMBRE int(11) Sí -
Número de exámenes realizados calificados como aptos en las pruebas de Septiembre.
57 NUMERO_EXAMENES_REALIZADOS_
PRUEBAS_SEPTIEMBRE_RESERVA int(11) Sí -
Número de exámenes realizados en las pruebas de Septiembre reserva.
58 NUMERO_EXAMENES_APTOS_PRUEBAS_
SEPTIEMBRE_RESERVA int(11) Sí -
Número de exámenes realizados calificados como aptos en las pruebas de Septiembre reserva.
59 NUMERO_EXAMENES_REALIZADOS_
PRUEBAS_DICIEMBRE int(11) Sí -
Número de exámenes realizados en las pruebas de Diciembre.
60 NUMERO_EXAMENES_APTOS_
PRUEBAS_DICIEMBRE int(11) Sí -
Número de exámenes realizados calificados como aptos en las pruebas de Diciembre.
61 PORCENTAJE_DE_EXITO_
EXAMENES_FEBRERO decimal(5,2) Sí -
Porcentaje de éxamenes superados en la convocatoria de Febrero.
62 PORCENTAJE_DE_EXITO_
EXAMENES_JUNIO decimal(5,2) Sí -
Porcentaje de éxamenes superados en la convocatoria de Junio.
63 PORCENTAJE_DE_EXITO_ EXAMENES_SEPTIEMBRE
decimal(5,2) Sí - Porcentaje de éxamenes superados en la convocatoria de Septiembre.
64 PORCENTAJE_DE_EXITO_EXAMENES_
SEPTIEMBRE_RESERVA decimal(5,2) Sí -
Porcentaje de éxamenes superados en la convocatoria de Septiembre reserva.
65 PORCENTAJE_DE_EXITO_EXAMENES_
DICIEMBRE decimal(5,2) Sí -
Porcentaje de éxamenes superados en la convocatoria de Diciembre.
66 NUMERO_EXAMENES_
POR_ESTUDIANTE int(11) Sí -
Promedio de exámenes realizados por estudiante.
67 EDAD_MEDIA_GLOBAL decimal(5,2) Sí - Ediad media global del total de estudiantes.
68 EDAD_MEDIA_HOMBRES decimal(5,2) Sí - Edad media global de los hombres.
69 EDAD_MEDIA_MUJERES decimal(5,2) Sí - Edad media global de las mujeres.
70 EDAD_MEDIA_NO_NACIONALES decimal(5,2) Sí - Edad media global de los alumnos extranjeros.
71 PORCENTAJE_HOMBRES decimal(5,2) Sí - Porcentaje de hombres de la titulación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo A. Estructura de las tablas de la base de datos
100
72 PORCENTAJE_MUJERES decimal(5,2) Sí - Porcentaje de mujeres de la titulación.
73 PORCENTAJE_UNION_EUROPEA decimal(5,2) Sí - Porcentaje de estudiantes de la Unión Europea de la titulación.
74 PORCENTAJE_NO_NACIONALES decimal(5,2) Sí - Porcentaje de alumnos extranjeros.
75 PORCENTAJE_EGRESADOS_VS_
PRIMERA_MATRICULA decimal(5,2) Sí -
Porcentaje de alumnos egresados respecto a alumnos de primer año.
76 VALORACION_ESTUDIANTIL decimal(5,2) Sí - Valoración estudiantil de los estudiantes.
77 VALORACION_EGRESADOS decimal(5,2) Sí - Valoración estudiantil de los estudiantes egresados.
78 VALORACION_PDI decimal(5,2) Sí - Valoración por parte de miembros del personal docente e investigador.
Nombre de la tabla: TOTAL_ASIGNATURAS
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación a la que pertenece la asignatura.
2 ID_ASIGNATURA varchar(10) utf8mb4_general_ci No PRIMARIA Identificador único de la asignatura.
3 CREDITOS_ASIGNATURA decimal(3,1) Sí - Créditos ECTS de la asignatura.
4 NOMBRE_ASIGNATURA varchar(188) utf8mb4_general_ci No - Nombre de la asignatura.
Nombre de la tabla: TOTAL_TITULACIONES
# Nombre Tipo Cotejamiento Nulo Clave Comentarios
1 ID_TITULACION int(11) No PRIMARIA Identificador único de la titulación.
2 NOMBRE_TITULACION varchar(120) utf8mb4_general_ci No - Nombre de la titulación.
3 NIVEL_ESTUDIOS_TITULACION varchar(100) utf8mb4_general_ci No - Nivel de estudios de la titulación.
4 FACULTAD_ESCUELA varchar(100) utf8mb4_general_ci Sí - Facultad a la que pertenece la titulación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo B. Documentación de las clases 101
Anexo B
-Documentación de las clases-
En este anexo se describen todos los paquetes Java que componen la aplicación.
Se explica brevemente su función y se aportan tablas en las que figuran la totalidad de
las clases e interfaces que componen cada paquete, así como la descripción de las
mismas.
Paquete es.infouned.principal
Es el paquete principal de la aplicación, contiene la clase Main y su clase
directamente relacionada Configuracion.
Clases Descripción
Configuracion Clase que simboliza la configuración del sistema.
Main Clase principal que se encarga de iniciar todos los servicios de la aplicación.
Paquete es.infouned.aprendizajeAutomatico
Este paquete contiene las clases relacionadas con el aprendizaje automático.
Intefaces Descripción
Clasificador
Interfaz que establece los métodos que ha de tener la subclase que la implemente. Representa un clasificador de instancias genérico, ha de ser implementada por un clasificador concreto (Naive Bayes, J48, árboles de decisión, etc.).
Clases Descripción
ClasificadorNaiveBayes
Clase que simboliza un clasificador Naive Bayes, su implementación del método clasificarInstancia() le permite catalogar cadenas de texto a partir de un modelo entrenado.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo B. Documentación de las clases
102
Paquete es.infouned.baseDeDatos
Este paquete contiene las clases que se encargan de interactuar con la base de
datos de la aplicación.
Intefaces Descripción
ConexionBaseDeDatos Interfaz que establece los métodos que ha de tener la subclase que la implemente, representa una conexión con una base de datos.
Clases Descripción
ConexionMySQL Clase que implementa a la interfaz ConexionBaseDeDatos ofreciendo una conexión MySQL
InstruccionSelect Clase que simboliza la entidad de una instrucción SQL del tipo 'SELECT'
Sql Clase abstracta diseñada para que los distintos tipos de operaciones SQL hereden de ella, pudiendo gestionar la conexión y obligando a implementar los métodos abstractos.
Paquete es.infouned.conversacion
Este paquete contiene las clases directamente relacionadas con el flujo de la
conversación.
Clases Descripción
CallBack La clase CallBack permite dejar una conversación a la espera de una respuesta concreta del usuario.
Conversacion Esta clase simboliza una conversación individual, a través de uno los canales disponibles.
DecisionUnitaria Esta clase usa todos los datos que recibe en su constructor para generar la instancia de SolicitudInformacion correcta.
HistoricoConversaciones El objetivo de esta clase es almacenar las diferentes conversaciones disponibles en tiempo de ejecución
Mensaje La clase Mensaje simboliza un mensaje entrante que un determinado usuario envía al chatbot.
TextoCodificadoPlataformas Esta clase ofrece métodos estáticos que generan cadenas de texto especiales que son diferentes en cada plataforma, por ejemplo, saltos de línea.
Paquete es.infouned.enlaces
Este paquete contiene las clases que se encargan de interactuar con las
diferentes plataformas.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo B. Documentación de las clases
103
Clases Descripción
EnlaceFacebook Esta clse se encarga de establecer comunicación con la plataforma Facebook, usando la clase Conversacion para obtener las respuestas que deben facilitar.
EnlaceTelegram Esta clse se encarga de establecer comunicación con la plataforma Telegram, usando la clase Conversacion para obtener las respuestas que deben facilitar.
EnlaceWeb Clase que se encarga de crear un enlace a través de sockets con los usuarios que interactúen con el chatbot a través de la página web.
HiloEjecucionClienteEnlaceWeb Esta clase simboliza un hilo de ejecución indvidual que se encarga de procesar un mensaje recibido a través de la web y generar una respuesta.
Paquete es.infouned.estructurasDeDatos
Este paquete contiene clases auxiliares que simbolizan estructuras de datos.
Algunas de las estructuras de datos utilizadas son adaptaciones del pseudocódigo de
algunos ejemplos de [BB96].
Clases Descripción
MonticuloDeMinimos<T> Clase que implementa un montículo de mínimos.
Node<T> Clase que simboliza un nodo del montículo de mínimos.
Par<TipoObjeto1,TipoObjeto2> Clase que simboliza una pareja de objetos de cualquier clase.
Paquete es.infouned.estudios
Este paquete contiene algunas las clases que se simbolizan los estudios
impartidos en la UNED y elementos que los relacionan con la base de datos.
Clases Descripción
Asignatura Clase que simboliza una asignatura común.
AsignaturaBorrosa Clase que simboliza una asignatura ambigua.
CriterioConsultaSQL Clase que simboliza un criterio SQL que se usará de filtro en las consultas del chatbot a la base de datos.
Estudio Clase abstracta que simboliza cualquier tipo de estudio.
FactoriaEstudio Clase que se encarga de la construcción de objetos de clase Estudio mediante métodos estáticos.
IndicadorOrdenamiento Clase que simboliza un indicador de ordenamiento.
NivelEstudios Clase que simboliza el nivel de estudios de una determinada titulación.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo B. Documentación de las clases
104
ParametroEstadistico Clase que simboliza un parámetro estadístico detectable.
Titulacion Clase que simboliza una titulación.
Paquete es.infouned.procesamientoLenguajeNatural
Este paquete contiene algunas las clases que encargadas del procesamiento del
lenguaje natural.
Interfaces Descripción
ProcesadorLenguajeNatural Interfaz que simboliza un procesador del lenguaje natural.
Clases Descripción
DistanciaDeLevenshtein
Clase diseñada para ofrecer el método estático calcularDistanciaDeLevenshtein(), que nos devolverá un número entero que simboliza la diferencia entre las dos cadenas de caracteres que se le pasen como parámetro.
Frase Clase que simboliza una frase individual.
ProcesadorLenguajeNaturalStanford Clase que carga los modelos de procesamiento de lenguaje natural necesarios para hacer funcionar el StanfordCoreNLP.
Paquete es.infouned.solicitudesInformacionBBDD
Este paquete contiene las clases encargadas de gestionar las diferentes
solicitudes de información.
Clases Descripción
FactoriaDeSolicitudInformacion Clase que se encarga de la creación de instancias de tipo SolicitudInformacion mediante métodos estáticos.
SolicitudEstadisticaRendimientoAsignatura
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el rendimiento de una asignatura.
SolicitudEstadisticaRendimientoTitulacion
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el rendimiento de una titulación.
SolicitudEstadisticaRendimientoTopAsignatura
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el rendimiento de asignaturas por ranking.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo B. Documentación de las clases
105
SolicitudEstadisticaRendimientoTopTitulacion
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el rendimiento de titulaciones por ranking.
SolicitudGuia
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con la guía de la asignatura.
SolicitudInformacion
Clase abstracta que implementa los métodos comunes de todas las solicitud de información, y especifica el método abstracto generarCadenaRespuesta() que han de implementar.
SolicitudInformacionAleatoria Clase que devuelve una solicitud de información aleatoria.
SolicitudInformacionCallBack Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario queda pendiente de CallBack.
SolicitudInformacionGenerica
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con información genérica.
SolicitudInformacionIncorrecta
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario se considera que está mal planteada.
SolicitudMatriculadosAsignatura
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el número de matriculados de una asignatura.
SolicitudMatriculadosTitulacion
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el número de matriculados de una titulación.
SolicitudPreciosTitulacion
Clase que se encarga de generar las cadenas de texto finales que componen las respuestas del chatbot cuando la consulta del usuario está relacionada con el precio de una titulación.
Paquete es.infouned.utilidades
Este paquete contiene clases auxiliares con diversos algoritmos que son útiles en
distintos escenarios.
Clases Descripción
ProcesamientoDeTexto Clase que se utiliza para procesar texto eliminando o añadiendo ciertos caracteres.
Quicksort<T> Clase que implementa el algoritmo Quicksort para ordenamiento de colecciones.
Alberto Martínez Montenegro ETS de Ingeniería Informática
Anexo B. Documentación de las clases
106
Paquete es.infouned.test
Este paquete contiene clases que se encargan de las pruebas de unidad. Hacen
uso de las bibliotecas JUnit para tal fin.
Clases Descripción
TestAprendizajeAutomatico Clase de pruebas unitarias destinadas a probar el correcto funcionamiento del paquete de aprendizaje automático.
TestConfiguracion Clase de pruebas unitarias destinadas a probar el correcto funcionamiento de la clase Configuracion.
TestConversacion Clase de pruebas unitarias destinadas a probar el correcto funcionamiento de las conversaciones.
TestProcesamientoLenguajeNatural Clase de pruebas unitarias destinadas a probar el correcto funcionamiento del paquete de procesamiento del lenguaje natural.
TestSolicitudesInformacionBBDD Clase de pruebas unitarias destinadas a probar el correcto funcionamiento de las consultas a la base de datos.
TestUtilidades Clase de pruebas unitarias destinadas a probar el correcto funcionamiento del paquete de utilidades.