TFG Noelia Martinez Diaz
TFG Noelia Martinez Diaz
TFG Noelia Martinez Diaz
de Madrid
Escuela Técnica Superior de
Ingenieros Informáticos
Tutora:
Raquel Cedazo León
Ingeniería Eléctrica, Electrónica Automática y Física Aplicada
ETSI Informáticos
Universidad Politécnica de Madrid
Resumen
Este trabajo Fin de Grado forma parte del proyecto Sonidos del Cielo, que tiene
como objetivo hacer accesible la ciencia a personas con discapacidad visual así
como al público infantil a través de un experimento de ciencia ciudadana para
la clasificación de meteoros a partir de sus sonidos.
Los sonidos de meteoros empleados en este proyecto se generan a partir de los
datos recogidos por diversas estaciones de radiodetección que registran ecos de
meteoros. Estas estaciones forman parte del proyecto Contadores de Estrellas,
y hacen posible la radiodetección de meteoros, una técnica muy novedosa para
estudiar estos objetos ampliamente conocidos como estrellas fugaces.
En este trabajo en particular, se aborda el diseño y desarrollo de la aplicación
centrada en el público infantil que hace posible la clasificación de meteoros a
partir de los sonidos generados. Para ello, se desarrollará una aplicación capaz
de automatizar una conversación inteligente a través del lenguaje natural, con
lo que se conoce generalmente como un chatbot. Gracias a esta herramienta se
podrá gamificar la aplicación y se facilitará el acceso a la aplicación a niños que
no necesariamente sepan leer o escribir.
i
Abstract
This Final Degree Project is part of the Sky Sounds project, a initiative that aims
to make science accessible to people with visual disabilities, as well as to
children, through a Citizen Science experiment for meteor classification based
on sounds.
The meteor sounds used in this project are generated from data collected by
different Radiodetection stations that record meteor echoes. These stations are
part of the project Star Counters (Contadores de Estrellas) and make possible
the use of the novel technique of radio detection for studying the objects widely
known shooting stars.
This work focuses on the design and development of the application for children
that makes possible the classification based on sounds, an application which
could be used trough a natural language conversation with a chatbot. This
technology will allow to gamify the application and to increase its accessibility
regarding children that will not necessarily be able to read.
The complete project includes two main development phases: the development
of the chatbot, and the development of the web application. On the one hand, it
will be necessary to design a dialogue flow that allow a friendly and clear
interaction with elementary school children and to implement this flow to train
the chatbot. And, on the other hand, it will be necessary to create a web
application to integrate this chatbot as well as the voice recognition and
synthesis services that allow receiving inputs and responding.
ii
Tabla de contenidos
1 Introducción ......................................................................................1
1.1 Motivación del proyecto ...................................................................... 1
1.2 Contexto del proyecto ......................................................................... 2
1.3 Objetivos ............................................................................................ 5
1.4 Estructura del documento .................................................................. 6
2 Tecnologías del Proyecto y Estado del Arte ........................................7
2.1 Chatbots ............................................................................................ 7
2.1.1 ¿Qué es un chatbot? .................................................................... 7
2.1.2 Historia de los Chatbots ............................................................... 8
2.1.3 Aplicaciones de los Chatbots ...................................................... 13
2.1.3.1 Medicina ................................................................................. 13
2.1.3.2 Educación............................................................................... 14
2.1.3.3 Atención al cliente .................................................................. 15
2.1.3.4 Información ............................................................................ 16
2.1.3.5 Entretenimiento ...................................................................... 17
2.1.4 Ventajas e Inconvenientes de los Chatbots ................................. 17
2.1.4.1 Ventajas del uso de chatbots .................................................. 17
2.1.4.2 Desventajas del uso de chatbots ............................................. 18
2.1.5 Tecnologías para el Desarrollo de Chatbots ................................ 18
2.1.5.1 Frameworks o plataformas actuales para la creación de chatbots
19
2.1.5.2 Librerías para la creación de chatbots..................................... 23
2.2 Reconocimiento y Síntesis de Voz ..................................................... 25
2.2.1 Reconocimiento de voz ............................................................... 25
2.2.1.1 ¿Qué es el reconocimiento de voz? .......................................... 25
2.2.1.2 Historia del reconocimiento de voz .......................................... 26
2.2.1.3 Tecnologías actuales para el reconocimiento de voz ................ 27
2.2.2 Síntesis de voz ........................................................................... 30
2.2.2.1 ¿Qué es la síntesis de voz? ...................................................... 30
2.2.2.2 Historia de la síntesis de voz ................................................... 31
2.2.2.3 Tecnologías para la síntesis de voz .......................................... 32
2.3 Aplicaciones web .............................................................................. 34
2.3.1 ¿Qué son las aplicaciones web? ................................................. 34
2.3.2 Historia de la web ...................................................................... 36
2.3.3 Tecnologías actuales para el diseño y desarrollo de aplicaciones web
38
2.3.3.1 React ...................................................................................... 38
2.3.3.2 Angular ................................................................................... 39
iii
2.3.3.3 Vue.js ..................................................................................... 40
3 Desarrollo ........................................................................................41
3.1 Elección de Tecnologías .................................................................... 41
3.1.1 Tecnología para Chatbot ............................................................ 41
3.1.2 Tecnología para Reconocimiento y Síntesis de Voz ..................... 45
3.1.3 Tecnología para Desarrollo Web ................................................. 45
3.2 Arquitectura ..................................................................................... 47
3.3 Chatbot ............................................................................................ 49
3.3.1 Creación del Entorno y Proyecto en Rasa ................................... 49
3.3.2 Diseño del Flujo de Diálogo del Chatbot ..................................... 56
3.3.3 Diseño del Conjunto de Datos para el Chatbot ........................... 59
3.3.4 Implementación de la Lógica del Chatbot ................................... 66
3.3.5 Entrenamiento del Chatbot ........................................................ 76
3.3.6 Pruebas y Correcciones del Chatbot ........................................... 77
3.4 Aplicación web ................................................................................. 79
3.4.1 Diseño de la Interfaz Web ........................................................... 79
3.4.2 Implementación de la primera versión de la interfaz web de la
aplicación ............................................................................................... 83
3.4.3 Creación de Servicios de Reconocimiento y Síntesis de Voz para la
web 84
3.4.4 Creación del Servicio de Procesamiento de Lenguaje para la Web
87
3.4.5 Comprobación y Corrección de la Interfaz Web para el Diseño
Responsive ............................................................................................. 91
3.4.6 Elementos de Gamificación en la Aplicación ............................... 95
3.4.7 Pruebas de funcionamiento básico de la aplicación y correcciones
97
3.5 Despliegue........................................................................................ 98
3.6 Diseño e implementación de mejoras .............................................. 100
4 Resultados y conclusiones .............................................................102
4.1 Resultados ..................................................................................... 102
4.2 Conclusiones .................................................................................. 108
5 Análisis de Impacto .......................................................................111
5.1 Impacto personal ............................................................................ 111
5.2 Impacto empresarial ....................................................................... 111
5.3 Impacto social ................................................................................ 112
5.4 Impacto económico ......................................................................... 112
5.5 Impacto medioambiental ................................................................ 113
5.6 Impacto cultural ............................................................................. 113
6 Bibliografía ....................................................................................115
iv
7 Anexos ...........................................................................................121
7.1 Repositorios del trabajo .................................................................. 121
7.2 Capturas de la API de Rasa ............................................................ 121
v
1 Introducción
1.1 Motivación del proyecto
La principal motivación de este trabajo, así como del proyecto completo Sonidos
del Cielo1, es hacer accesible la Astronomía a la mayor parte de la sociedad, en
este caso, poniendo especial atención a un grupo social: los niños.
Esta idea de hacer accesible la ciencia constituye una de las bases del concepto
Ciencia Ciudadana. De acuerdo con la Comisión Europea, este término engloba
una parte de la ciencia abierta en la que los ciudadanos pueden participar en
la investigación científica de distintas formas, ya sea a través de la observación,
financiación, análisis o aportando datos [1]. Gracias a este trabajo, los usuarios
podrán ayudar a científicos y astrónomos con sus clasificaciones de meteoros
identificando algunas de las características generales del sonido como su
duración o la presencia de variaciones en el mismo.
Además, como se recoge en el artículo Ciencia ciudadana en la sociedad de la
información: nuevas tendencias a nivel mundial, la Ciencia Ciudadana es un tipo
de producción científica que se basa en una participación totalmente voluntaria
en la que no se precisa conocimientos previos [2], por lo que incluso los niños
de corta edad pueden colaborar en este tipo de proyectos. En este experimento
en particular, no es necesario que los niños tengan nociones previas sobre
astronomía, ya que únicamente tendrán que ir respondiendo a unas sencillas
preguntas sobre los sonidos. Asimismo, tampoco será necesario que los niños
sepan leer o escribir dado que se emplean mecanismos de reconocimiento y
síntesis de voz que permitirán a los niños hablar con el chatbot de la aplicación
de forma oral.
Como parte de esta motivación de hacer accesible la ciencia a la mayor parte de
la sociedad, y en concreto a los niños, también cabe destacar la creciente
popularidad y uso de las tecnologías en este colectivo. De acuerdo con el
Instituto Nacional de Estadística de España (INE), tal y como se muestra en la
Figura 1, en el pasado año 2020 un 91% de niños de entre 10 y 15 años hizo
uso del ordenador, un 94,5% hizo uso de internet y un 69,5% disponía ya de
un dispositivo móvil [3]. Estas cifras indican que una gran mayoría de la
población en el rango de edad de 10 y 15 años está familiarizada con las
tecnologías y el acceso a internet, por lo que facilitar el experimento a través de
una aplicación web podría aumentar su alcance entre este público.
1 http://www.sonidosdelcielo.org/
1
No obstante, dado que el proyecto también va dirigido a niños con edad inferior
a los 10 años, idealmente a niños en educación primaria (de 6 a 12 años),
podrían existir usuarios con menor grado de familiaridad con estas tecnologías.
Con el fin de paliar esta posible brecha en el conocimiento y manejo de estos
recursos, se emplea una interfaz gráfica sencilla con distintos componentes que
gamifican la aplicación y pueden resultar intuitivos y atractivos para los niños
de todas las edades.
Como se recoge en el libro Gamificación: fundamentos y aplicaciones, la
gamificación consiste fundamentalmente en aplicar elementos propios de juegos
en distintos contextos (no lúdicos) para estimular la motivación de las personas
en distintos entornos, como la educación [4]. Con esta motivación y estímulo,
la aplicación podría conseguir atraer a este público infantil y promover así la
ciencia de manera divertida, además podría resultar más intuitiva y familiar a
este colectivo, ya que un gran porcentaje de niños son usuarios habituales de
videojuegos. En concreto, de acuerdo con el anuario de 2019 de la Asociación
Española de Videojuegos (AEVI), un 75% de los niños entre 6 y 10 años jugaban
a videojuegos en España, así como un 68% de los niños entre 11 y 14 años [5].
El presente trabajo surge como parte del proyecto de ciencia ciudadana Sonidos
del Cielo, un proyecto que trata de hacer accesible la Astronomía al público
general, poniendo especial atención en varios grupos sociales específicos: las
personas invidentes y los niños.
2
El proyecto se compone de diversas aplicaciones que permiten la clasificación
de meteoros a partir de los datos obtenidos por varias estaciones de
radiodetección. Estos datos son presentados en forma de gráficas (curvas de luz
y espectrogramas) y sonidos que se generan por ordenador partiendo de dichos
datos, de modo que una persona puede extraer información tanto visualmente
como acústicamente sobre el meteoro.
El proceso de obtención de datos se lleva a cabo por radiodetección de meteoros,
una técnica para estudiar lo que se conoce coloquialmente como estrellas
fugaces. Tal y como se explica en la documentación del proyecto Sonidos del
Cielo, cuando los meteoroides entran en las partes más densas de la atmósfera,
la fricción provoca un aumento importante de su temperatura, de forma que a
una altura entre 80 y 100 kilómetros de la tierra, la temperatura del meteorito
es tan elevada que produce su ablación y sublimación. Este proceso deja un
rastro de electrones libres que refleja las ondas de radio, fenómeno que se
aprovecha para realizar la detección en sí del meteoro. Así pues, cuando un
radar emite una señal y esta se refleja hacia adelante en la estela ionizada de
un meteorito se produce un nuevo registro de eco [6].
La primera herramienta que ofrece Sonidos del Cielo para la clasificación de
meteoros a partir de estas detecciones es el experimento en la plataforma online
de Ciencia Ciudadana Zooniverse. En esta plataforma se encuentran
disponibles dos formas en las que los ciudadanos pueden ayudar a clasificar
meteoros, la Clasificación por sonidos y la Clasificación por imágenes [7].
En la Clasificación por sonidos se reproduce un sonido y se presenta una gráfica
con la frecuencia y una línea de tiempo que refleja visualmente los datos del
sonido. La primera pregunta que se realiza en este experimento pretende
distinguir entre los distintos tipos de estelas. Si la estela dura menos de 1
segundo se considera que se trata de una estela subdensa, es decir, contiene
una densidad de electrones libres por debajo de un umbral; si por el contrario
la estela dura más de un segundo se considera sobredensa, es decir, la densidad
de electrones libres está por encima del umbral. Respecto a este último tipo,
además, se puede distinguir entre estelas sobredensas de corta duración que
duren entre 1 y 5 segundos y estelas sobredensas de larga duración, de más de
9 segundos. Con la segunda pregunta se pretende detectar la presencia de ecos
de meteoroide, que se producen antes que los ecos de estela. Para ello se
pregunta si se escucha al principio un sonido corto (eco de meteoroide) y luego
un silencio o sonido menos intenso (eco de la estela) o si por el contrario no hay
ninguna variación en el sonido. Y finalmente, con la tercera pregunta se
pretende identificar si hay eco de meteoroide con efecto Doppler, por lo que se
pregunta si hay un sonido inicial con un tono distinto al resto.
3
Figura 3. Clasificación por sonidos de Sonidos del Cielo
4
Partiendo de este experimento en Zooniverse, se crearán dos aplicaciones más
que traten de adaptar dicho experimento para hacerlo accesible a dos grupos
sociales distintos: las personas invidentes y los niños. Por una parte, la versión
para personas con problemas de visión tendrá que ofrecer una interfaz
plenamente funcional a través de voz. En este caso será una versión muy similar
a la que encontramos en el modo de Clasificación por sonidos de Zooniverse, ya
que se espera que el público al que va dirigida la aplicación comprenda la
formulación de las preguntas, aunque no será necesario incluir gráficas de
sonido (ni ningún otro tipo de elemento gráfico). Y por otra parte, la versión para
niños podrá incluir elementos más gráficos para reforzar la gamificación del
experimento y tendrá una versión adaptada de las preguntas del experimento
en Zooniverse para facilitar su comprensión. En este trabajo se abordará
únicamente el diseño y desarrollo de esta última versión de la aplicación, es
decir, la versión para niños.
El proyecto completo, Sonidos del Cielo, ha sido promovido por el grupo de
investigación Citizen Science Lab de la Universidad Politécnica de Madrid, que
además coordina todas las actividades de desarrollo y divulgación del proyecto.
También colaboran en el proyecto el Instituto Astrofísico de Canarias (IAC), el
Grupo Docente de Astronomía Kepler y la Agrupación Astronómica Madrid Sur
(AAMS). De entre todos los colaboradores, los docentes del Grupo Kepler y
aficionados de la Agrupación de Astronomía Madrid Sur serán los que llevarán
a cabo la mayor parte de las tareas divulgativas ya que estas dos entidades
cuentan con una sede en el Aula de Astronomía de Fuenlabrada (Madrid) con
excelentes instalaciones donde realizan visitas de numerosos colegios. Estos
colaboradores, se encargarán también de supervisar los diálogos de la
aplicación para niños y realizarán talleres con grupos escolares de modo que
los niños puedan aprender sobre los meteoros y puedan también probar la
aplicación una vez desarrollada.
Además de los colaboradores ya mencionados, el proyecto Sonidos del Cielo ha
sido financiado por la Fundación Española para la Ciencia y la Tecnología
(FECYT). En la Figura 5 se muestran los logos de todas las entidades
colaboradores del proyecto que hacen posible su desarrollo.
1.3 Objetivos
5
x Integración del chatbot en la interfaz web.
x Integración de módulos de reconocimiento y síntesis de voz.
x Realización de pruebas y análisis de resultados obtenidos.
x Desarrollo de una guía de usuario.
6
2 Tecnologías del Proyecto y Estado del Arte
En este capítulo se presenta el estudio realizado sobre las tecnologías que se
pretenden emplear en el proyecto: Chatbots, Reconocimiento y Síntesis de Voz
y Aplicaciones Web. Este estudio incluye información general sobre las
tecnologías, su historia así como su estado del arte, con el fin de ofrecer una
base de conocimiento suficiente para poder evaluar en adelante qué
herramientas se emplearán en el desarrollo del proyecto.
2.1 Chatbots
7
Funcionalidades x Asiste a empresas y x Asiste a los usuarios
clientes en tareas diarias.
x Sirve como plataforma x Encaja en
experimental conversaciones
casuales o divertidas.
Canales x Páginas web x Teléfonos móviles
x Portales de asistencia x Portátiles
x Canales de mensajería x Altavoces inteligentes
x Aplicaciones móviles o dispositivos
x Widgets en aplicaciones interactivos
Interfaz x Interfaz conversacional x Interfaz de chat
de usuario x Comandos de voz
8
Figura 6. Representación gráfica del juego Imitation Game propuesto por Alan
Turing en Computing Machinery and Intelligence (1950)
Este juego es lo que hoy se conoce como el Test de Turing, y la idea en la que
se basa es la que resultó ser uno de los pilares básicos para la Inteligencia
Artificial. Siguiendo con el criterio planteado, una máquina o programa pasaría
el Test de Turing si consiguiese engañar a un humano, haciéndole pensar que
está hablando con un humano, no con una máquina.
Tras el planteamiento de este problema, en 1966, Joseph Weizenbaum creó en
el Instituto Tecnológico de Massachussets (MIT) el primer chatbot que imitaba
la conversación humana: ELIZA. Este chatbot hacía posible mantener una
conversación a través de lenguaje natural con un ordenador a través de
entradas de texto por teclado; era capaz de dada una frase de entrada, generar
respuestas adecuadas gracias al uso de palabras clave y reglas de
descomposición. En concreto, las frases de entrada se analizaban sobre una
base de reglas de descomposición activadas por la aparición de palabras clave
en dichas frases de entrada; hecho esto, las respuestas se generaban aplicando
reglas de reensamblaje asociadas a las reglas de descomposición previamente
seleccionadas [13].
ELIZA tuvo un gran impacto en esta área ya que sirvió de base para la creación
de chatbots posteriores como ChatterBot, un jugador virtual del juego
multiusuario TinyMud creado en 1989. El objetivo de ChatterBot era hablar con
otros usuarios y explorar el juego como cualquier otro jugador. De este modo,
el uso de este chatbot aplicaba directamente el, ya mencionado, Test de Turing
puesto que todos los jugadores asumían que el resto de los jugadores eran
personas y se desconocía la existencia de este jugador virtual [14].
Sin embargo, no todos los chatbots que surgieron después de ELIZA estaban
basados en este chatbot, algunos simplemente fueron inspirados por este
precursor. En 1972, el psiquiatra Kenneth Colby, en Standford, creó a PARRY,
un chatbot que imitaba a una persona con esquizofrenia paranoide. Con este
chatbot se pretendía crear un modelo de simulación por ordenador que
incluyese la teoría que trata de explicar el comportamiento paranoico. En este
caso el modelo se componía de dos partes: el módulo de análisis y el de
interpretación-acción [15]. Los resultados de este proyecto fueron muy positivos,
y la aparición de un nuevo sistema de procesamiento de lenguaje natural capaz
de hablar como un humano hizo posible por fin las conversaciones entre
máquinas. Algunos artículos como Dialogues with Colorful Personalities of Early
AI muestran diálogos entre PARRY y ELIZA en los que se aprecia la diferencia
9
entre sus estilos de habla, como si se tratasen realmente de dos personas
manteniendo una conversación [16]. El encuentro más conocido entre estos dos
chatbots se produjo en la primera conferencia internacional conocida como
International Conference on Computer Communications (ICCC) en 1972.
Años más tarde, en 1995, Richard Wallace creó ALICE (Artificial Linguistic
Internet Computer Entity), un chatbot inspirado en ELIZA que buscaba un
resultado más natural en la conversación. Algunas de las principales novedades
de este chatbot eran su uso del Artificial Intelligence Markup Language (AIML),
su arquitectura estímulo-respuesta, y también que contaba con más de 40.000
categorías de conocimiento, mientras que ELIZA solo disponía de 400. Además
de esto, el uso de ALICE a través de la web permitió la recopilación de muestras
de lenguaje natural a una escala sin precedentes en este campo. A pesar de ello,
el modelo de ALICE era supervisado, por lo que el papel de la persona encargada
del aprendizaje resultaba crucial. Esta persona monitorizaba las conversaciones
del chatbot y creaba nuevo contenido AIML para mejorar las respuestas y hacer
más creíble o humano al chatbot. Estas mejoras hicieron posible que ALICE
ganase el Loebner Prize, un Test de Turing que se realiza anualmente para
premiar chatbot que mejor imite a un humano, hasta en tres ocasiones (en el
2000, 2001 y 2004) [17].
Estos fueron algunos de los chatbots más relevantes en el panorama durante
los primeros años desde su aparición, no obstante, se crearon muchos otros
que ayudaron a cimentar las bases del estudio del procesamiento del lenguaje
natural en la simulación de conversaciones humanas. Por ejemplo, en 1988, el
informático británico Rollo Carpenter creó Cleverbot (cuya primera versión fue
conocida como Jabberwacky), un chatbot que elige cómo responder de manera
difusa y contextual comparando la conversación actual con los millones de
conversaciones que ya ha tenido anteriormente [18]. Y, en 2005, Steve Worswick
creó a Mitsuku con la tecnología de Pandorabots AIML, un chatbot con la
personalidad de una chica de Leeds de 18 años. Hoy día, Mitsuku (también
conocida como Kuki) es accesible a través de Facebook, Telegram, Twitch o Kik
Messenger [19] y tiene el récor Guinness del mundo de mayor número de
premios Loebner obtenidos con un total de 5 (en 2013, 2016, 2017, 2018 y
2019) [20].
10
fue creciendo; uno de los avances que más afectaría al desarrollo de estas
herramientas fue su uso como asistentes en dispositivos móviles u ordenadores.
Uno de los primeros chatbots que comenzó a emplearse como un asistente de
usuarios de móvil fue Siri, considerado el primer asistente inteligente personal.
Siri fue creado por Adam Cheyer, Dog Kittlaus y Tom Gruber en 2008 en Siri
Inc., una empresa derivada de SRI International. Este chatbot no se hizo
popular hasta que, en 2010, Apple adquirió Siri Inc. e incorporó a Siri como una
aplicación en su iPhone 4S [21]. Una de las mayores novedades de este chatbot
fue la posibilidad de hablar con él a través de voz, no de texto escrito;
actualmente, basta con decir en voz alta el comando “Oye Siri” para comenzar
a hablar con él. Con el paso de los años, Siri ha llegado a estar integrado en
todos los dispositivos de la marca Apple y aprende constantemente gracias al
aprendizaje automático. Además, se puede configurar en un total de 21 idiomas
y puede aprender palabras poco comunes si se le deletrea. Con todo ello, Siri
permite hacer llamadas, hacer cálculos, poner una alarma, leer mensajes o en
general, hablar con cualquier aplicación con una gran naturalidad a través del
lenguaje natural hablado [22].
Un año después de que Apple adquiriera Siri, en 2011, ocurrió un nuevo hito
en la historia de los chatbots, y en general de la Inteligencia Artificial. Este año,
Watson, el sistema cognitivo de IBM logró ganar en el concurso de televisión
Jeopardy! a sus dos contrincantes humanos. Este desafío requería incorporar
una gran variedad de técnicas para lidiar con situaciones de pregunta-
respuesta como: análisis sintáctico, clasificación de preguntas, descomposición
de preguntas, adquisición y evaluación automática, detección de entidades y
relaciones, generación lógica y representación y razonamiento del conocimiento
[23]. Watson era capaz de descomponer el lenguaje humano para identificar
inferencias con una precisión similar a la humana y a velocidades y escalas
mucho más rápidas, lo que le permitía alcanzar un nivel de precisión muy alto
cuando se trata de entender cuál era la respuesta correcta a una pregunta. A
11
diferencia de un humano, Watson no era capaz de entender palabras
individuales, sino que entendía las características del lenguaje, lo que le
permitía saber si de una pregunta se podía inferir una determinada respuesta.
En concreto, el procesamiento que realiza Watson desde que recibe una
pregunta hasta alcanzar una respuesta es el que se muestra en la siguiente
figura (ver Figura 9).
Figura 9. Cómo Watson logra una respuesta a una pregunta en The Era of
Cognitive Systems: An Inside Look at IBM Watson and How it Works.
12
disposición del mercado, de modo que hoy en día se trata de uno de los chatbots
más populares mundialmente ya permite controlar una gran variedad de
dispositivos inteligentes compatibles con este sistema [26]. Dos años más tarde,
en mayo del 2016, Google siguió el ejemplo de estas empresas tecnológicas con
su propio asistente: Google Assistant. En este caso, como en los últimos
ejemplos, el chatbot se podía emplear desde teléfonos, relojes, televisores, así
como otros dispositivos inteligentes, y permitía realizar acciones a través de
peticiones por voz [27].
2.1.3.1 Medicina
13
Figura 10. Ejemplo de conversación con Babylon, de Babylon Health
2.1.3.2 Educación
14
Figura 11. Ejemplo de conversación con Andy
15
Figura 12. Ejemplo de conversación con Helper Bot de Just Eat Reino Unido
2.1.3.4 Información
16
2.1.3.5 Entretenimiento
A pesar de que esta aplicación de los chatbots se ha visto eclipsada por algunas
de las anteriores (medicina, educación, atención al cliente, o información), no
se puede olvidar uno de los primeros usos de esta tecnología: el entretenimiento.
Algunos de los ejemplos presentados en el capítulo Historia de los chatbots,
como Cleverbot o Mitsuku, además de tener un gran valor por su aporte en la
investigación y desarrollo de los chatbots, aportaban un gran entretenimiento a
los usuarios que se atrevían a probarlos a través de sus respectivas páginas
web. Hoy en día, es posible hablar con chatbots como Mitsuku (ver Figura 14)
no solo a través de sus sitios web sino también a través de sus integraciones en
plataformas de mensajería instantánea y pasar un buen rato simplemente
charlando [35].
17
discapacidad que les impida introducir o leer texto en un dispositivo de
forma manual.
x Reducción de dependencia humana: se evita la intervención de una
persona (asistente o trabajador en general) en casos sencillos que puedan
ser automatizados, pero sin perder el trato natural y directo con el
usuario o cliente.
x Reducción de costes: ya que estas herramientas permiten prescindir de
un exceso de personal y permite dar un servicio de 24 horas sin costes
adicionales, las empresas que ofrecen asistentes de este tipo pueden
ahorrar dinero sin sacrificar calidad en su servicio.
x Rapidez: los chatbots son capaces de ofrecer respuestas de manera
mucho más rápida que un humano.
x Mantienen la imagen de las marcas: a diferencia de un humano, un
chatbot proporciona una experiencia homogénea a todos sus usuarios y
no se ve afectado por cambios de humor, de modo que estos factores no
podrán afectar negativamente a las empresas que usen este tipo de
asistentes para el trato con clientes.
18
un lado los frameworks y plataformas que incluyen un conjunto de
herramientas para crear chatbots, así como algunas de las librerías que
permiten realizar determinadas funciones relacionadas con el procesamiento
del lenguaje natural para la creación de chatbots.
Microsoft Bot Framework es la solución que ofrece Microsoft para crear chatbots
de manera sencilla y rápida. Este marco hace uso de los servicios cognitivos de
Azure (Azure Cognitive Services), por lo que los chatbots tienen la habilidad de
hablar, escuchar y comprender. Dentro de estos servicios cognitivos se
encuentra LUIS (Language Understanding Intelligent Service), el sistema de
procesamiento natural de Microsoft.
El marco hace posible la creación de chatbots mediante el diseñador visual Bot
Framework Composer así como a través de código (NodeJS y C#), gracias a su
SDK Bot Framework, y ofrece así una gran versatilidad. Además, permite la
integración de los chatbot en una gran variedad de canales como Skpe, Slack,
Facebook Messenger o Microsoft Teams entre otros [36].
19
No obstante, este sistema es de pago. En la actualidad, es necesario pagar los
recursos consumidos por este framework, incluyendo así los costes de Azure
Bot Service, LUIS, QnA Maker API y el servicio de voz.
Como todos los servicios de Amazon Web Service (AWS) este servicio escala
automáticamente bajo demanda, por lo que no es necesario preocuparse por el
hardware ni la administración de la infraestructura. Además, Amazon Lex
puede aprovechar la capacidad de Amazon Web Service para sacar partido
también a otras de sus funciones de seguridad, almacenamiento, o
monitorización, entre otras.
Respecto a la integración, Amazon Lex permite una integración sencilla de los
chatbots en distintos canales como por ejemplo Facebook Messenger, Slack y
Twilio SMS.
Sin embargo, aunque actualmente Amazon ofrece 10.000 solicitudes de texto y
50.000 solicitudes de voz gratuitas por mes durante 12 meses con la capa
gratuita de Amazon Web Service, este servicio es también de pago. Los cobros
se realizan en función de las solicitudes de texto o voz, por lo que se aplican
precios por uso, sin cargos anticipados ni mínimos de consumo [37].
20
2.1.5.1.3 Google Dialogflow
IBM Watson Assistant se trata de una de las soluciones más populares para la
creación de chatbots, creada por IBM. El sistema está pensado para ser usado
por personas que no saben programar, ya que ofrece una interfaz intuitiva y
una biblioteca de contenido que facilita su uso. Este servicio utiliza técnicas
avanzadas de Inteligencia Artificial para identificar y crear recomendaciones de
intención, detectar tendencias y problemas en el momento o aprender de las
elecciones hechas por los usuarios. Además, es capaz de resolver situaciones
de desambiguación e incluye modelos pre-entrenados para la comprensión del
lenguaje natural. También permite la personalización de voz y se puede ajustar
a los distintos dialectos o acentos de los usuarios. Este sistema gestiona
fácilmente varios temas durante las conversaciones y ayuda a los usuarios
cuando no saben cómo seguir la conversación.
IBM Watson ofrece, como en los ejemplos anteriores, una integración
multicanal: en web, en aplicaciones de telefonía (para llamadas de voz) y
plataformas de mensajería instantánea.
No obstante, se trata también de un servicio de pago, ya que aunque ofrece una
versión Lite, la mayoría de las funcionalidades solo están disponibles en las
versiones de pago, disponibles a partir de 140 USD al mes [39].
2.1.5.1.5 Rasa
2.1.5.1.6 Wit.ai
22
2.1.5.1.7 Botpress
Botpress es un framework gratuito, por lo que es posible hacer uso de todas sus
funcionalidades sin pagar, aunque ofrece soporte adicional (si se quiere)
pagando una cuota mensual [42].
2.1.5.2.1 Chatterbot
23
que un usuario habla, ChatterBot almacena la frase y la respuesta de manera
que su precisión aumenta con el número de conversaciones que haya tenido
[43].
2.1.5.2.2 ChatbotAI
Natural Language Tool Kit, más conocida como NLTK, es una de las librerías
más destacadas de Python para el procesamiento de lenguaje natural. De
acuerdo con la documentación oficial de la librería, ofrece interfaces para más
de cincuenta corpus y recursos léxicos, así como un conjunto de bibliotecas de
procesamiento de texto para clasificación, tokenización, derivación, etiquetado
o análisis y razonamiento semántico [45].
2.1.5.2.4 PyNLPl
2.1.5.2.5 spaCy
spaCy es otra de las librerías de código abierto en Python para crear aplicaciones
de Procesamiento del Lenguaje Natural. Esta librería ofrece algunas funciones
como la tokeninzación o segmentación del texto en palabras o símbolos, el
etiquetado de palabras, la detección de frases, la detección de palabras similares,
la clasificación de texto para asignar categorías o etiquetas a documentos o la
detección de coincidencias basada en reglas. Además de esto, spaCy ofrece
vectores pre-entrenados en distintos idiomas que facilitan la creación de
modelos cuando se dispone de un conjunto de datos de entrenamiento reducido
[47].
24
2.1.5.2.6 TextBlob
Chatbots como Siri, Cortana, Google Assistant o Alexa ofrecen hoy en día una
interfaz por voz que hace que los usuarios puedan comunicarse a través del
habla, sin necesidad de un teclado para introducir texto escrito o una pantalla
para leer las respuestas. Esto es posible gracias a los sistemas de
reconocimiento y síntesis de voz que permiten respectivamente identificar las
palabras y frases que un usuario dice mediante lenguaje natural hablado y
responder por voz a aquello que el usuario ha dicho.
En este subcapítulo se explica qué es un sistema de reconocimiento de voz y un
sistema de síntesis de voz y qué tecnologías existen actualmente para reconocer
y sintetizar la voz humana.
25
Señal de voz
Preprocesado
Identificación
Extracción de Extracción de
características características
Resultados
Entrenamiento
Modelo
26
como redes de Markov con transición de probabilidad a priori entre los estados.
Tras el análisis sistémico de rendimiento de ambos sistemas se creó Harpy, un
sistema en el que el conocimiento se representaba como una red de transición
de estados finita sin transición de probabilidades a priori. Las mejoras que
proponía este sistema eran principalmente la búsqueda paralela de los mejores
caminos sintácticos y acústicos para determinar el camino óptimo y también el
uso de la segmentación para reducir la longitud de las frases y así reducir
también el número posibles estados [53].
Tras este gran avance en los resultados de un sistema de reconocimiento de
habla, se comenzó a emplear un nuevo modelo que se había estado
desarrollando durante los últimos años y que sería de gran utilidad en este tipo
de tecnologías: el Modelo Oculto de Markov (HMM o Hidden Markov Model). Este
se trata de un modelo estadístico en el que se asume que el sistema a modelar
es un proceso de Markov con parámetros desconocidos. Partiendo de esta idea,
el objetivo consistía en descubrir cuales son estos parámetros desconocidos a
través de parámetros observables. Al aplicarlo en el contexto del reconocedor
del habla, en lugar de utilizar palabras y buscar patrones de sonidos
únicamente, el Modelo Oculto de Markov permitía calcular también la
probabilidad de sonidos desconocidos como palabras [54].
Tras la incorporación del Modelo Oculto de Markov en la década de 1980, los
sistemas comenzaron a mejorar significativamente. La década siguiente (1990)
fue un momento ideal para la expansión de este tipo de tecnologías y la
comercialización de estos sistemas, de tal modo que incluso en 1997 se lanzó
VAL, el primer portal de voz de BellSouth. VAL se trataba de un sistema
interactivo que podía responder preguntas realizadas por teléfono, y su
tecnología se sigue usando en la actualidad cuando se llama a bancos, u otras
empresas por teléfono [55].
En los años 2000, la precisión en el reconocimiento ya rondaba el 80% pero no
se produjeron muchos avances hasta la llegada de Google Voice Search, la
aplicación de Google para hacer búsquedas a través de voz. Con este sistema,
Google fue capaz de recoger alrededor de 230 billones de palabras de los
usuarios para mejorar la predicción [52]. Años más tarde (2011) apareció
también en el mercado Siri, un sistema similar a Google Voice Search. A partir
de este momento comenzaron a destacar los sistemas de grandes compañías
como Google, Apple, IBM, Microsoft o Amazon, que tal y como se mencionó en
el apartado Chatbots, desarrollaron módulos completos de reconocimiento de
voz como parte de sus propios asistentes virtuales para permitir la interacción
a través del habla.
27
adaptación a dominios específicos y palabras poco frecuentes, o la posibilidad
de modificar los niveles de precisión en la transcripción. También cuenta con
modelos ya entrenados para recibir comandos de voz o transcribir vídeos y
llamadas, y permite reconocer voz en tiempo real. Respecto a la infraestructura,
se trata de una solución cloud a la que se accede a través de una API, pero
también ofrece una versión on-premise con Speech-to-Text On-Prem, que se
establece en la infraestructura del cliente otorgándole control total sobre la
infraestructura de la aplicación y sobre los datos de las conversaciones.
Algunas de las ventajas frente a otras tecnologías de este tipo es que aplica los
algoritmos de redes neuronales de aprendizaje profundo más avanzados de
Google, ofrece cobertura mundial ya que permite reconocer más de 125 idiomas
y variedades lingüísticas, y además se puede desplegar fácilmente, en función
de las necesidades del cliente, tanto en la nube como en local.
Actualmente, el precio por usar este sistema viene determinado por la cantidad
de audio procesado correctamente cada mes y se mide en incrementos rodeados
a los siguientes 15 segundos. Para modelos estándar con la opción
predeterminada, el precio de 60 minutos a 1 millón de minutos es de 0,006 USD
por cada 15 segundos, mientras que los modelos mejorados con opción estándar
para esta misma cantidad de audio sería de 0,009 USD cada 15 segundos.
Uno de los servicios que ofrece Microsoft dentro de sus Cognitive Services es
Speech to Text, capaz de convertir el habla en texto de manera precisa [57]. Este
sistema ofrece transcripciones precisas con formato y puntuación a partir de
audio proveniente directamente de micrófonos, de archivos de audio o de
almacenamientos Blob. Permite personalizar y crear nuevos modelos de voz
adaptados a necesidades concretas con dominios y terminología específica, así
como a situaciones con ruido, acentos o vocabulario único. Y además resulta
fácil de implementar en infraestructuras cloud o locales.
En este caso, el sistema es compatible con más de 85 idiomas y variantes,
algunos menos que la solución de Google.
Respecto al precio, en su versión estándar existen distintas tarifas en función
de las características deseadas. Con características estándar se pagan alrededor
de 0,844€ por hora de audio, con características personalizadas 1,181€ por
hora de audio más 0,0454€ de hospedaje por modelo a la hora y, finalmente,
con características de audio multicanal de transcripción de conversaciones se
pagarían 1,78€ la hora.
28
Los precios de Watson Speech to Text varían en función del centro de datos que
suministre este servicio. Las tarifas para Europa son de 0.02$ de 1 a 100
minutos consumidos y de 0.01$ por más de 100 minutos consumidos del
servicio.
29
2.2.2 Síntesis de voz
Reglas de
transcripción
fonética
Atributos de
prosodia
No obstante, algunos de los sistemas más recientes han dejado de lado esta
estructura al emplear redes de neuronas que automatizan mucho más el
proceso de síntesis y son capaces de producir resultados mucho más naturales
o “humanos”. En los siguientes apartados se detallará más cómo funcionan
algunas de las mejores tecnologías de síntesis del habla en la actualidad.
30
2.2.2.2 Historia de la síntesis de voz
Se considera que uno de los primeros intentos por sintetizar el habla se remonta
a hace más de doscientos años, concretamente a 1779. Este año, el profesor
ruso Christian Kratzenstein explicó cuáles eran las diferencias fisiológicas entre
las vocales largas /a/, /e/, /i/, /o/ y /u/ y consiguió producirlas
artificialmente gracias a los resonadores acústicos que construyó imitando el
tracto vocal humano. Estos resonadores (ver Figura 20) eran como instrumentos
musicales con lengüetas vibrantes para producir el sonido deseado.
31
El siguiente hito para la síntesis de voz fue en 1953, año en que Walter Lawrence
creó su sintetizador PAT (Parametric Artificial Talker), el primer sintetizador de
formantes. Casi al mismo tiempo, Gunnar Fant introdujo el primer sintetizador
de formantes en cascada, sistema conocido como OVE. Y unos años más tarde
John Holmes creó el sintetizador de formantes paralelo. En este tipo de sistemas
(sintetizadores de formantes) la novedad era que el sonido resultante se
generaba a partir de un modelo acústico físico, empleando distintos parámetros
como la frecuencia fundamental o la amplitud [66].
Tras la aparición de la síntesis de formantes, el siguiente tipo de síntesis en
aparecer fue la síntesis articulatoria. Uno de los primeros sistemas que hacía
uso de este tipo de técnicas fue DAVO (Dynamic Analog of the Vocal tract) creado
en 1958 en el Instituto de Tecnología de Massachusets (MIT). En los siguientes
años, este tipo de técnicas se fueron asentando y se comenzaron a comercializar
algunos de estos sistemas de texto-a-voz.
Llegada la década de 1970, un nuevo modelo se comenzó a aplicar en esta área
como ocurrió en el reconocimiento del habla: el Modelo Oculto de Markov. En
este modelo existía una serie de estados entre los cuales existe una transición
con dos probabilidades, la probabilidad de transición y la función de densidad
de probabilidad que representaba la probabilidad condicional de emitir un
símbolo de un determinado alfabeto una vez se asume la transición.
Aunque los resultados producidos por los sistemas eran cada vez mejores, el
gran cambio en el panorama vino de la mano de las redes de neuronas, que han
hecho que en la actualidad existan herramientas de síntesis del habla capaces
de simular de manera muy remarcable la voz humana.
32
No obstante, como ocurría con los servicios de reconocimiento de voz Google, es
necesario pagar por su uso. En este caso, el precio de la API se establece en
función de la cantidad de caracteres que se envían al mes y en función de las
voces que se utilicen. Para las voces estándar (no WaveNet), que resultan menos
naturales para el oyente, el precio es de 4 USD por millón de caracteres,
mientras que para las voces WaveNet, mucho más naturales, el precio se eleva
a 16 USD por millón de caracteres.
Watson Text to Speech es la API que ofrece IBM para convertir el texto escrito
en voz tanto en aplicaciones propias como dentro de su sistema Watson
Assistant. Sus características son similares a los sistemas ya presentados. La
API ofrece distintas voces suaves y naturales creadas con de redes de neuronas,
también permite diseñar nuevas voces personalizadas a partir de grabaciones
de una hora de grabaciones, permite modificar atributos de la voz como el
volumen, el tono o la velocidad; cuenta con opciones de personalización de la
pronunciación, permite modificar la expresividad del habla, o incluso ofrece la
posibilidad de transformar la voz personalizando el ritmo, timbre o incluso la
respiración.
Esta API ofrece voces en 16 idiomas y sus respectivos dialectos, además de
contar con voces femeninas y masculinas para cada caso.
Respecto a su precio, se calcula en función del plan escogido. El plan Lite, que
incluye 10.000 caracteres máximos por mes, 35 voces y 16 idiomas es gratuito,
mientras que el plan Estándar, con caracteres ilimitados al mes, 35 voces y 16
idiomas tiene un precio de 0,02 USD por mil caracteres.
33
2.2.2.3.4 Amazon Polly
Web Speech API ofrece una alternativa web gratuita para sintetizar voces con
un resultado de calidad gracias a su interfaz SpeechSynthesis [60]. Esta API
incluye, además de la interfaz principal controladora de la síntesis de voz, otras
interfaces estrechamente relacionadas con SpeechSynthesis para escoger la voz
que se va a emplear o modificar el tono y la velocidad, por lo que es posible
modificar la voz sintetizada.
Las voces disponibles para la síntesis son las propias del navegador, de modo
que los resultados podrán variar en función del navegador desde el que se
acceda a la aplicación. En este caso, la API funciona con Firefox además de con
Chrome, en concreto funcionará con Firefox para escritorio y dispositivos
móviles a partir de OS 2.5+.
36
que rigen hoy la web: la descentralización, la no discriminación, el diseño de
abajo hacia arriba (bottom-up), la universalidad y el consenso [75].
Tras establecer estas primeras bases para la web, la aparición de nuevas
tecnologías ha sido constante (ver Figura 22). En marzo de 1993 se había
lanzado el primer navegador web, MOSAIC, y su ejemplo fue rápidamente
seguido por NetScape en 1994 y Opera e Internet Explorer en 1995. A estos
navegadores más antiguos, se les sumarian además Safari en 2003, Firefox en
2005 y Chrome en 2008. Las versiones de HTML y CSS también fueron
avanzando con el paso de los años hasta alcanzar actualmente la quinta versión
de HTML y la tercera de CSS. Y además, numerosos lenguajes y formatos (entre
otros) fueron incrementando la variedad y riqueza de la web a niveles como el
de las comunicaciones, la seguridad o de aparición de nuevas funcionalidades
[76].
Para poder reflejar esta enorme evolución producida en la web en las últimas
décadas, a menudo se utilizan términos como Web 1.0, Web 2.0, Web 3.0 o Web
4.0. Esta forma de denominar a la web sirve para representar los cambios que
ha sufrido la misma especialmente en cuestión de uso y asentamiento de
tecnologías [77].
La Web 1.0 data de la década de 1990, y hace referencia a una web muy básica
en la que solo existían navegadores de texto y los usuarios solo podían consumir
de forma pasiva la información alojada en los servidores. Era una web estática,
centralizada, secuencial, de solo lectura y no interactiva.
La llegada de la Web 2.0 se produjo cuando la interacción comenzó a formar
parte de la web, alrededor del año 2000. En concreto, el término fue acuñado
por O’Reilly en 2004 con el objetivo de referirse a una nueva generación de
tecnología web, esta vez basada en comunidades de usuarios con servicios como
blogs, wikis, chats o foros que fomentaban la colaboración e intercambio de
información entre las personas. Con esta generación, la web era dinámica, de
lectura y escritura, y sobre todo interactiva.
El siguiente cambio de generación se produjo en 2010 con la llegada de la Web
3.0 o web semántica. Esta web hacía un uso mucho más eficiente de los datos,
de hecho, incluye metadatos semánticos u ontológicos que dan valor a la
información y mejoran la capacidad de búsqueda. Esto supone un gran cambio
que rompe con las posibles barreras de formato y estructura para que todos los
usuarios de la web puedan acceder a la información que desean.
37
Tras esto, en 2016 se considera que se llega a generación más reciente de la
web: la Web 4.0. La novedad de esta web es que se centra en su comportamiento
inteligente y predictivo, de manera que se puedan anticipar a las solicitudes de
los usuarios o incluso predecir sus comportamientos futuros. Además, se
comienza también a hacer un uso generalizado de las interacciones por voz con
dispositivos inteligentes. En definitiva, se alcanza una web dominada por las
tecnologías de Inteligencia Artificial que permiten adelantarse a las necesidades
del usuario y darle lo que necesita en cada momento.
Ya que estas tres tecnologías destacan claramente sobre el resto, este apartado
se centrará en ellas.
2.3.3.1 React
38
Esta biblioteca surgió con la intención de lidiar con proyectos a gran escala y
basados fundamentalmente en el uso de datos (data-driven), por lo que pretende
ser sencilla al uso y declarativa. React permite diseñar vistas simples para cada
estado de la aplicación y se encarga de actualizar y renderizar de forma eficiente
los componentes necesarios. Además, al contar con vistas declarativas, el código
es más predecible para el programador y hace que sea más fácil de depurar.
Es una biblioteca basada en componentes que pueden manejar su propio estado,
por lo que se puede organizar el código cómodamente y reutilizar en otras partes
de la aplicación. Estos componentes estás escritos en JavaScript y no en
plantillas, de modo que se puede mantener el estado fuera del DOM (Document
Object Model) virtual que ofrece React, y de esta forma se puede mantener un
rendimiento más uniforme sin interrupciones.
Además de esto, React puede renderizar desde el servidor empleando Node, y
puede potenciar aplicaciones móviles con React Native, algo que resulta de gran
utilidad si se desea sustituir o evitar el uso de aplicaciones nativas manteniendo
un buen rendimiento.
La biblioteca está mantenida por Facebook. Se encuentra en constante
desarrollo e incorpora novedades regularmente, algo positivo ya que cuenta con
herramientas avanzadas y útiles para adaptarse a las necesidades de los
desarrolladores, sin embargo, los constantes cambios hacen que la curva de
aprendizaje de esta tecnología sea mayor para gente poco familiarizada con el
framework [79].
2.3.3.2 Angular
39
acceder a ayudas como autocompletado de código, detección de errores o
retroalimentación sobre el código. Además también cuenta con un CLI
(Command Line Interface) propio que permite crear componentes rápidamente,
compilar el código o desplegar la aplicación.
Además de estas características, Angular destaca entre otros frameworks en su
sincronización en tiempo real entre modelo y vista, lo que hace posible que
cualquier cambio producido en el modelo se refleje instantáneamente en la vista
[80].
2.3.3.3 Vue.js
40
3 Desarrollo
Como se comenta en el apartado de Introducción, el objetivo global del proyecto
es desarrollar un chatbot para el público infantil que esté integrado en una
aplicación web con la que se pueda interactuar a través del lenguaje natural
hablado, y que permita de esta manera participar a niños que no
necesariamente sepan leer ni escribir en un proyecto de ciencia ciudadana para
la clasificación de meteoros a través de sus sonidos. En este capítulo se abordan
los pasos y tareas realizadas para cumplir con este objetivo, incluyendo así
información relativa a la elección de tecnologías, elección de arquitectura,
diseño e implementación del chatbot y la aplicación web, así como la integración
de los módulos de reconocimiento y síntesis de voz.
42
Frameworks Bibliotecas
No es necesario saber programar Es necesario saber programar
Incluye todas las funcionalidades No incluye todas las funcionalidades
para desarrollar por completo un para desarrollar por completo un
chatbot chatbot
Fácil integración con diversos No incluyen mecanismos de
canales integración
Limitan el diseño de la arquitectura No limitan el diseño de la
y estructura del proyecto arquitectura y estructura del
proyecto
Generalmente de pago (aunque no Generalmente gratuitas
todos)
Tabla 2. Comparativa entre frameworks y bibliotecas de creación de chatbot
Dadas las numerosas ventajas que ofrecen los frameworks frente a las
bibliotecas, se descarta el uso independiente de bibliotecas para el proyecto, por
lo que a continuación se realiza una comparativa entre los principales marcos
de trabajo para la creación de chatbots.
Los frameworks que forman parte del estado del arte en la creación de chatbots
son, como se mencionó en apartados anteriores: Microsoft Bot Framework,
Amazon Lex, Google Dialogflow, IBM Watson Assistant, Rasa, Wit.ai y Botpress.
Las soluciones de Microsoft, Amazon, Google y Amazon son de pago, por lo que
se evitará su uso en el proyecto, dando prioridad a los marcos de código abierto
Rasa, Wit.ai y Botpress.
Otro de los factores eliminatorios en esta elección es la necesidad de cuentas en
sistemas de terceros, como es el caso de Wit.ai de Facebook. En este caso Wit.ai
requiere disponer de una cuenta de Facebook y aceptar los términos y
condiciones de uso de esta misma compañía, algo que crea una gran
dependencia con terceros e incluso podría llegar a limitar el uso de la aplicación.
Por este motivo, se descarta el uso de Wit.ai en el proyecto.
Por lo que respecta a Rasa y Botpress, sus características son muy similares ya
que no requieren cuenta, son gratuitos, permiten desarrollo en código y se
pueden integrar en el mismo número de canales. No obstante, existen algunas
diferencias como el lenguaje de programación, la interfaz gráfica, o la existencia
de documentación y foros de consulta.
Rasa emplea Python, un lenguaje de programación muy sencillo de usar y
aprender además de muy típico en la programación de agentes inteligentes,
mientras que Botpress hace uso de JavaScript, un lenguaje también muy
popular pero más complejo y con una línea de aprendizaje mayor.
En su versión de código abierto, Rasa no dispone de interfaz gráfica mientras
que Botpress sí. Esto puede ser visto como algo positivo o negativo, ya que una
interfaz puede ayudar a usuarios inexpertos a diseñar su agente, sin embargo,
también puede limitar el diseño. En este sentido, aunque Rasa no ofrece una
interfaz gráfica, permite crear un chatbot base desde su sitio web y descargar
el proyecto con la estructura del proyecto ya creada con todos los ficheros
necesarios. Esto resulta de gran utilidad ya que no es necesario mezclar código
43
e interfaz gráfica, sino que desde el principio permite al usuario familiarizarse
con los ficheros y compartir el proyecto en un repositorio fácilmente.
Y por último, Rasa cuenta con abundante documentación en su sitio web así
como foros de consultas propios oficiales o externos. Esto resulta de gran ayuda
ya que se puede encontrar soporte en distintos lugares ante cualquier fallo,
duda, o problema. En el caso de Botpress no se encuentra tanto material de
consulta a pesar de que también dispone de una extensa documentación en su
página oficial.
Tras este análisis, se decide optar por Rasa Open Source como tecnología para
desarrollar el chatbot de la aplicación, ya que se trata de la solución de código
abierto líder en el área, es gratuita, incluye todas las herramientas necesarias
para crear un chatbot desde cero, es posible compartir el código del proyecto
entero de manera fácil y rápida, emplea una estructura de ficheros intuitiva y
hace uso del lenguaje Python para desarrollar la lógica de las funciones
personalizadas, no está ligada a sistemas de terceros, dispone de una amplia
44
documentación, y además permite integrar los agentes en todo tipo de canales
gracias a su API, lo que además facilita el manejo de múltiples usuarios.
45
biblioteca se recomienda cuando se pretende desarrollar aplicaciones de una
sola página, o interfaces en muy poco tiempo, y se desaconseja cuando no se
tiene experiencia en el uso de JavaScript o JSX.
Por su parte, Angular ofrece ventajas como el uso también de componentes que
establece como elementos externos sin dependencias y se pueden reutilizar en
toda la aplicación, tiene capacidad de actualizar en tiempo real los cambios
realizados en el modelo en la vista y viceversa (enlace bidireccional), reduce la
cantidad de código gracias a uso de plantillas y cuenta con una gran comunidad
de aprendizaje y apoyo. Sus desventajas se centran sobre todo en su gran
tamaño que en ocasiones puede dificultar el funcionamiento de aplicaciones
dinámicas. Este framework se recomienda especialmente en proyectos que
tienen que actualizar dinámicamente el contenido pero no se recomienda en
proyectos pequeños o simples si se desconoce el marco de trabajo debido a su
complejidad.
Por último, Vue.js tiene como ventajas su extensa documentación, su
simplicidad de sintaxis, la flexibilidad para diseñar la estructura de la aplicación
y también el enlace bidireccional Modelo-Vista. No obstante tiene numerosas
desventajas ya que sus componentes no son tan estables como los de los marcos
anteriores, tiene una comunidad más pequeña, requiere el uso de otras
tecnologías o complementos para un desarrollo más completo e impone una
gran barrera de idioma con sus complementos ya que muchos están escritos en
chino. Esta biblioteca se recomienda cuando se tiene una estructura de
proyecto muy flexible, pero no se recomienda si se espera encontrar una gran
comunidad o componentes estables.
Ventajas Inconvenientes
React Uso de componentes Difícil mantenimiento
Rendimiento uniforme Uso de JSX (extensión de JS)
Herramientas avanzadas Solo front-end
Angular Uso de componentes Gran tamaño del framework
Enlace bidireccional Modelo-
Vista
Reducción de código
Amplia documentación y
comunidad
Vue.js Uso de componentes Comunidad reducida
Enlace bidireccional Modelo- Componentes poco estables
Vista
Complementos en otros idiomas
Sintaxis simple
Amplia documentación
3.2 Arquitectura
Este trabajo forma parte de una infraestructura compleja formada por diversos
proyectos y distribuida en varias máquinas tal y como se muestra en la figura
a continuación (ver Figura 24).
47
Sonidos del Cielo. En esta máquina además se alojará tanto el chatbot como la
web de este Trabajo Fin de Grado (indicados en azul en la Figura 24).
Este trabajo en concreto necesitará por tanto añadir dos bloques nuevos a la
arquitectura general: el correspondiente a la aplicación web y el correspondiente
al chatbot desarrollado con Rasa.
Por un lado, se deberá crear una aplicación web con Angular 8, que será a la
que accedan los usuarios a través de sus navegadores. Esta aplicación
contendrá varios servicios que harán uso de la Web Speech API para procesar
las detecciones de habla y transformarlas en texto (SpeechRecognition), y
sintetizar las respuestas que genere el chatbot (SpeechSynthesis). La aplicación
tendrá también que estar conectada al bloque del chatbot Rasa, al que se
accederá a través de su API con llamadas POST. Respecto al despliegue, este
primer bloque (aplicación web) se desplegará en un contenedor Docker con un
servidor Node.js.
Por otro lado, el bloque de chatbot Rasa estará formado por dos componentes,
el servidor general de Rasa que contiene el modelo del chatbot y el servidor de
acciones, que contendrá las acciones personalidadas creadas gracias al SDK en
Python. Las llamadas POST llegarán al servidor principal que se encargará de
identificar las intenciones (intents) de los mensajes gracias al procesado de NLU,
y, a partir de este momento, determinará que acción se debe ejecutar gracias al
Core de Rasa. Si se identifica una acción personalizada, este primer bloque
accederá al servidor de acciones de Rasa para ejecutar el código necesario. Si
esa acción implica la obtención de un nuevo sonido o el almacenamiento de una
nueva clasificación, este servidor de acciones hará una llamada a la API
Meteoros para obtener el sonido o guardar la clasificiación en la base de datos
del proyecto. Una vez hecho esto, el servidor de acciones responderá a la
petición y el Core devuelvolverá la respuesta a la aplicación que ha realizado la
llamada. Si no se hizo uso de acciones personalizadas, el Core será el encargado
de ejecutar directamente las acciones por defecto programadas en ese modelo.
Este bloque se desplegará como dos contenedores Docker diferentes, uno para
el servidor de Rasa (API) y otro para el servidor de acciones (SDK).
48
3.3 Chatbot
Antes de comenzar con el diseño del chatbot, se creará el entorno virtual para
instalar todas las dependencias de Rasa y también el proyecto de Rasa que
servirá de base para implementar el chatbot tal y como se indica en los
siguientes apartados. Para crear tanto el entorno como el proyecto base se
seguirán las instrucciones que se recogen en la propia web oficial de Rasa en la
sección de Instalación.
En este caso en particular se ha decidido desarrollar el chatbot en una máquina
virtual con sistema operativo Ubuntu 20.04.1 LTS, que trae por defecto
instalada la versión 3.8 de Python. Esta versión de Python puede ocasionar
diversos problemas a la hora de instalar todas las dependencias de Rasa,
especialmente las de librerías como Tensorflow, por lo que se instalará una
versión alternativa de Python en la máquina con una versión 3.7.0. Los pasos
que seguir para realizar la instalación son los que se recogen a continuación.
x Actualizar la lista de paquetes e instalar los paquetes necesarios para
instalar Python a partir de su código fuente:
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
cd Python-3.7.0
./configure --enable-optimizations
Una vez se dispone de una versión compatible con las dependencias de Rasa, el
siguiente paso es crear el entorno virtual donde se instalará Rasa. Para ello se
hará uso del comando venv especificando la versión de Python que utilizará el
entorno, y una vez creado se activará para poder instalar en este entorno todo
lo necesario para emplear Rasa.
49
x Crear el entorno virtual (en este caso el nombre del entorno será venvrasa,
pero se podría emplear cualquier otro nombre):
source venvrasa/bin/activate
Una vez creado y activado el entorno, se instala Rasa y todas sus dependencias,
para ello se siguen los pasos siguientes.
x Actualizar la versión de pip:
Una vez instalado todo lo necesario para utilizar Rasa, se accede a la sección
Rasa Playground en la web oficial de Rasa, donde se puede crear un prototipo
sencillo de chatbot y descargar el proyecto.
En Rasa Playground se encuentra una interfaz muy intuitiva con cinco pasos a
seguir. Cada paso viene con una explicación del fichero que se va a modificar y
un editor de texto para modificarlo de modo que esta zona sirve para
familiarizarse con el framework además de servir de ayuda para generar la
estructura del proyecto.
En este caso simplemente se descargará el proyecto base que viene prediseñado
(fichero project.zip) y se explorarán los ficheros para explicar tanto la estructura
del proyecto como el contenido y uso de cada fichero en esta estructura.
Comenzando por la estructura o esqueleto del proyecto, encontramos la
distribución de ficheros que se puede ver en la Figura 26. En la carpeta principal
del proyecto encontramos los directorios actions, data y models junto con los
ficheros YALM config.yml, credentials.yml, domain.yml, endpoints.yml,
forms.yml y responses.yml.
50
Figura 26. Estructura del proyecto en Rasa
51
El siguiente fichero es el directorio data, que contiene la información básica de
entrenamiento para el chatbot. El primer archivo de esta carpeta es nlu.yml que
contiene los distintos intents o intenciones que manejará el chatbot. Estas
intenciones hacen referencia a lo que el usuario quiere hacer, por ejemplo, un
posible intent sería saludar. Siguiendo el formato YALM, dentro de estos intents
encontramos distintos ejemplos de frases que servirían para identificar la
intención del usuario, por ejemplo en el caso de saludar podríamos encontrar
“hola”. Los ejemplos son utilizados para entrenar al chatbot de modo que pueda
aprender a identificar la intención del usuario a partir de frases en lenguaje
natural y contestar en consecuencia. La estructura de este fichero es la que se
muestra en la Figura 28, y es importante mantener este formato ya que en caso
contrario el entrenamiento provocaría un error y no se podría generar
correctamente el modelo.
52
Figura 29. Ejemplo de fichero rules.yml
53
Además de estas carpetas, también encontramos en el directorio raíz del
proyecto varios ficheros de configuración, el primero de ellos config.yml. En este
archivo se encuentra el pipeline que se ejecutará para procesar el texto de
entrada, así como las políticas para realizar las predicciones de siguientes
acciones. En este caso, habría que modificar por ejemplo la sección de idioma
(language) que va a emplear el chatbot, añadir la política de fallback por si el
chatbot no entendiese al usuario poder pedirle que reformule su frase, y
aumentar el número máximo de historias que tendrá que aprender el chatbot.
Esto se hará en apartados posteriores siguiendo con la estructura que se
presenta en la Figura 31.
54
El fichero siguiente es domain.yml, el fichero donde se define el universo en el
que operará el chatbot. Aquí se encuentra en definitiva toda la información que
manejará el chatbot, desde los intents, los slots (variables del chatbot), las
respuestas que dará el chatbot, las acciones y los formularios, además de
algunos parámetros de configuración como el tiempo de expiración de una
sesión o la persistencia de datos entre sesiones. Las secciones de respuestas o
formularios, además, pueden no incluirse en este fichero con el fin de organizar
los datos ya que se dispone también de los ficheros forms.yml y responses.yml
(en esta misma carpeta) donde se pueden incluir esta información.
Y por último, encontramos el archivo endpoints.yml (ver Figura 34), que contiene
la información y configuración para conectar con otros servicios. En este fichero,
por ejemplo, se fija la dirección de acceso al servidor de acciones de Rasa que
se empleará para hacer uso de acciones personalizadas desarrolladas con el
SDK en Python. En posteriores secciones se explicará qué líneas es necesario
descomentar para establecer las conexiones que empleará el chatbot.
55
Una vez analizada la estructura y ficheros del proyecto, será necesario aplicar
los cambios oportunos para crear el chatbot que se plantea en este trabajo. Para
ello se modificará el nombre del proyecto y se irán aplicando los cambios
necesarios de manera justificada en los siguientes apartados.
El primer paso para la creación del chatbot para público infantil es diseñar el
flujo de las posibles conversaciones que vaya a tener el chatbot.
Puesto que se pretende crear una aplicación equivalente al experimento ya
publicado en Zooniverse (Clasificación por sonidos), se deberán incorporar las
preguntas de clasificación de dicho experimento en una conversación guiada
por lenguaje natural y además hacerlo de forma en que los niños que utilicen la
aplicación puedan entenderlas.
En este experimento encontrábamos tres preguntas con varias opciones de
respuesta para cada una tal y como se recoge a continuación.
Pregunta 1: ¿Cuánto dura el sonido?
x Menos de 1 segundo
x Entre 1 y 5 segundos
x Más de 9 segundos
Pregunta 2: ¿Se escucha al principio un sonido corto y luego un silencio o un
sonido menos intenso?
x Sí
x No
Pregunta 3: ¿Hay un sonido inicial con un tono diferente al resto?
x Sí
x No
Para adaptar estas preguntas así como el resto de la conversación a un público
infantil, en esta primera fase se cuenta con la supervisión de los miembros del
Aula de Astronomía de Fuenlabrada, que tienen una amplia experiencia en el
trato con niños y la realización de talleres divulgativos con estudiantes de todas
las edades. De acuerdo con este grupo, lo primero a tener en cuenta es que los
niños no tienen una noción del tiempo clara a nivel de segundos, por lo que la
primera pregunta no debería aludir a medidas tan precisas de tiempo, sino más
bien dar opciones de longitud como corto, mediano o largo. Además también
sugieren que se debería evitar la referencia a la intensidad del sonido en la
pregunta 2 o a los tonos en la tercera pregunta, ya que los niños podrían no
estar familiarizados con estos conceptos. El caso de la pregunta 3 se podría
expresar como: ¿Suena igual al principio y al final?
En definitiva, las preguntas deben ser muy simples y claras, sin hacer alusiones
a términos o conceptos complejos relacionados con temas físicos. Las preguntas
de la clasificación, por tanto, quedarían como se muestra a continuación.
Pregunta 1: ¿Cómo es el sonido? ¿Es corto, mediano, o largo?
x Corto
x Mediano
x Largo
56
Pregunta 2: ¿Se escucha al principio un sonido corto y luego un silencio?
x Sí
x No
Pregunta 3: ¿Suena igual al principio y al final?
x Sí
x No
Además de esto, el Aula de Fuenlabrada desaconseja utilizar gráficas como las
del experimento de Clasificación por imágenes de Zooniverse para acompañar
los sonidos, ya que sugieren que los alumnos de Primaria no entenderían las
gráficas e incluso podrían confundirles. Lo que sí recomienda es utilizar un
vídeo, no muy largo, como la explicación del experimento, para que los niños no
pierdan la atención al escuchar al chatbot. Además también recomiendan
utilizar un botón que permita acceder esta explicación cualquier momento, de
modo que no sea accesible solo por voz.
Partiendo de estas pautas generales, se diseña una conversación básica que
permitiría a los niños clasificar los sonidos de meteoros.
NIÑO/A: ¡Hola!
CHATBOT: ¡Hola! Bienvenido a Sonidos del Cielo, el proyecto de Ciencia
Ciudadana para la clasificación de meteoros a través de sus sonidos.
CHATBOT: ¿Necesitas que te explique en qué consiste el juego o quieres
empezar a jugar?
NIÑO/A: ¡Explícame el juego!
CHATBOT: ¡Vamos con la explicación! Cuando termine el vídeo puedes decir ¡A
jugar! Para empezar a clasificar meteoros.
CHATBOT: [Reproduce vídeo]
NIÑO/A: ¡A jugar!
CHATBOT: ¡Genial! Pasemos a la clasificación de meteoros.
CHATBOT: A continuación escucharás un sonido y te haré unas preguntas.
Pon atención y recuerda que puedes reproducir el sonido tantas veces como
necesites.
CHATBOT: [Reproduce sonido]
CHATBOT: ¿Cómo es el sonido? ¿Es corto, mediano o largo?
NIÑO/A: Es corto / Es mediano / Es largo
CHATBOT: Has respondido corto / Has respondido mediano / Has respondido
largo
CHATBOT: ¿Se escucha al principio un sonido corto y luego un silencio?
NIÑO/A: Sí / No
CHATBOT: Has respondido corto / Has respondido mediano / Has respondido
largo. Vamos con la última pregunta…
CHATBOT: ¿Suena igual al principio y al final?
NIÑO/A: Sí / No
57
CHATBOT: Has respondido corto / Has respondido mediano / Has respondido
largo. ¡Has clasificado este meteoro!
CHATBOT: ¿Quieres clasificar el siguiente sonido?
NIÑO/A: Sí / No
CHATBOT: (Sí) [Inicia nueva clasificación] / (No) ¡Gracias por ayudarnos a
clasificar meteoros! Si quieres volver a jugar o quieres conocer información
sobre el proyecto no dudes en pedírmelo.
NIÑO/A: ¡Adiós!
CHATBOT: ¡Hasta la próxima! Espero que lo hayas pasado bien.
58
3.3.3 Diseño del Conjunto de Datos para el Chatbot
59
saludar:
x hola
x holi
x hey
x qué hay
x qué pasa
x buenas
x buenos días
x buenas tardes
x buenas noches
x saludos
despedirse:
x adiós
x chao
x hasta luego
x hasta luego
x hasta la vista
x hasta pronto
x me voy
x nos vemos
negar:
x en absoluto
x nada
x negativo
x negación
x nanai
x no
x no quiero
x nop
afirmar:
x afirmativo
x claro
x chachi
x definitivamente
x guay
x por supuesto
x seguro
x sep
x sip
x si
x yep
x yes
x vale
x siguiente
clasificar:
x quiero jugar
x jugar
60
x me gustaría jugar
x quiero clasificar
x clasificar
x me gustaría clasificar
tutorial:
x explica
x explícame
x explica el juego
x explícame el juego
x quiero que me expliques
x quiero una explicación
x de que va el juego
x cómo se juega
corto:
x el sonido es corto
x es corto
x es un sonido corto
mediano:
x el sonido es mediano
x es mediano
x es normal
x es regular
x es un sonido mediano
x mediano
x medio
x normal
x regular
largo:
x el sonido es largo
x es largo
x es un sonido largo
x largo
preguntar_proyecto:
x ¿qué es sonidos del cielo?
x ¿para qué sirve sonidos del cielo?
x ¿qué hace sonidos del cielo?
x ¿qué significa sonidos del cielo?
x no sé qué es sonidos del cielo
x que es sonidos del cielo
x de qué va sonidos del cielo
x para que sirve sonidos del cielo
x información sobre sonidos del cielo
x información del proyecto
x información sobre el proyecto
x información de sonidos del cielo
61
preguntar_aclarar:
x ¿qué hay que hacer?
x ¿qué hay que hacer ahora?
x ¿qué tengo que hacer ahora?
x no sé qué hay que hacer
x no me he enterado
x qué tengo que hacer
x que ahoga ahora
preguntar_meteoro:
x ¿qué es un meteoro?
x ¿qué es un meteoroide?
x no sé qué es un meteoro
x no sé qué es un meteoroide
Tras haber generado las frases de ejemplo para cada intención, se crearán
también frases de respuesta, que serán las que contestará el chatbot cuando
sea necesario de acuerdo con la lógica que se establezca más adelante. En un
proyecto Rasa, estos datos se almacena en el fichero domain.yml, donde se
encuentra toda la información que define el funcionamiento del chatbot, en
concreto en el apartado responses, tal y como se ve en la Figura 36. En este
apartado se incluyen acciones utter (decir), que son acciones predefinidas para
que el chatbot conteste. Estas acciones deben comenzar necesariamente por
utter_ y a continuación se les da un nombre significativo que denote lo que se
va a decir con esa respuesta, por ejemplo utter_hola o utter_saludo para la
respuesta “Hola”.
62
Como se puede ver en la Figura 36, dentro de una respuesta determinada como
utter_adios se pueden incluir distintos mensajes. Estos mensajes se asociarán
con la acción en la que estén incluidos, de modo que cuando la lógica del chatbot
determine que se debe responder con una acción tipo utter_adios el chatbot
responderá con una de las frases que tenga asociadas. La elección de la
respuesta será aleatoria dentro de cada acción, de modo que el contenido de
cada frase no debe ser distinto en esencia. El propósito de añadir más frases es
simplemente aportar naturalidad a la conversación para que el chatbot no
conteste siempre de la misma forma y la interacción no resulte monótona para
el usuario, pero las frases de una misma acción utter siempre deberían expresar
lo mismo.
A continuación se recogen las frases de respuesta creadas para que el chatbot
conteste a los intents presentados anteriormente. Para mejorar su legibilidad no
se presentan en el formato de YML, sin embargo, como en el caso del fichero
nlu.yml, es importante que en el proyecto se respete su estructura, puesto que
si no es así no se podrá generar el modelo.
utter_adios:
x ¡Adiós! Gracias por tu tiempo.
x Espero que te hayas divertido, ¡vuelve pronto!
x Gracias por tu tiempo, ¡vuelve cuando quieras!
x Gracias por jugar a Sonidos del Cielo, ¡espero verte pronto!
x Gracias por jugar conmigo, ¡espero que te hayas divertido!
x ¡Hasta pronto! Vuelve cuando quieras.
x ¡Hasta la próxima! Espero que lo hayas pasado bien.
x Me lo he pasado genial contigo, ¡espero volver a verte pronto!
x Vuelve siempre que quieras, ¡nos vemos en el espacio de Sonidos del Cielo!
x Vuelve siempre que quieras, ¡te esperamos en Sonidos del Cielo!
utter_hola:
x ¡Bienvenido! Me alegra verte, esto es Sonidos del Cielo, el proyecto de
Ciencia Ciudadana para la clasificación de meteoros a partir de sus
sonidos.
x Bienvenido a Sonidos del Cielo, aquí podrás escuchar meteoros y ayudar
a los expertos en su clasificación.
x ¡Hola! Bienvenido a Sonidos del Cielo, el proyecto de Ciencia Ciudadana
para la clasificación de meteoros a través de sus sonidos.
x ¡Hola! Esto es Sonidos del Cielo, el proyecto de Ciencia Ciudadana para
la clasificación de meteoros a partir de sus sonidos.
x ¡Hola! Qué bien verte por el espacio, esto es Sonidos del Cielo, el proyecto
de Ciencia Ciudadana para la clasificación de meteoros a través de sus
sonidos.
x ¡Me alegra verte! Esto es Sonidos del Cielo, el proyecto de Ciencia
Ciudadana para la clasificación de meteoros a partir de sus sonidos.
x ¡Parece que tenemos visita! ¡Hola! Esto es Sonidos del Cielo, el proyecto
de Ciencia Ciudadana para la clasificación de meteoros a partir de sus
sonidos.
x ¿Qué tal? Bienvenido a Sonidos del Cielo, el proyecto de Ciencia
Ciudadana para la clasificación de meteoros a través de sus sonidos.
63
utter_menu:
x ¿Quieres que te explique el juego o prefieres empezar a jugar?
x ¿Necesitas que te explique en qué consiste el juego o quieres empezar a
jugar?
x ¿Qué te gustaría hacer, escuchar la explicación del juego o empezar a
jugar?
utter_tutorial:
x ¡Vamos con la explicación! Cuando termine el vídeo puede decir ¡A jugar!
para empezar a clasificar meteoros.
utter_clasificar:
x ¡Bien!¡Preparados para jugar!
x ¡Empezamos con la clasificación de meteoros!
x ¡Entonces estamos listos para clasificar meteoros!
x ¡Estupendo!¡Vamos a clasificar meteoros!
x ¡Genial! Pasemos a la clasificación de meteoros.
x ¡Genial!¡Vamos a jugar!
x Listos para la clasificación de meteoros.
x ¡Listos para jugar!
x ¡Muy bien! Empecemos con la clasificación de meteoros.
x Vamos con la clasificación de meteoros.
x Comencemos con la clasificación de meteoros.
utter_clasificar_instrucciones:
x Espero que estés preparado para clasificar meteoros. A continuación
oirás un sonido te haré unas preguntas. Puedes reproducir el sonido el
meteoro tantas veces como necesites.
x A continuación escucharás un sonido y te haré unas preguntas. Pon
atención, y recuerda que puedes reproducir el sonido tantas veces como
necesites.
utter_pregunta1:
x ¿Cómo es el sonido? ¿Es corto, mediano o largo?
x ¿El sonido que has escuchado es corto, mediano, o largo?
x ¿El sonido es corto, mediano, o largo?
utter_feedback_respuesta1:
x Has contestado {duracion}
x Tu respuesta ha sido sonido {duracion}
utter_pregunta2:
x ¿Se escucha al principio un sonido corto y luego un silencio?
utter_feedback_respuesta2:
x Has respondido {respuesta2}. Vamos con la última pregunta...
x Has respondido {respuesta2}. Solo nos queda una pregunta.
x Has respondido {respuesta2}. Seguimos con la última pregunta.
utter_pregunta3:
x ¿Suena igual al principio y al final?
64
x ¿El sonido es igual al principio y al final?
utter_feedback_respuesta3:
x Has respondido {respuesta3}. ¡Has completado esta clasificación!
x Has respondido {respuesta3}. ¡Has clasificado este sonido!
x Has respondido {respuesta3}. ¡Has clasificado este meteoro!
x Tu respuesta ha sido {respuesta3}. ¡Has clasificado un sonido!
x Tu respuesta ha sido {respuesta3}. ¡Hemos terminado con este sonido!
x Tu respuesta ha sido {respuesta3}. ¡Vamos a enviar tu clasificación!
x Has contestado {respuesta3}. ¡Gracias por clasificar este sonido conmigo!
x Has contestado {respuesta3}. ¡Hemos completado una clasificación!
x Has contestado {respuesta3}. ¡Has clasificado un sonido!
utter_seguir_clasificando:
x ¿Quieres clasificar el siguiente sonido?
x ¿Quieres clasificar el siguiente meteoro?
x ¿Quieres seguir con la clasificación?
x ¿Quieres seguir clasificando?
x ¿Quieres que pasemos al siguiente sonido?
utter_siguiente_clasificacion:
x Vamos con el siguiente sonido
x Vamos con el siguiente meteoro
x Atento al siguiente sonido
x Presta atención al siguiente sonido
x Escucha el siguiente sonido
utter_parar_clasificacion:
x ¡Gracias por ayudarnos a clasificar meteoros!, si quieres volver a jugar o
conocer información sobre el proyecto no dudes en pedírmelo
x ¡Gracias por jugar conmigo!, si quieres volver a jugar o conocer
información sobre el proyecto puedes pedírmelo
x Espero que te hayas divertido, si quieres volver a jugar o conocer
información sobre el proyecto no dudes en pedírmelo
x Gracias por tu tiempo, si quieres volver a jugar o conocer información
sobre el proyecto no dudes en pedírmelo
utter_definicion_meteoro:
x Se llama meteoroide a los cuerpos menores o rocas que viaja por el
espacio, cuando entran en la atmósfera se les llama meteoros y cuando
alcanzan la superficie de la Tierra se les llama meteoritos. Popularmente
los meteoros son conocidos como estrellas fugaces y están formados por
una roca y una estela.
utter_sobre_proyecto:
x Sonidos del Cielo es un proyecto de ciencia ciudadana para que cualquier
persona pueda ayudar a los expertos a clasificar meteoros. ¡Puedes
encontrar más información sobre el proyecto en la página web del
proyecto!
utter_que_hacer:
65
x Si dices "a jugar" podremos empezar con la clasificación. Se reproducirá
un sonido y te haré tres preguntas. ¡Cuantas más clasificaciones hagas
más puntos obtendrás!
x Cuando digas "a jugar" empezará el juego. Se reproducirá un sonido y te
haré tres preguntas. ¡Cuantas más clasificaciones completes más puntos
obtendrás!
utter_reformular:
x Perdona, no te he entendido... ¿podrías repetirlo de otra manera para que
pueda entenderte?
x Creo que no te he entendido, ¿podrías repetirlo de otra forma?
x Vaya, no he entendido eso, ¿podrías repetirlo de otra manera para que
pueda entenderte?
x No te he entendido, por favor ¿podrías repetirlo de otra forma?
Estos serían los datos textuales necesarios para que el chatbot fuese capaz de
tener una conversación (entender las intenciones y responder). En alguno de
estos ejemplos se usa la expresión {nombre de variable} de YML para indicar que
en ese lugar iría el valor de la variable del chatbot, lo que significa que además
de estas frases será necesario recoger algunos valores en variables. Se hablará
de estas variables y del resto de acciones empleadas por el chatbot en el
siguiente apartado.
Una vez se dispone de los ejemplos para los intents con los que trabajará el NLU
(Natural Language Understanding) de Rasa, y las respuestas que empleará el
chatbot para contestar, el siguiente paso es definir los pasos que se deberán
seguir en las conversaciones. Para poder crear esta lógica de las conversaciones,
se crearán historias (stories), reglas (rules), acciones personalizadas (actions) y
variables (slots).
Comenzando por los componentes más pequeños, primero será necesario definir
qué variables o slots va a emplear internamente el chatbot para almacenar
información. La declaración de variables se realiza en el fichero domain.yml
dentro del apartado slots, tal y como se ve en la Figura 37. En él se incluye el
nombre de la variable y su tipo (type), que en este caso siempre será texto, y
además se puede establecer si la variable en cuestión afectará al flujo de la
conversación (influence_conversation).
66
Figura 37. Fichero domain.yml (slots)
68
Figura 38. Fichero actions.py (función action_send_classification)
Una vez implementadas estas acciones, el siguiente paso es crear las historias
(stories). Las historias deberán ser lo más modulares posibles, por ejemplo, se
puede crear una historia saludo en la que el usuario saluda y el chatbot
responde con un saludo y las opciones que puede escoger el usuario para
comenzar a clasificar meteoros. Para favorecer esta modularidad al máximo, en
las historias se utilizarán checkpoints que servirán como puntos de bifurcación
en el flujo de diálogo para evitar repetir fragmentos enteros de conversación. A
efectos de ejecución, cuando una historia acaba con un checkpoint y otra
empieza con ese mismo checkpoint, el comportamiento es igual que si se tratase
de una única historia. A continuación se recogen las historias necesarias para
que el chatbot funcione tal y como se diseñó en apartados anteriores.
69
x saludo: de acuerdo con esta historia, si el usuario saluda, el chatbot
responderá con un saludo y seguidamente le dirá que opciones tiene para
empezar a usar la aplicación (escuchar la explicación o clasificar sonidos
directamente).
story: saludo
intent: saludar
action: utter_hola
action: utter_menu
story: explicación
intent: tutorial
action: utter_tutorial
action: action_play_video
70
empezar a jugar o clasificar, entonces el chatbot deberá introducir la
clasificación, explicar las instrucciones, pedir un sonido de detección y
hacer las preguntas. Por cada pregunta se esperará una respuesta, y una
vez responda el usuario, el chatbot guardará el valor de la respuesta en
las variables o slots correspondientes. Una vez guardada la respuesta a
la pregunta, el chatbot dará retroalimentación al usuario sobre su
respuesta y le formulará la siguiente pregunta. Esto ocurrirá así en las
tres preguntas, pero tras contestar la tercera pregunta una vez se dé
retroalimentación sobre la respuesta, además se enviarán las respuestas
a la API y se preguntará si se desea seguir clasificando meteoros.
story: clasificacion
intent: clasificar
action: utter_clasificar
action: utter_clasificar_instrucciones
ifi
action: action_get_sample
action: utter_pregunta1
checkpoint: check_pregunta1
h k
action:
ctio action:
ction action:
tion
action_set_r1_corto action_set_r1_mediano action_set_r1_largo
slot_was_set:
was slot_was_set:
was slot_was_set:
was
- duracion: “corto” - duracion: “mediano” - duracion: “largo”
action:
tion action:
ction action:
tion
utter_feedback_respuesta1 utter_feedback_respuesta2 utter_feedback_respuesta3
71
action: action: action:
utter_pregunta2 utter_pregunta2 utter_pregunta2
checkpoint: check_pregunta2
h k 2
intent: afirmar
f iintent: negar
action:
ction action:
tion
action_set_r2_si action_set_r2_no
slot_was_set:
was slot_was_set:
was
- respuesta2: “Sí” - respuesta2: “No”
action:
ction action:
tion
utter_feedback_respuesta2 utter_feedback_respuesta2
action:
ction action:
tion
utter_pregunta3 utter_pregunta3
checkpoint:
eckpoint: che
c
check_pregunta3
eck pregunta
intent: afirmar
fi iintent: negar
action:
ction action:
ction
action_set_r3_si action_set_r3_no
slot_was_set:
was slot_was_set:
was
- respuesta3: “Sí” - respuesta3: “No”
action:
ction action:
ction
utter_feedback_respuesta3 utter_feedback_respuesta3
action:
ction action:
ction
action_send_classification action_send_classification
action:
ction action:
ction
utter_seguir_clasificando utter_seguir_clasificando
checkpoint: check_siguiente
72
intent: afirmar intent: negar
action:
ction action:
ction
utter_siguiente_clasificacion utter_parar_clasificacion
action:
ction
action_get_sample
action:
ction
utter_pregunta1
intent: preguntar_proyecto
action: utter_sobre_proyecto
intent: preguntar_meteoro
73
action: utter_definicion_meteoro
x que hay que hacer: si el usuario no sabe que hay que hacer en la
aplicación, puede preguntarle al chatbot y este explicará qué debe hacer
para comenzar la clasificación y en qué consiste esta clasificación.
intent: preguntar_aclarar
action: utter_que_hacer
story: despedida
intent: despedirse
action: utter_adios
74
la predicción de acciones no es segura. Por ejemplo, si se predice una acción
utter_adios con un 0.4 de precisión pero el umbral está fijado en un 0.5, se
utilizará el nlu_fallback. En la siguiente figura se fija la configuración de este
clasificador.
Figura 46. Configuración del pipeline en config.yml del umbral para el intent
fallback (línea 16 y 17)
Una vez activado el intent nlu_fallback, el chatbot tendrá que responder con una
frase que indique al usuario que debe reformular su frase para poder entenderle
mejor, para ello, será necesario definir una respuesta (si no se ha hecho ya) en
la sección de respuestas del fichero domain.yml, o directamente en el fichero
responses.yml. Esta respuesta se añade dentro de la sección responses, como
el resto de las respuestas utter, por tanto también se podrán añadir varias
alternativas para que el chatbot responda con mayor naturalidad cuando sea
necesario que el usuario repita su última frase (ver Figura 47).
Por último, se debe añadir una regla que establezca estos pasos ya
mencionados: primero se detecta el intent nlu_fallback y seguidamente el
chatbot responde con su petición de reformular la última frase. En este caso, la
estructura es similar a la de las historias.
x Pedir que repita la ultima frase: si no se detecta una intención con la
suficiente precisión de acuerdo con el umbral, se activará el intent
nlu_fallback y el chatbot pedirá al usuario que reformule su última frase
para poder entenderla.
75
rule: pedir que repita la ultima frase
intent: nlu_fallback
action: utter_reformular
Una vez configurado el chatbot, se podrá entrenar al agente. Para ello, una vez
esté activado el entorno virtual de Rasa, se ejecutará el comando train tal y como
se muestra en los siguientes pasos. Tras el entrenamiento, que llevará al menos
una hora, se generará un fichero tar.gz en la carpeta modelos, que será el que
se utilice en el siguiente apartado para la ejecución del servidor principal de
Rasa. Si durante la ejecución del comando train se produce un error, será
necesario revisar el mensaje de error y corregir el fichero incorrecto.
x Activar el entorno virtual de Rasa (desde el directorio del entorno):
source venvrasa/bin/actívate
77
Figura 51. Ejecución del comando para arrancar el servidor de acciones
Figura 52. Ejecución del comando para arrancar el servidor principal de Rasa
Una vez arrancados ambos servidores se pasa a realizar diversas pruebas para
comprobar que el flujo de conversación es correcto y que el chatbot responde
como se esperaba. Para hacer estas pruebas se utiliza la aplicación Postman,
que permite hacer llamadas a API introduciendo la dirección URL de la API y un
cuerpo de texto, tal y como se hará desde la aplicación web. Como se puede ver
en la siguiente figura, se realizarán llamadas POST a la URL
http://localhost:5005/webhooks/rest/webhook y en el cuerpo de la llamada se
añadirá un identificador de usuario (sender) junto con el mensaje de texto
(message), que será la entrada que reciba el chatbot. Si la llamada funciona
correctamente, se recibirá una respuesta 200 OK con un cuerpo de texto en el
que se encuentren los distintos mensajes que haya respondido el chatbot con
78
un identificador de usuario (recipient_id) y el texto de la respuesta (text). En el
Anexo se incluyen todas las llamadas de comprobación del flujo realizadas de
este modo. En la Figura 53 se muestra un ejemplo de mensaje enviado desde
Postman, en concreto se inicia la conversación con un mensaje “hola”, que
correspondería al intent saludar. El resto de las llamadas de comprobación del
flujo se pueden ver en el Anexo de esta memoria.
79
Figura 54. Diseño de bajo nivel de la interfaz web para ordenador
80
por el contrario está procesando alguna petición internamente. A nivel
lingüístico, este indicador serviría como una especie de “semáforo” para
indicar los turnos de la conversación (cuando se escucha y cuando se
habla).
x Botón para repetir el último sonido: este botón se encuentra en la parte
superior derecha de la pantalla, bajo el indicador de estado del micrófono.
Este botón permite volver a reproducir el sonido que se está clasificando,
ya que es posible que el usuario necesite escucharlo varias veces para
poder contestar a las preguntas de la clasificación. Este botón hace
posible que se reproduzca el sonido en cualquier momento y sin alterar
el flujo del diálogo.
x Botón para reproducir el vídeo explicativo: este botón se encuentra en
la parte superior derecha de la pantalla, bajo el botón para repetir el
último sonido. Este botón permite acceder al vídeo con la explicación del
experimento en cualquier momento. Este vídeo es el mismo que se
reproducirá cuando el usuario le pida al chatbot por voz que le explique
el proyecto, sin embargo, este botón ofrece un acceso más intuitivo en el
contexto de las aplicaciones web, en caso de que el usuario esté
realmente confundido.
x Avatar del chatbot: se encuentra en la parte central izquierda de la
interfaz. Se trata de un dibujo con animación que represente al chatbot
con el que hablará el usuario. El objetivo de este avatar es poder servir
de imagen o “rostro” para el chatbot, para que la interacción con el
usuario resulte más natural y similar a una conversación entre dos
personas.
x Pegatinas: se encuentran distribuidas por la interfaz. Se tratan de
imágenes o dibujos con animaciones que sirven para decorar la
aplicación. Estas pegatinas serán premios que conseguirán los usuarios
cada vez que realicen una cantidad determinada de clasificaciones, de
modo que cada vez la interfaz tendrá más imágenes o pegatinas
decorativas. Son elementos de gamificación que servirán como
recompensa y para motivar a los niños a seguir clasificando sonidos.
x Animaciones: se encuentran distribuidas por la interfaz. Se tratan de
imágenes o dibujos con animaciones que sirven para decorar la
aplicación. En este caso no es necesario que los usuarios realicen
clasificaciones para ganarlas, estas animaciones estarán siempre en la
interfaz para crear una interfaz dinámica y atractiva para los niños a
través de formas y colores que recuerden a elementos del espacio.
81
que dificultaría la correcta visualización de los distintos componentes. La
redistribución de pegatinas, por otro lado, ayudaría a crear mayor orden en el
pequeño espacio del que se dispone y evitaría posibles solapes también entre
varias pegatinas. En general, el objetivo de los cambios es que la interfaz siga
siendo clara e intuitiva y no abrume al usuario.
82
3.4.2 Implementación de la primera versión de la interfaz web de la
aplicación
83
El resultado de esta implementación es el que se muestra en la Figura 58.
Tras haber creado una primera versión de la página web, con sus principales
elementos gráficos, el siguiente paso consiste en la implementación de los
servicios que permitirán a los usuarios interactuar con la aplicación.
En este caso, se implementan primero los servicios de reconocimiento y síntesis
de voz para comprobar si se recupera correctamente la entrada por voz y si el
sistema es capaz de repetir esta entrada con la voz sintetizada.
Para ello, se crean dos servicios distintos dentro del directorio services con los
comandos específicos de Angular:
x Creación del servicio para el reconocimiento de voz:
ng generate service services/voice-recognition
Tras la ejecución de estos comandos, se generan dos ficheros para cada servicio,
uno con la extensión .service.spec.ts y otro con la extensión .service.ts. En este
caso se utilizarán sólo los ficheros .service.ts en los que se deberá incluir la
implementación de cada servicio.
En primer lugar se implementa el servicio de reconocimiento de voz, que
permitirá transcribir la entrada por voz que reciba la aplicación. Para ello, se
crea una instancia de webkitSpeechRecognition, de la Web Speech API, que
cuenta con varios atributos modificables como el idioma. Dentro de la
inicialización del servicio además de configurar estos atributos se crean también
varios listeners que se activarán al recibir eventos del tipo result y end,
respectivamente. El listener result permitirá actualizar la variable en la que se
84
almacenarán las detecciones de habla más recientes, mientras que el listener
end permitirá detener el servicio de reconocimiento para que no se solapen
varias detecciones y se puedan llevar a cabo turnos de palabra naturales.
85
Figura 60. Servicio de reconocimiento de voz (funciones)
87
aplicación y se almacena en el servicio de manera que se envía en cada
llamada POST, de este modo permite que la API de Rasa pueda manejar
múltiples usuarios de forma concurrente sin mezclar flujos de
conversación.
x sendToBot(msg): realiza una llamada POST a la API de Rasa. En el
cuerpo de la petición se incluye el identificador único universal como
atributo sender y el mensaje que se ha recibido como parámetro de
entrada como atributo message. Esta función devuelve la respuesta de
la llamada POST.
Para poner a prueba este servicio, se crea la función que gestionará el flujo de
la conversación en la aplicación (ver Figura 64). Esta función se encuentra en
el fichero app.component.ts, y hace uso de todos los servicios creados y algunas
funciones auxiliares que se explican a continuación. Cada vez que se detecta
una nueva entrada de voz, se llama a esta función principal processInput y se
pasa como parámetro el texto con la transcripción de esta esta entrada. Esta
función utiliza el servicio que conecta con el chatbot para realizar una llamada
POST con este nuevo mensaje, y una vez obtiene una respuesta del servicio,
ejecuta distintas acciones en función del contenido del cuerpo de la respuesta.
Si esta respuesta solo incluye texto, se utiliza el servicio de síntesis de voz para
transmitir el mensaje; si incluye además el sonido de un meteoro (su URL),
también se reproduce el sonido; si incluye un activador de nueva clasificación,
se incrementa el contador de clasificaciones; y si incluye un activador de vídeo,
se reproduce el vídeo tutorial de la aplicación. Además de esto, una vez se
realizan las acciones pertinentes para producir la respuesta del chatbot, vuelve
a activar el servicio de reconocimiento de voz, que se desactiva automáticamente
88
cada vez que se detecta una entrada nueva para evitar solapes en el flujo de la
conversación.
Las funciones que se incluyen en este mismo fichero, y que guardan una
estrecha relación con esta función principal son las siguientes:
x accessApp(): es la función a la que se llama al hacer clic en el
componente de inicio. En esta función se encuentra la suscripción a los
cambios del servicio de reconocimiento, de esta forma, cuando se detecta
una nueva entrada de voz, se llama a la función processInput.
x startVoiceRecognition(): función auxiliar que llama a la función start
del servicio de reconocimiento de voz para activarlo.
x stopVoiceRecognition(): función auxiliar que llama a la función stop del
servicio de reconocimiento de voz para desactivarlo.
x speak(message): esta función recibe como parámetro de entrada el
mensaje que se quiere emitir con voz sintetizada. La función llama a la
función speak del servicio de síntesis de voz pasándole el mensaje que se
quiere transmitir.
x playSound(url): esta función recibe como parámetro de entrada la URL
del sonido de meteoro que se quiere reproducir. La función devuelve una
promesa que se resuelve cuando se ha terminado de reproducir el sonido,
de esta manera se evita el solape del audio con la síntesis de voz o con la
escucha de un nuevo mensaje de usuario.
x playVideo(): esta función llama a la función auxiliar reproduceVideo, que
devuelve una promesa y se resuelve cuando el vídeo se ha terminado de
reproducir. Una vez se resuelve esta promesa, la función playVideo
desactiva u oculta el componente en el que se visualiza el vídeo.
x reproduceVideo(): esta función hace visible el componente en el que se
reproducirá el vídeo y una vez está visible reproduce dicho vídeo. Cuando
termina la reproducción se resuelve la promesa que devuelve esta función.
x stopVideo(): desactiva el componente en el que se reproduce el vídeo
tutorial. Esta función se ejecuta al pulsar la cruz que se encuentra en el
componente donde se reproduce el vídeo.
89
x playLastMeteorSound(): permite reproducir el sonido que se está
clasificando pulsando uno de los botones de la interfaz. El sonido se
almacena cuando se recibe un nuevo sonido en la función processInput
de modo que esta función puede volver a reproducirlo en cualquier
momento.
Todas estas funciones, junto con los servicios creados, permiten manejar la
conversación con el chatbot desde la interfaz web, por lo que en esta fase de
desarrollo la aplicación ya sería funcional.
Cabe añadir también, que además de las funciones, tal y como se menciona en
los puntos anteriores, también fue necesario incorporar un nuevo componente
para reproducir el vídeo tutorial que se activa desde la propia conversación con
el chatbot de Rasa cuando el usuario pide una explicación (ver Figura 65). En
este vídeo se explica en qué consiste el proyecto y, en concreto, qué hay que
hacer en la aplicación.
90
continuación, se escucha el sonido producido por el eco de la estela durante
unos segundos.
En la segunda pregunta tendrás que fijarte si al principio hay un sonido corto
y luego un silencio <reproducción del sonido con Doppler de ejemplo> ¿Lo
has notado?
Por último, en la tercera pregunta tendrás que fijarte en si suena igual al
principio y al final, ya que el eco del meteoroide tiene un tono más grave o
más agudo que el sonido de la estela <reproducción del sonido con Doppler
de ejemplo> ¿Te has fijado?
¡Ya estás listo para jugar a Sonidos del Cielo! Gracias por ayudarnos a
clasificar meteoros, esperamos que lo pases bien.”
91
Figura 67. Interfaz de la aplicación (versión tableta)
92
En concreto, para la versión móvil fue necesario añadir una Media Query
especificando una anchura mínima de la pantalla de 768 píxeles. En este caso
se optó por hacer que los valores por defecto fuesen los correspondientes a
dispositivos móvil ya que es el dispositivo que más personas tienen disponible
a lo largo del día. Por tanto, dentro de la Media Query se incluyó únicamente la
modificación de tamaños o posiciones de diversos elementos para mejorar su
visualización en dispositivos grandes como tabletas o equipos de escritorio.
Además, dado el tamaño reducido de estos dispositivos, se decidió también no
mostrar el elemento de barra de transcripción, puesto que dificultaría la visión
del resto de componentes y no permitiría una correcta legibilidad. Para realizar
pruebas se utilizó de nuevo el Inspector de Google Chrome seleccionando esta
vez como dispositivo el móvil Pixel 2 de 5 pulgadas (411x731).
93
Figura 70. Interfaz de la aplicación (versión móvil)
94
3.4.6 Elementos de Gamificación en la Aplicación
95
Figura 74. Interfaz con recompensas (versión tableta)
96
Gracias a la capacidad de Angular para mostrar u ocultar elementos div de la
aplicación de manera condicional, estas pegatinas aparecen en la interfaz de
manera inmediata cuando el contador alcanza uno de los valores ya
mencionados. Las correspondencias entre valores del contador y pegatinas son
las que se recogen a continuación:
x 1 clasificación: Luna
x 5 clasificaciones: Marte
x 10 clasificaciones: Júpiter
x 15 clasificaciones: Neptuno
x 20 clasificaciones: estrella
97
3.5 Despliegue
En este caso también se guardan los cambios y se suben a Github para tener
en el repositorio la versión más reciente con el fichero Dockerfile, tras ello, se
clona el proyecto en el servidor. Una vez se haya clonado el proyecto en el
servidor se ejecutan varios comandos:
x Crea la imagen del contenedor:
docker build -t angular-app .
99
3.6 Diseño e implementación de mejoras
101
4 Resultados y conclusiones
4.1 Resultados
102
Figura 81. Guía de usuario de la aplicación para público infantil
Como se puede ver en la Figura 81, se incluyen siete apartados con la siguiente
información:
x Descripción general:
El chatbot para público infantil de Sonidos del Cielo pretende fomentar
la partición del público más joven en el experimento de ciencia ciudadana
para la clasificación de meteoros a través de sus sonidos.
x Compatibilidad:
Puesto que la aplicación hace uso de un servicio de Google a través del
navegador para poder reconocer y sintetizar la voz, se deberá acceder a
la aplicación desde los siguientes navegadores:
x Interfaz:
103
x Empezar a jugar:
Una vez se pulse el botón de Inicio ("Pulsa para comenzar") se puede
comenzar a hablar con el chatbot. El chatbot no responderá si no se ha
pulsado el botón anteriormente.
104
expresiones similares. Si el chatbot no entiende alguna expresión, pedirá
que se reformule la última frase.
x Clasificación:
Tras reproducir un sonido de meteoro, el chatbot realizará tres preguntas
para clasificar dicho meteoro. Las preguntas son las mismas para cada
sonido:
1. ¿Cómo es el sonido? ¿Es corto, medio o largo?
2. ¿Se escucha al principio un sonido corto y luego un silencio?
3. ¿Suena igual al principio y al final?
x Recompensas:
Cuando se completen 1, 5, 10, 15 y 20 clasificaciones, el chatbot añadirá
una nueva pegatina animada al espacio de Sonidos del Cielo como
recompensa.
x Entidades colaboradoras:
105
Puesto que todo el material presentado se ha preparado con suficiente
antelación, la aplicación se está utilizando desde abril en el Aula de Astronomía
de Fuenlabrada con grupos de niños, tal y como se había previsto en la
propuesta del proyecto. Con el fin de conocer las opiniones de los niños sobre
esta aplicación, el grupo de Sonidos del Cielo ha creado un formulario (Valora
nuestro chatbot) en el que se recoge información acerca del curso escolar en el
que se encuentran los niños, las impresiones sobre la dificultad del experimento,
cómo de divertida resulta la aplicación y también sobre la voluntad de los niños
de volver a utilizar la aplicación desde sus casas.
Figura 82. Fotografía del taller de Sonidos del Cielo en el Aula de Astronomía
de Fuenlabrada (clasificación)
Figura 83. Fotografía del taller de Sonidos del Cielo en el Aula de Astronomía
de Fuenlabrada (taller)
106
Hasta la fecha, los resultados del formulario muestran que la mayoría de los
usuarios que ya han participado en los talleres del Aula de Astronomía se
encuentran en tercero de primaria (47,4% de los niños encuestados), quinto de
primaria (38,6%) o en cuarto de primaria (14%).
107
Figura 86. Tercera pregunta del formulario “Valora nuestro chatbot”
Finalmente, un 75,4% de los niños respondieron que les gustaría seguir jugando
desde su casa con la aplicación, y solo un 24,6% respondió que no les gustaría
seguir jugando.
Los resultados de este formulario muestran una opinión general positiva sobre
la aplicación desarrollada en este trabajo, por lo que se espera que los niños
puedan disfrutar del experimento de Sonidos del Cielo a través de ella.
4.2 Conclusiones
108
necesario crear una aplicación totalmente funcional únicamente a partir de una
serie de especificaciones y objetivos.
De entre todas las materias estudiadas en este grado, este trabajo ha guardado
especial relación con Ingeniería del Software, Interacción Persona-Ordenador,
Inteligencia Artificial, Sistemas Orientados a Servicios, y Diseño de Aplicaciones
Web. Para llevar a cabo este proyecto fue necesario aplicar en gran medida
conocimientos de Ingeniería Software ya que se tuvo que recoger una serie de
requisitos o directrices en distintas reuniones con los colaboradores de Sonidos
del Cielo, establecer un plan de trabajo, realizar un seguimiento del proyecto, y
aplicar una metodología Agile con reuniones semanales, incorporación de
cambios y presentaciones continuas de los incrementos del trabajo. También se
tuvieron que aplicar conocimientos sobre Interacción Persona-Ordenador, ya
que uno de los puntos clave del proyecto es la accesibilidad orientada a sectores
de la población muy concretos y con necesidades particulares, como lo son los
niños o las personas con discapacidad visual. Además, para potenciar al
máximo la accesibilidad de la aplicación se diseñó, implementó e integró un
agente inteligente capaz de manejar la interacción a través en lenguaje natural,
por lo que fue necesario aplicar conocimientos sobre Inteligencia Artificial, en
especial sobre el procesamiento del lenguaje natural y la creación de agentes
inteligentes. Para la creación de este agente, fue también necesario poner en
práctica los conocimientos aprendidos en Sistemas Orientados a Servicios, dado
que en él se hace uso de la API de meteoros, que permite acceder a los datos de
las detecciones y guardar los de las clasificaciones realizadas, y dado que el
propio agente se utiliza como una API desde la web del proyecto. Finalmente,
fue necesario aplicar las nociones aprendidas en Diseño de Aplicaciones Web
para crear una aplicación web que diese soporte a todo el experimento e
integrase todos los servicios de procesamiento del lenguaje.
Otro de los aspectos más destacables de este trabajo, además del tecnológico,
es su posible impacto y repercusión a nivel social. Sonidos del Cielo es un
proyecto de Ciencia Ciudadana que pretende hacer la Astronomía más accesible
a los niños y a personas con discapacidad visual, por lo que la motivación social
y divulgativa ha sido un pilar clave en el desarrollo. Personalmente, ha resultado
muy gratificante poder contribuir en un proyecto donde el factor humano ha
sido tan importante, ya el trabajo realizado podrá hacer posible que los más
pequeños se familiaricen con la astronomía y que se despierte en ellos la
curiosidad propia de un científico. Ha sido un privilegio poder trabajar con el
Citiezen Science Lab que promueve estos valores tan importantes de conciencia
109
social y trabaja para que personas de todo tipo puedan acceder a la ciencia y
puedan participar en experimentos junto con auténticos profesionales.
El hecho de haber trabajado con este grupo, con las entidades colaboradoras, y
con otros estudiantes, también ha sido una experiencia muy valiosa ya que el
intercambio de ideas y perspectivas multidisciplinales ha hecho que adquiera
nuevos conocimientos más allá de los que conciernen a la informática. También
ha hecho posible que me familiarice con grupos de trabajo más diversos, que
aprenda a coordinarme con otros compañeros, a ayudarles o a pedirles ayuda,
y que aprenda a trabajar con componentes de un sistema que no haya
desarrollado yo misma, por lo que me ha ayudado a crecer a nivel personal.
Como resultado de este trabajo y del trabajo realizado por el resto del equipo de
Sonidos del Cielo, la aplicación para niños de Sonidos del Cielo se pudo lanzar
en abril, por lo que actualmente ya se ha podido utilizar en el Aula de
Astronomía de Fuenlabrada con grupos de niños, tal y como se había previsto.
Además, el 20 de mayo se pudo presentar en el Congreso Internacional de
Ciencia Ciudadana como uno de los nuevos proyectos de Ciencia Ciudadana
que promueven la inclusión, igualdad y accesibilidad.
Con vistas a futuro, puesto que el trabajo forma parte de un proyecto mayor
financiado públicamente, la versión que se ha descrito en esta memoria podrá
ser modificada si es necesario por parte del equipo de desarrollo que continúe
trabajando en Sonidos del Cielo. Además de las mejoras que este equipo
considere necesarias, algunas ideas de trabajo futuro podrían incluir la
traducción de la aplicación web y del chatbot a otros idiomas para poder hacer
accesible el experimento a más personas, o la integración del chatbot en canales
de mensajería instantánea como pudieran ser Facebook Messenger o Telegram,
de modo que el experimento estuviese disponible en distintas plataformas.
110
5 Análisis de Impacto
Como ya se ha adelantado en capítulos anteriores, este Trabajo Fin de Grado
forma parte del proyecto Sonidos del Cielo, un proyecto de Ciencia Ciudadana
que pretende hacer accesible la astronomía a niños y personas con discapacidad
visual a través de un proyecto de clasificación de meteoros a partir de sus
sonidos. La intención básica de este proyecto es, por tanto, producir un impacto
positivo a nivel social y cultural, logrando acercar la ciencia a aquellos grupos
de la población que por determinadas limitaciones no cuentan con acceso a
información o a experimentos de esta área.
El impacto personal está relacionado con aprender a usar las habilidades que
ya se tienen. Este proyecto tiene un potencial impacto personal tanto para las
personas que hagan uso de la aplicación creada como para los desarrolladores
y colaboradores que han participado en el proyecto.
El potencial impacto social del trabajo está relacionado con la contribución del
proyecto dentro de la Ciencia Ciudadana así como con la especial atención que
se ha dedicado a varios sectores de la población con limitaciones para acceder
a distintos recursos.
Por una parte la Ciencia Ciudadana pretende implicar o involucrar a los
ciudadanos en la investigación científica, sin importar su nivel de formación,
edad, género, raza o cualquier otra característica personal o social. A menudo,
a pesar de que no se pretende discriminar a grupos sociales, no se tienen en
cuenta las necesidades especiales de algunos de ellos, y esto puede suponer
una enorme barrera de acceso a las oportunidades de colaboración. Para evitar
estas diferencias en oportunidades, en este proyecto se ha puesto especial
atención a dos sectores de la población que pueden encontrar obstáculos
cuando se trata de acceder a experimentos de Ciencia Ciudadana: los niños y
las personas con discapacidad visual. Para ello, se ha creado un sistema que
permite la interacción por voz, de manera que los niños que no sepan leer o
escribir, así como las personas con problemas visuales, también puedan
participar sin ser discriminados y sin poner obstáculos a su colaboración.
Este impacto social está vinculado al Objetivo 10: Reducción de las
Desigualdades dentro de la lista de Objetivos de Desarrollo Sostenible. En
concreto, el proyecto se alinea con la meta 10.2 en la que se establece que de
aquí a 2030 se deberá potenciar y promover la inclusión social, económica y
política de todas las personas independientemente de su edad, sexo,
discapacidad, raza, etnia, origen, religión o situación económica u otra
condición.
112
Esto guarda una estrecha relación con el Objetivo 9 de la lista de Objetivos de
Desarrollo Sostenible, con el que pretende construir infraestructuras
resilientes, promover la industrialización sostenible y fomentar la
innovación, y que en concreto plantea metas como la 9.5 para fomentar la
innovación y aumentar el número de personas que trabajan en investigación y
desarrollo y los gastos de los sectores público y privado en investigación y
desarrollo.
Este proyecto deja ver la necesidad de este incremento de gastos públicos y
privados en innovación que pueda hacer posible crear más aplicaciones de
beneficio público, que ayuden a la sociedad y promuevan la cultura, ya que sin
este tipo de inversión, el proyecto no se habría llevado a cabo de manera exitosa
por falta de recursos.
Tal y como se incluye en la memoria técnica del proyecto Sonidos del Cielo, a
través de este proyecto se pretende concienciar a la sociedad de la importancia
de un cielo de calidad, libre de contaminación atmosférica y lumínica. Este y
otros proyectos de las entidades que participan en esta iniciativa ponen de
manifiesto la necesidad de disponer de un cielo libre de contaminación que
facilite el estudio astronómico, así como el disfrute de los aficionados que
realizan observaciones, por lo que con este trabajo se contribuiría a crear una
conciencia ecológica para proteger la calidad del cielo.
En este sentido, el impacto medioambiental del trabajo podría estar vinculado
con el Objetivo 7, que pretende garantizar el acceso a una energía, segura,
sostenible y moderna, el Objetivo 11 para lograr que las ciudades sean más
inclusivas, seguras, resilientes y sostenibles, o el Objetivo 12 para
garantizar modalidades de consumo y producción sostenibles, en el que se
incluye una meta para asegurar que las personas de todo el mundo tengan
información y conocimientos pertinentes para el desarrollo sostenible y los
estilos de vida en armonía con la naturaleza (objetivo 12.8 dentro del Objetivo
12 de ODS).
113
Este potencial impacto está alineado con el Objetivo 4 de la lista de Objetivos
de Desarrollo Sostenible, que pretende garantizar una educación inclusiva,
equitativa y de calidad y promover el aprendizaje durante toda la vida para
todos. En este objetivo se incluyen distintas metas para 2030, y de entre ellas,
este trabajo hace hincapié en promover la construcción y adecuación de
instalaciones educativas que tengan en cuenta las necesidades de los niños y
las personas con discapacidad y las diferencias de género, y que ofrezcan
entornos de aprendizaje seguros, no violentos, inclusivos y eficaces para todos
(meta 4.a del ODS número 4). Un claro ejemplo de cómo Sonidos del Cielo
pretende cumplir con esta meta es la organización de talleres sobre el
experimento en el Aula de Astronomía de Fuenlabrada con tabletas y
auriculares adquiridas con parte del presupuesto del proyecto para que los
niños puedan participar en este proyecto.
114
6 Bibliografía
[1] Comisión Europea. (2020, October 29). Ciencia Ciudadana. [Online].
Available: https://ec.europa.eu/digital-single-market/en/citizen-science.
[Accessed: 29-March-2021]
[2] F. Susana, F. Celina, “Ciencia ciudadana en la Sociedad de la Información:
nuevas tendencias a nivel mundial”, CTS. Ciencia, tecnología y sociedad, vol. 9,
nº27, pp. 11-31, Sept 2014
[3] Instituto Nacional de Estadística. (2020). Porcentaje de menores usuarios de
TIC. 2020. [Online] Available:
https://www.ine.es/jaxi/Datos.htm?path=/t00/mujeres_hombres/tablas_1/l
0/&file=c06002.px#!tabs-tabla. [Accessed: 29-March-2021]
[4] T. Ferran, “¿Qué es la gamificación? en Gamificación: fundamentos y
aplicaciones, 1º Edición, Barcelona, España, Editorial UOC, 2014.
https://books.google.es/books?id=SipNCgAAQBAJ&printsec=frontcover&hl=e
s&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
[5] Asociación Española de Videojuegos, “La Industria del Videojuego en
España: Anuario 2019”, España, Madrid. 2019.
[6] Sonidos del Cielo. (2020). El proyecto. [Online]. Available:
http://www.sonidosdelcielo.org/. [Accessed: 29-March-2021]
[7] Citizen Science Lab UPM. (2020). Sky Sounds. [Online]. Available:
https://www.zooniverse.org/projects/cslab-upm/sky-sounds. [Accessed: 29-
March-2021]
[8] Fundéu. (2019, June 13). Chatbot, neologismo válido. [Online]. Available:
https://www.fundeu.es/recomendacion/chatbot-neologismo-valido/.
[Accessed: 30-March-2021]
[9] Grammarist. (2014). Chatbot. [Online]. Available:
https://grammarist.com/new-words/chatbot/. [Accessed: 30-marzo-2021]
[10] N. Joshi. (2018, October 23). Yes, Chatbots And Virtual Assistants Are
Different!. [Online]. Available:
https://www.forbes.com/sites/cognitiveworld/2018/12/23/yes-chatbots-
and-virtual-assistants-are-different/. [Accessed: 30-March-2021]
[11] A. Srikanth. (2020, November 5). Virtual assistants vs Chatbots: What’s the
Difference & How to Choose the Right One?. [Online]. Available:
https://freshdesk.com/customer-engagement/virtual-assistant-chatbot-
blog/#:~:text=Chatbots%20are%20intelligent%20enough%20to,a%20wide%20
range%20of%20requests. [Accessed: 30-March-2021]
[12] A. M. Turing, “Computing Machinery and Intelligence”, Mind, Vol. 59, No.
236, pp. 433-460. October, 1950.
[13] J. Weizenbaum, “ELIZA-A Computer Program for the Study of Natural
Language Communication Between Man and Machine”, Communications of the
ACM, Vol. 9, No. 1, pp. 36-45. January, 1966.
[14] M.L. Mauldin, “ChatterBots, TinyMUDs, and the Turing Test Entering the
Loebner Prize Competition”, Proceedings of the Association for the Advancement
of Artificial Intelligence Conference in Artificial Intelligence 1994, Vol. 1, pp. 16-
21. 1994.
115
[15] K.M. Colby, “Modeling a paranoid mind”, Behavioral and Brain Sciences,
Vol. 4, No. 4, pp. 515-534, December, 1981.
[16] G. Güzeldere, S. Franchi, “Dialogues with colorful personalities of early AI”,
Standford Humanities Review, Vol. 4, No. 2. July, 1995.
[17] R.S. Wallace, “The Anatomy of A.L.I.C.E” in Parsing the Turing Test,
Dordrecht, Springer, pp. 181-210. 2009.
[18] Cleverbot. (2021). About Cleverbot. [Online]. Available:
https://www.cleverbot.com/. [Accessed: 1-April-2021]
[20] Guiness World Records. (2019, September 15). Most Loebner Prize wins.
[Online]. Available: https://www.guinnessworldrecords.com/world-
records/603076-most-loebner-prize-wins. [Accessed: 01-April-2021]
[24] R. High, “The Era of Cognitive Systems: An Inside Look at IBM Watson and
How it Works”, IBM Redbooks, IBM, U.S.A, 2012.
[25] Microsoft. (2014, April 17). Anticipating More from Cortana. [Online].
Available: https://www.microsoft.com/en-us/research/blog/anticipating-
more-from-cortana/ . [Accessed: 01-April-2021]
[28] M. Bates, "Health Care Chatbots Are Here to Help," in IEEE Pulse, vol. 10,
no. 3, pp. 12-14, May-June 2019, doi: 10.1109/MPULS.2019.2911816.
[31] AndyChatbot. (2021). Chat and Practice English with Andy. [Online].
Available: https://andychatbot.com/. [Accessed: 02-April-2021]
116
[32] Live Person. (2017, May 12). Customers prefer chatting with customer service
bots for simple tasks, new research finds. [Online]. Available:
https://pr.liveperson.com/index.php?s=43&item=496. [Accessed: 02-April-
2021]
[33] Just Eat UK. (2021). How does the Helper Bot chatbot work?. [Online].
Available: https://www.just-eat.co.uk/help/article/115005121685/how-
does-the-helper-bot-chatbot-work. [Accessed: 02-April-2021]
[34] World Health Organization. (2020, August 21). WHO Health Alert brings
COVID-19 facts to billions via WhatsApp. [Online]. Available:
https://www.who.int/news-room/feature-stories/detail/who-health-alert-
brings-covid-19-facts-to-billions-via-whatsapp. [Accessed: 02-April-2021]
118
[66] P. Burk, L. Polansky, D. Repetto, M. Roberts, D. Rockmore, “The Synthesis
of Sound Computer” in Music and Computers. A Theoretical and Historical
Approach. USA, 2005, Key College Publishing, ch. 4, sec. 4.4
[67] Google Cloud. (2021). Text-to-Speech. [Online]. Available:
https://cloud.google.com/text-to-speech. [Accessed: 07-April-2021]
[68] Microsoft Azure. (2021). Text to Speech. [Online]. Available:
https://azure.microsoft.com/es-es/services/cognitive-services/text-to-
speech/#customer-stories. [Accessed: 07-April-2021]
[69] IBM. (2021). Watson Text to Speech. [Online]. Available:
https://www.ibm.com/cloud/watson-text-to-speech. [Accessed: 07-April-
2021]
[70] AWS. (2021). ¿Qué es Amazon Polly?. [Online]. Available:
https://docs.aws.amazon.com/es_es/polly/latest/dg/what-is.html. [Accessed:
07-April-2021]
[71] Indeed. (2021, April 14). What Is a Web Application? How it Works, Benefits
and Examples. [Online]. Available: https://www.indeed.com/career-
advice/career-development/what-is-web-application. [Accessed: 08-April-2021]
[72] Essential Designs. (2019, July 26). Website vs Web App: What’s the
Difference?. [Online]. Available:
https://medium.com/@essentialdesign/website-vs-web-app-whats-the-
difference-e499b18b60b4. [Accessed: 08-Abril-2021]
[73] W3Schools. (2021). HTML Responsive Web Design. [Online]. Available:
https://www.w3schools.com/html/html_responsive.asp. [Accessed: 08-April-
2021]
[74] D. Sin, E. Lawson and K. Kannoorpatti, "Mobile Web Apps - The Non-
programmer's Alternative to Native Applications," 2012 5th International
Conference on Human System Interactions, 2012, pp. 8-15, doi:
10.1109/HSI.2012.11.
[75] World Wide Web Foundation. (2021). History of the Web. [Online]. Available:
https://webfoundation.org/about/vision/history-of-the-web/. [Accessed: 09-
April-2021]
[76] Equipo de Google Chrome. (2021). La evolución de la Web. [Online].
Available: http://www.evolutionoftheweb.com/?hl=es. [Accessed: 09-April-
2021]
[77] M. Latorre, “Historia de las Web, 1.0, 2.0, 3.0 y 4.0”, Repositorio de la
Universidad Marcelino Champagnat
[78] State of JavaScript. (2020). Front-end Frameworks. [Online]. Available:
https://2020.stateofjs.com/en-US/technologies/front-end-frameworks/.
[Accessed: 10-April-2021]
[79] Facebook Open Source. (2021). React. [Online]. Available:
https://es.reactjs.org/. [Accessed: 10-April-2021]
[80] Angular. (2021). Angular. [Online]. Available: https://angular.io/.
[Accessed: 10-Abril-2021]
[81] E. You. (2021). Vue.js The Progressive JavaScript Framework. [Online].
Available: https://vuejs.org/. [Accessed: 10-April-2021]
[82] Simform. (2021, January 5). Best Frontend Frameworks of 2021 for Web
Development. Available: https://www.simform.com/best-frontend-
119
frameworks/#:~:text=Top%203%20Frontend%20Frameworks%20of,framework
s%20of%202021%20as%20well. [Accessed: 15-April-2021]
[83] Naciones Unidas. (2021). Objetivos de Desarrollo Sostenible. Available:
https://www.un.org/sustainabledevelopment/es/objetivos-de-desarrollo-
sostenible/. [Accessed: 23-May-2021]
120
7 Anexos
Como parte del Trabajo Fin de Grado se han creado dos proyectos distintos
correspondientes al desarrollo del chatbot y a la aplicación web respectivamente.
Para poder llevar un control de los cambios que se han ido introduciendo en
ambos proyectos, así como para poder compartir el código generado o facilitar
su compartición, se ha empleado Github como sistema de control de versiones,
de manera que el código se encuentra publicado en los repositorios que se
incluyen a continuación.
x Proyecto del chatbot desarrollado en Rasa:
https://github.com/glitch3dbunny/sdc-chatbot-infantil
x Saludo:
121
x Explicación:
122
x Comenzar a jugar:
x Respuesta a la pregunta 1:
123
x Respuesta a la pregunta 2:
x Respuesta a la pregunta 3:
124
x Preguntar acerca de Sonidos del Cielo:
125
x Despedida:
126
Este documento esta firmado por
Firmante CN=tfgm.fi.upm.es, OU=CCFI, O=Facultad de Informatica - UPM,
C=ES
Fecha/Hora Sat May 29 22:24:01 CEST 2021
Emisor del [email protected], CN=CA Facultad de
Certificado Informatica, O=Facultad de Informatica - UPM, C=ES
Numero de Serie 630
Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (Adobe
Signature)