Odiseo: Cuando Crear Un Chatbot Es Cosa De Niños

Transcription

Odiseo: cuandocrear un chatbot escosa de niñosGrado en Ingeniería InformáticaTrabajo Fin de GradoAutor:Jonathan Verdú VerdúTutor/es:David Tomás DíazJulio 2022

Odiseo: cuando crear un chatbot es cosa de niñosAutorJonathan Verdú VerdúTutor/esDavid Tomás DíazDPTO Lenguajes y Sistemas InformáticosALICANTE, Julio 2022

AgradecimientosEl esfuerzo de este trabajo no habría sido posible sin el apoyo y el cariño depersonas como mi familia que, desde el primer momento, me dieron ánimos,enseñándome a ser constante y haciendo todo lo posible para que estuviesecómodo y concentrado.Agradezco también haber hecho caso a los consejos y experiencias de miscompañeros de carrera, que me han acompañado durante 4 largos años,compartiendo momentos únicos y ayudándome a superar todas las pruebas.Por último, quiero hacer menciones a mis amigos de toda la vida, queincondicionalmente, me han aportado su opinión sobre el trabajo y, porsupuesto, a mi tutor David, la única persona que me ha sabido guiar durantetodo el proyecto y me ha sabido aconsejar sabiamente, como buen profesory especialista en su campo.Es, sin duda, a todas esas personas a las que les dedico mi aportación coneste proyecto y lo que representa para mí y para todas aquellas personas quelo necesiten.V

El sabio no dice todo lo que piensa, pero siempre piensa todo lo que dice.SócratesSolo aquellos que miran con los ojos de los niños se pueden perder en elobjeto de su admiración.Eberhard ArnoldVII

Índice de contenidos1. Introducción . 12. Objetivos . 63. Metodología . 83.1 Investigaciones previas . 93.2 Herramientas de planificación y gestión de tiempo . 114. Estado de la cuestión . 135. Marco teórico . 235.1 Hablar con una máquina . 235.2 Intenciones del usuario. 255.3 Procesamiento de lenguaje natural (PLN) . 275.3.1 Problemas del lenguaje humano . 295.3.2 Soluciones del algoritmo . 326. Herramientas y tecnologías . 366.1 Administrador de base de datos MongoDB . 366.1.1 Conexión y librería Mongoose . 386.2 Visual Studio Code . 386.2.1 Node Javascript . 396.3 Data Cloud Heroku . 406.3.1 Servidor local Ngrok . 416.4 Control de versiones Github . 426.5 Servidor de ImgBB . 446.6 Google Cloud . 456.6.1 Credenciales Cloud SDK . 496.6.2 Google Dialogflow. 506.6.3 Google Actions . 537. Arquitectura del sistema . 567.1 Gestión de los datos . 587.1.1 Justificación de los datos . 60IX

XÍNDICE DE CONTENIDOS7.1.2 Aviso legal . 617.1.3 Persistencia de los datos . 627.1.4 Proceso de recopilación y almacenamiento . 647.2 Gestión del aprendizaje automático . 717.2.1 Emparejamiento de intenciones . 727.2.2 Gestión de webhooks y fulfillment . 747.3 Gestión del servidor . 767.3.1 Concurrencia de usuarios . 787.3.2 Funcionalidades de control . 807.4 Interfaces del usuario final . 828. Conclusiones . 85Bibliografía. 87Anexos . 89A1. Historia del PLN . 89A2. Herramientas de desarrollo para PLN . 90A3. Aplicaciones actuales de PLN . 91A4. Documento de política de privacidad de Odiseo . 92

Índice de figurasFigura 3.1: Planificación temporal del proyecto mediante un diagrama deGantt . 8Figura 3.2: Resumen de cambios en un archivo del proyecto en Github . 12Figura 3.3: Vista general del proyecto en Github . 12Figura 4.1: Consulta de una reserva de viaje a través de TravelClub . 14Figura 4.2: Petición de una compra online a través de Eroski Supermarkets. 14Figura 4.3: Comandos de voz recibidos por el dispositivo Echo . 15Figura 4.4: Ejemplo de comunicación domótica con el asistente Siri . 16Figura 4.5: Diseño de asistentes por LiveChat Software. 17Figura 4.6: Diseño de asistentes por Boost.AI . 17Figura 4.7: Conversación con Differ . 19Figura 4.8: Sistema de evaluación con Hubert . 20Figura 4.9: Conversación con DulcineIA . 22Figura 5.1: Boceto esquemático sobre el ciclo de la comunicación . 23Figura 5.2: Comparación del cerebro humano con el PLN . 25Figura 5.3: Esquema de funcionamiento Dialogflow y sus componentes. 26Figura 5.4: Ejemplo de análisis sintáctico en una oración compuesta . 29Figura 5.5: Ejemplo de un árbol de decisiones para detectar el fin de unaexpresión . 33Figura 5.6: Esquema sobre el funcionamiento de reconocimiento internode Dialog Flow . 34Figura 6.1: Esquema de una colección de datos embebida para MongoDB. 37Figura 6.2: Interfaz del cluster MongoDB Atlas . 37Figura 6.3: Biblioteca de extensiones en Visual Studio Code . 39Figura 6.4: Consola de despliegue en Heroku . 40Figura 6.5: Terminal ejecutado por una conexión de Ngrok . 42Figura 6.6: Interfaz de cambios en Github Desktop . 44Figura 6.7: Biblioteca de imágenes utilizadas para Odiseo en el servidorImgBB . 45Figura 6.8: Esquema de servicios ofrecidos por Google Cloud Platform . 46Figura 6.9: Panel administrativo de Google Cloud Platform . 48XI

XIIÍNDICE DE FIGURASFigura 6.10: Estadísticas de rendimiento por Dialogflow del proyectoOdiseo . 48Figura 6.11: Comprobación de credenciales de Odiseo a través de la ShellCloud SDK . 50Figura 6.12: Interfaz de desarrollo de Dialogflow. 51Figura 6.13: Validaciones de entrenamiento en Dialogflow . 52Figura 6.14: Funcionalidades de la API de Dialogflow . 52Figura 6.15: Diseño de interacciones en Actions Console . 54Figura 6.16: Respuesta del asistente de voz Odiseo, el mochuelointeligente . 55Figura 7.1: Esquema estructural del asistente educativo Odiseo . 56Figura 7.2: Fragmento del documento de política de privacidad de Odiseo. 62Figura 7.3: Esquema genérico para la base de datos de Odiseo . 63Figura 7.4: Ejemplo de consulta para una base de datos MongoDB . 64Figura 7.5: Ejemplos de Odiseo pidiendo información al usuario . 65Figura 7.6: Ejemplos de Odiseo mostrando error por la validación alusuario . 67Figura 7.7: Ejemplo de Odiseo mostrando error por la validación de unapregunta . 69Figura 7.8: Ejemplo de Odiseo mostrando un control de los inputspendientes . 70Figura 7.9: Conexión entre API Node.js y MongoDB Atlas . 71Figura 7.10: Comparación entre intents de Odiseo y opciones del interfaz. 73Figura 7.11: Información recogida por el webhook de una intención . 75Figura 7.12: Conexión pública entre Dialogflow y el servidor de Odiseo 76Figura 7.13: Vista general del código del servidor y los archivos utilizados. 78Figura 7.14: Proceso de conexión con concurrencia entre usuario yservidor . 79Figura 7.15: Ejemplo de datos almacenados en User storage . 81Figura 7.16: Comunicación entre las dos interfaces a través de Enviarpregunta . 83Figura 8.1: Hitos históricos sobre el PLN . 89

Índice de tablasTabla 7.1: Datos generales recogidos por la aplicación . 59Tabla 7.2: Referencias de variables reutilizables . 60XIII

1. IntroducciónEl auge y la globalización de la Inteligencia Artificial (IA), nos ha permitidoconocer un mundo dónde los asistentes de voz son cada vez más comunes enlos dispositivos electrónicos.Sin embargo, aunque parezca algo novedoso, ya en la década de los sesentase introdujo el primer dispositivo conversacional [1], conocido comoELIZA1. En 1966, el profesor Joseph Weizenbaum, del Instituto Tecnológicode Massachusetts, originó el primer bot conversacional para que hablase porescrito con un humano, simulando comprensión y empatía. Esta tecnología,a su vez, se basaba en el test de Turing2, quien en 1950 (dieciséis años antes),publicaba su artículo Computing Machinery and Intelligence3 cuandotrabajaba en la Universidad de Mánchester. El artículo documentaba unexperimento [2] dónde actuaban diferentes sujetos humanos y una máquinasimulando una conversación natural. La particular propuesta de Alan Turing,diseñada para averiguar los límites de la IA, puso en evidencia la capacidadque tenía dicha máquina de confundir al interlocutor, cuando éste no podíadiferenciarla de una persona real.El esfuerzo de las primeras investigaciones sobre sistemas inteligentesprovocó una carrera tecnológica, por parte de los mejores ingenieros, hastaconseguir en pleno siglo XXI, un impacto revolucionario en la sociedad. Laintegración de esta inteligencia robótica se ha convertido en un hecho ennuestras vidas y herramientas como los sistemas de navegación y seguridad1Acceso al emulador psicológico que imita al programa clásico y original(http://deixilabs.com/eliza.html)2Acceso al emulador visual simplificado que imita el experimento, con algunas aprueba-el-test-de-turing/)3Artículo en formato PDF extraído de su versión ers/turing.pdf)1

2INTRODUCCIÓNde los coches autónomos, el traductor, el corrector de palabras o losasistentes de voz de las compañías telefónicas, demuestran su importancia.Muchos hogares, por ejemplo, cuentan con asistentes digitales, como Echo,Siri o Cortana, que les permiten automatizar tareas y consultar búsquedas deinformación. Otros sectores empresariales como las grandes marcas, utilizanchatbots [3] para facilitar un soporte guiado al usuario, cuando necesitarealizar un pago, una compra o una reserva a través de internet. Estasaplicaciones, además, permiten mejorar la eficiencia operativa de la empresaal reducir el coste del servicio al cliente, así como los turnos del personal, yaque se encuentran disponibles las 24h.En el dominio educativo [4] también se han estado desarrollando asistentesinteractivos. Muchas de estas herramientas se presentan como ayudas parael aprendizaje: juegos educativos, plataformas de comunicación con losprofesores, sistemas de organización para los alumnos o incluso aplicacionesde evaluación con reglas preestablecidas.Como podemos observar, la presencia de estas aplicaciones podemosencontrarla en cualquier ámbito, lo que significa que dependemosconstantemente de su uso y debemos confiar en la información que nosofrecen. Este contexto social nos lleva a justificar la importancia del trabajoque a continuación se va a presentar, ya que se trata del desarrollo de unagente conversacional o chatbot.Hoy en día el desarrollo de estas aplicaciones se ha simplificadoenormemente gracias a herramientas que ofrecen una interfaz deprogramación, como puede ser DialogFlow de Google4 (una herramienta deanálisis y desarrollo gratuita para chatbots). Sin embargo, crear una IA capazde comunicarse con un humano no es tan sencillo, ya que se tiene que4Acceso a Google Dialogflow (https://cloud.google.com/dialogflow/)

3INTRODUCCIÓNafrontar el problema de la ambigüedad y variabilidad del lenguaje humanousando técnicas de Procesamiento del Lenguaje Natural (PLN). Además, elapoyo humano juega un papel importante, ya que independientemente deltipo de enfoque y la plataforma, la intervención humana es crucial paraconfigurar, capacitar y optimizar el sistema del chatbot. En otras palabras, senecesitan personas con conocimientos en el campo computacional paraentrenar esa inteligencia.Pero, en ese caso, surgen algunas preguntas cómo: ¿Sería posible entrenaruna IA de manera sencilla y sin conocimientos informáticos? ¿Se puededesarrollar una aplicación genérica para cualquier uso? ¿Se puede entrenarde forma ilimitada a un agente?. Para solventar todas estas dudas, nace elproyecto Odiseo, el proyecto desarrollado en este TFG.Odiseo, conocido como “el mochuelo inteligente” o “el asistente educativo”,nace precisamente de la idea de conseguir un asistente virtual, capaz de serintuitivo para todas aquellas personas que no están familiarizadas con el usode las tecnologías.Además, su sistema de aprendizaje sobrepasa los límites de los botsconvencionales, pues a diferencia de los propios asistentes de Google oAlexa, que sólo son capaces de responder intenciones predefinidas, Odiseoes capaz de almacenar preguntas de los propios usuarios como intenciones,lo que permite que cualquier persona pueda adaptarlo para uso personal.El sistema está diseñado como un bot genérico de aplicación general acualquier ámbito. Sin embargo, en este proyecto nos hemos querido centraren algo más específico, como es el ámbito educativo. Concretamente, suinterfaz permite que profesores y alumnos puedan desarrollar de maneracolaborativa su base de conocimiento, además de la interacción convencionalen la que se realizan consultas y se reciben respuestas por parte del chatbot

4INTRODUCCIÓNuna vez entrenado. Su estructura, además, permite una autenticación segurade los usuarios respetando su privacidad.Dispone de dos modos de uso interactivos: bien a través de su web, comoagente de chat5, o bien a través del propio asistente de Google como agentede voz6. Gracias a este último, los alumnos también podrán participar en lapropuesta de nuevas cuestiones que los profesores revisarán, confirmandoo rechazando su integración (simulando un sistema de evaluación).Teniendo en cuenta su usabilidad con comandos de voz (que facilita elacceso a usuarios con unas competencias digitales más limitadas), susilustraciones adaptadas a un público infantil y sus menús personalizadospara un contexto educativo, Odiseo es la herramienta ideal para aprender,compartir y divertirse. Una herramienta colaborativa que cualquier usuariopuede utilizar, desde los más jóvenes hasta los más seniors, incluyendotodas las edades.Comprendiendo la importancia del proyecto, a continuación se detallacómo sigue la estructura de esta memoria. En la Sección 2 definiremos losobjetivos que se han propuesto durante el proyecto. En la Sección 3hablaremos de la metodología utilizada y de la gestión del tiempo durantesu desarrollo. En la Sección 4 abordaremos el estado de la cuestión, dondecompararemos nuestro sistema con herramientas similares del mercado.En la Sección 5 explicaremos con detalle los fundamentos y las bases defuncionamiento de los chatbots y del PLN. En la Sección 6 nos centraremosen las herramientas utilizadas durante su implementación. En la Sección 7analizaremos la estructura y los esquemas de relación de datos utilizados56Acceso a la interfaz web, diseñada para profesores (https://odiseo-chatbot.herokuapp.com/)Acceso a la interfaz de voz, con un estilo infantil, diseñada para ke/uid/000000ea15df3d39/alm/CgRnuCCfEgIQAQ ?hl es)

5INTRODUCCIÓNen su ejecución. En la Sección 8 realizaremos algunas conclusiones acercade todo lo que se ha estado trabajando. Por último, las referencias y anexosse muestran al final de este documento.Todo el código de este proyecto se encuentra disponible en el siguienteenlace de Github, para que el lector pueda consultar libremente los detallesde implementación: https://github.com/jonaverd/chatbot-project

2. ObjetivosEl objetivo general de este proyecto es el desarrollo y entrenamiento de unrobot conversacional educativo, capaz de interactuar con los usuarios demanera autónoma.Para su elaboración se han cumplimentado como requisitos los siguientesobjetivos principales: Comprender la complejidad de un chatbot y su arquitectura deintegración en los dispositivos digitales. Investigar el funcionamiento de las técnicas de PLN aplicadas aldesarrollo de chatbots. Aprender el uso de la herramienta Dialogflow de Google paradesarrollar y entrenar un chatbot personalizado. Analizar la aplicación del chatbot desarrollado en un entorno conusuarios reales.Durante la fase de desarrollo, se han tenido en cuenta otras pautas quemejoran y optimizan la calidad de este proyecto. Los siguientes objetivossecundarios complementan a los ya mencionados anteriormente: Diseñar una interfaz intuitiva para los usuarios, haciendo posible suintegración en páginas web y dispositivos móviles. Investigar la documentación sobre la API de DialogFlow, paradescubrir y desarrollar funcionalidades más complejas que su interfazbásica no permite.6

7OBJETIVOS Comunicar el chatbot con un servidor, a través de eventos, paraprocesar y almacenar la información del usuario. Facilitar la conexión de un servidor público, que permita unaconcurrencia de usuarios y una disponibilidad las 24h. Investigar el uso de Google Actions7 y su integración, como asistentede voz del proyecto. Conocer el uso de bases de datos no relacionales y su aplicación paraalmacenar y recuperar estructuras sencillas de datos. Aplicar conocimientos sobre Javascript y entornos de programación,para facilitar la integración de una API personalizada, para la gestióny desarrollo del proyecto.7Acceso a Google Actions (https://developers.google.com/assistant/console)

3. MetodologíaEn este apartado se va a explicar la planificación que hemos seguido paralograr la consecución de los objetivos, como las investigaciones previas deaprendizaje, la gestión del tiempo y el control de versiones. Este proyecto noha hecho uso de ninguna metodología estándar de desarrollo y, por lo tanto,se debe valorar la gestión personal que se ha realizado durante suelaboración.A continuación, se muestra un diagrama de Gantt8 (Figura 3.1) para resumirla planificación temporal de todo el proyecto.Figura 3.1: Planificación temporal del proyecto mediante un diagrama deGantt8Visualización web del GalQbOe1ugn2EsXXea7kmA/edit?utm content DAFEKeHzX9I&utm campaign designshare&utm medium link2&utm source sharebutton)8

9METODOLOGÍA3.1 Investigaciones previasEn primer lugar, para hacer frente a la finalidad inicial del proyecto, se tuvoque investigar durante las primeras semanas el funcionamiento básico de unchabot y de qué manera se utilizaba en los dispositivos actuales (como losasistentes personales). Estos agentes conversacionales suponían, al mismotiempo, una investigación sobre el PLN ya que se basan, precisamente, endichos algoritmos. Por este motivo, durante las siguientes semanas se buscóinformación sobre el funcionamiento de esta tecnología y su relación con ellenguaje humano.Una vez conocida la información básica sobre los chatbots, se necesitabaempezar con la creación de uno propio. Para ello, se tomó la propuesta de laherramienta DialogFlow de Google, gracias a que era gratuita, innovadora yfácil de manejar. Esta herramienta tomó los siguientes meses de desarrollo einvestigación para conocer mejor su API y las características que ofrecía eluso de sus webhooks. Cuando hablamos de webhooks, nos referimos a loseventos desencadenados por Dialogflow. Cada vez que un usuario interactúacon el agente, éste desencadena un evento que normalmente provoca unapetición web. Si interceptamos estas peticiones a través de un servidorintermedio (técnica conocida como fulfillment), podremos conocer lainformación que se está escribiendo en el chat.Durante su programación, se tomó en cuenta el aprendizaje de Ngrok 9, yaque las pruebas con DialogFlow, requerían una conexión pública teniendoun servidor en local. También se aprovechó la ocasión durante esos mesespara repasar conceptos relacionados sobre Javascript, Node.js10, llamadas9Acceso y descarga Ngrok (https://ngrok.com/)10Acceso y descarga Node.js (https://nodejs.org/es/)

10METODOLOGÍAasíncronas, creación de servidores, peticiones HTML y entornos deprogramación como Visual Studio Code11.A mitad del proyecto se consiguió un modelo básico de funcionamiento, loque supuso el siguiente paso: la integración con la base de datos y su enfoqueeducativo. Aprovechando la oportunidad, se investigó sobre las bases dedatos no relacionales como MongoDB12, por su libertad de restricciones paraestructuras sencillas de datos en comparación con las relacionales. Cuandofinalizó el modelo definitivo con la base de datos integrada, se propuso unaentidad para el chatbot, con un nombre, un eslogan y un logotipo. Durantelos siguientes meses, se arreglaron bugs y fallos de la interfaz queprovocaban faltas de usabilidad.Para los últimos meses de desarrollo, se estuvo trabajando en la publicaciónde un hosting público como Heroku13, lo que permitía una disponibilidad deacceso las 24h sin usar un servidor local y se aprovechó para añadir laconcurrencia de usuarios. Además, se tuvieron en cuenta otras integracionesadicionales, como el asistente de voz de Google Actions, aprovechando unestudio sobre el mismo.Por último, se decidió que la interfaz web se enfocaría en un tono más seriopara la enseñanza de los profesores, mientras que la de voz se presentaríainfantilizada para el aprendizaje de los alumnos, siendo ésta última másaccesible para cualquier usuario.11Acceso y descarga Visual Studio Code (https://code.visualstudio.com/)12Acceso a MongoDB (https://www.mongodb.com/)13Acceso a Heroku (https://www.heroku.com/)

11METODOLOGÍA3.2 Herramientas de planificación y gestión de tiempoEn cuanto a la gestión del tiempo, establecíamos un recordatorio con losavances a conseguir o investigar durante las horas de trabajo de ese día,cumpliendo con los plazos de entrega. Estas horas de trabajo podían variarde entre 6 a 8 horas, según su situación, contando días laborales.Cada dos semanas, aproximadamente, se llevaba a cabo una revisiónobligatoria por parte del profesor responsable, para comprobar y confirmarlos avances establecidos en las sesiones anteriores.Aunque no se han hecho uso de herramientas externas de planificación, seha llevado un control estricto de las sesiones de trabajo gracias a laherramienta de Github14, una web de alojamiento de código con control deversiones. Cada una de estas versiones reflejan los cambios de código que seactualizaban en cada interacción, demostrando un progreso de desarrollo.A continuación, se muestran unas imágenes de Github, dónde se puedenobservar cambios en los diferentes archivos del proyecto como en la Figura3.2, así como una pequeña presentación de uso, para otorgarle másvisibilidad como en la Figura 3.3.14Acceso a Github (https://github.com)

12METODOLOGÍAFigura 3.2: Resumen de cambios en un archivo del proyecto en GithubFigura 3.3: Vista general del proyecto en Github

4. Estado de la cuestiónDurante las últimas décadas, el consumo de la tecnología ha implicado unanecesidad de innovación por parte de todas las empresas. Nuestra sociedadse ha modernizado y, por lo tanto, es lógico pensar que los consumidoresbuscan cada vez más un mercado competitivo en los sectores informáticos.Si nos centramos en el mercado de la inteligencia artificial, por ejemplo,podemos observar una gran demanda por los asistentes conversacionales.Estas aplicaciones se están convirtiendo en un estándar, debido a ladigitalización que están sufriendo muchos sectores [3]. Podemos encontraralgunos ejemplos en el sector de viajes y ocio, como Gol Airlines15,TravelClub16 (representado en la Figura 4.1), Stubhub17; en el sectorenergético, como Naturgy18, Butagaz19; en supermercados y comercios,como Benefit Cosmetics20, Eroski Supermarkets21 (representado en laFigura 4.2); en el campo sanitario, como DKV22; o en el sector logístico,como Correos23.Estas herramientas, sin embargo, se diseñan con el propósito limitado defacilitar operaciones con dicha empresa. Mediante su IA son capaces deresolver consultas sencillas de atención al cliente o la gestión de algunastransacciones (compras, reservas, verificaciones, etc.)15Asistente Gol Airlines )16Asistente TravelClub (https://www.travelclub.es/ayuda.cfm#)17Web Stubhub con asistente desplegable (https://www.stubhub.es/)18Asistente Naturgy (https://www.naturgy.es/asistente virtual)19Asistente e] chat&contact[account] GEC)20Web Benefit Cosmetics con asistente desplegable (https://www.benefitcosmetics.com/en-us)21Web Eroski Supermarkets con asistente desplegable (https://supermercado.eroski.es/en/)22Web DKV con asistente desplegable (https://dkv.es/particulares)23Web Correos con asistente desplegable 13

14ESTADO DE LA CUESTIÓNFigura 4.1: Consulta de una reserva de viaje a través de TravelClubFigura 4.2: Petición de una compra online a través de Eroski Supermarkets

15ESTADO DE LA CUESTIÓNEn el mercado de estas aplicaciones, también podemos encontrarnos conasistentes personales con una IA algo más avanzada. Su sistema les permiteconversar con una persona, realizando búsquedas de información máscomplejas, detectar emociones o incluso automatizar procesos (aparatosinteligentes o sistemas de domótica24). Muchos de estos asistentes sonconocidos, como puede ser: Alexa25, el asistente de voz de Amazon(representado en la Figura 4.3); el propio Asistente de Google26; Siri27, elasistente de voz de Apple (representado en la Figura 4.4); Cortana28, comoasistente de Microsoft; o Bixby29, el asistente

Ejemplo de consulta para una base de datos MongoDB . 7.1.4 Proceso de recopilación y almacenamiento . Para cerrar este apartado, vamos a explicar con detalle, el proceso completo que conlleva la gestión de datos, desde la interacción con el interfaz hasta el código del servidor. Petición de la interfaz